def doJSONCheck(self): """ Go find movies and add them! """ if self.isDisabled(): log.debug("Trakt has been disabled") return log.info("Starting Trakt check") trakt = Trakt() watchlist = trakt.getWatchlist() if not watchlist: log.info("Could not get watchlist. Please add a password if you have a protected account") return MyMovieController = MovieController() for movie in watchlist: if self.abort: # this loop takes a while, stop when the program needs to close log.info("Aborting trakt watchlist check") return time.sleep(5) # give the system some slack if self.conf("dontaddcollection"): if "in_collection" in movie: if movie.get("in_collection"): log.debug('Movie "%s" already in collection, ignoring' % movie.get("title")) continue log.debug('Searching for movie: "%s".' % movie.get("title")) result = False try: if movie.get("tmdb_id") != "": result = self.searcher["movie"].findById(movie.get("tmdb_id")) elif movie.get("imdb_id") != "": result = self.searcher["movie"].findByImdbId(movie.get("imdb_id")) else: log.info('Trakt has no tmdb or imdb Id for movie: "%s".' % movie.get("title")) continue except Exception: result = False if not result: log.info('Movie not found: "%s".' % movie.get("title")) continue log.debug("Checking movie: %s." % movie.get("title") + " (" + str(movie.get("year")) + ")") try: # Check and see if the movie is in CP already, if so, ignore it. cpMovie = Db.query(Movie).filter_by(imdb=movie.get("imdb_id")).first() if cpMovie: log.debug('Movie found in CP Database, ignore: "%s".' % movie.get("title")) continue log.info("Adding movie to queue: %s." % movie.get("title") + " (" + str(movie.get("year")) + ")") quality = Db.query(QualityTemplate).filter_by(name=self.config.get("Quality", "default")).one() MyMovieController._addMovie(result, quality.id) except: log.info( 'MovieController unable to add this movie: "%s". %s' % (movie.get("title"), traceback.format_exc()) )
def testTrakt(self, **data): trakt = Trakt() result = trakt.test(data.get('Trakt.apikey'), data.get('Trakt.username'), data.get('Trakt.password')) return str(result)
def testTrakt(self, **data): trakt = Trakt() result = trakt.test(data.get('Trakt_notification.apikey'), data.get('Trakt_notification.username'), data.get('Trakt_notification.password')) return str(result)
def doRename(self): ''' Go find files and rename them! ''' log.debug('Starting renaming') if self.isDisabled(): log.debug('Renaming is disabled') return allMovies = self.getMovies(self.conf('download')) log.debug('Movies: %s' % allMovies) if allMovies: log.debug("Ready to rename some files.") for movie in allMovies: if movie.get('match'): log.debug('self.renameFiles(movie)') finalDestination = self.renameFiles(movie) # Search for trailer & subtitles log.debug('crons') cherrypy.config['cron']['trailer'].forDirectory(finalDestination['directory']) cherrypy.config['cron']['subtitle'].forDirectory(finalDestination['directory']) # Update Metadata if self.config.get('Meta', 'enabled'): log.debug('metadata') nfoFileName = self.config.get('Meta', 'nfoFileName') fanartFileNaming = self.config.get('Meta', 'fanartFileName') fanartMinHeight = self.config.get('Meta', 'fanartMinHeight') fanartMinWidth = self.config.get('Meta', 'fanartMinWidth') posterFileNaming = self.config.get('Meta', 'posterFileName') posterMinHeight = self.config.get('Meta', 'posterMinHeight') posterMinWidth = self.config.get('Meta', 'posterMinWidth') try: x = xmg.MetaGen(movie['movie'].imdb) fanartOrigExt = os.path.splitext(x.get_fanart_url(fanartMinHeight, fanartMinWidth))[-1][1:] posterOrigExt = os.path.splitext(x.get_poster_url(posterMinHeight, posterMinWidth))[-1][1:] nfo_location = os.path.join(finalDestination['directory'], self.genMetaFileName(movie, nfoFileName)) fanart_filename = self.genMetaFileName(movie, fanartFileNaming, add_tags = {'orig_ext': fanartOrigExt}) poster_filename = self.genMetaFileName(movie, posterFileNaming, add_tags = {'orig_ext': posterOrigExt}) urlOnly = self.config.get('Meta', 'urlOnly') x.write_nfo(nfo_location, url = True, xml = False) x.write_fanart(fanart_filename, finalDestination['directory'], fanartMinHeight, fanartMinWidth) x.write_poster(poster_filename, finalDestination['directory'], posterMinHeight, posterMinWidth) log.info('XBMC metainfo for imdbid, %s, generated' % movie['movie'].imdb) except Exception, e: log.error('XMG TMDB API failure. Please report to developers. API returned: %s' % e) log.error(traceback.format_exc()) # Run post-processing Scripts self._run_extra_script(finalDestination) # Notify XBMC log.debug('XBMC') xbmc = XBMC() xbmc.notify('Downloaded %s (%s)' % (movie['movie'].name, movie['movie'].year)) xbmc.updateLibrary() # Notify NMJ log.debug('NMJ') nmj = NMJ() nmj.updateLibrary() # Notify PLEX log.debug('PLEX') plex = PLEX() plex.updateLibrary() # Notify PROWL log.debug('PROWL') prowl = PROWL() prowl.notify('Downloaded %s (%s)' % (movie['movie'].name, movie['movie'].year), 'Download Complete') # Notify GROWL log.debug('GROWL') growl = GROWL() growl.notify('Downloaded %s (%s)' % (movie['movie'].name, movie['movie'].year), 'Download Complete') # Notify Notifo log.debug('Notifo') notifo = Notifo() notifo.notify('%s (%s)' % (movie['movie'].name, movie['movie'].year), "Downloaded:") # Notify SNS log.debug('SNS') sns = SNS() sns.notify('%s (%s)' % (movie['movie'].name, movie['movie'].year), "Downloaded:") # Notify Boxcar log.debug('Boxcar') boxcar = Boxcar() boxcar.notify('%s (%s)' % (movie['movie'].name, movie['movie'].year), "Downloaded:") #Notify NotifyMyAndroid log.debug('NotifyMyAndroid') nma = NMA() nma.notify('Download Complete', 'Downloaded %s (%s)' % (movie['movie'].name, movie['movie'].year)) # Notify Twitter log.debug('Twitter') twitter = Twitter() twitter.notify('Download Finished', 'Downloaded %s (%s)' % (movie['movie'].name, movie['movie'].year)) # Notify Synoindex log.debug('Synoindex') synoindex = Synoindex() synoindex.addToLibrary(finalDestination['directory']) # Notify Trakt log.debug('Trakt') trakt = Trakt() trakt.notify(movie['movie'].name, movie['movie'].year, movie['movie'].imdb) else: path = movie['path'].split(os.sep) path.extend(['_UNKNOWN_' + path.pop()]) target = os.sep.join(path) _move(movie['path'], target) log.info('No Match found for: %s' % str(movie['info']['name'])) #Cleanup if self.conf('cleanup'): log.debug('cleanup') path = movie['path'] # if self.conf('destination') == path: # log.error('Download folder and movie destination shouldn\'t be the same. Change it in Settings >> Renaming.') # return for root, subfiles, filenames in os.walk(path): skip = False # Stop if something is in ignored list for ignore in self.ignoredInPath: if ignore in root.lower(): skip = True # Ignore full directory names for dir in os.path.split(root): if dir in self.ignoreNames: skip = True # ignore if the current dir is the blackhole if root in self.conf('download'): skip = True if skip: continue for filename in filenames: fullFilePath = os.path.join(root, filename) fileSize = os.path.getsize(fullFilePath) if fileSize < 157286400: try: os.remove(fullFilePath) log.info('Removing file %s.' % fullFilePath) except OSError: log.error('Couldn\'t remove file %s. Too large.' % fullFilePath) try: os.rmdir(root) log.info('Removing dir: %s in download dir.' % root) except OSError: log.error("Tried to clean-up download folder, but '%s' isn't empty." % root)
def doRename(self): """ Go find files and rename them! """ log.debug("Starting renaming") if self.isDisabled(): log.debug("Renaming is disabled") return allMovies = self.getMovies(self.conf("download")) log.debug("Movies: %s" % allMovies) if allMovies: log.debug("Ready to rename some files.") for movie in allMovies: if movie.get("match"): log.debug("self.renameFiles(movie)") finalDestination = self.renameFiles(movie) # Search for trailer & subtitles log.debug("crons") cherrypy.config["cron"]["trailer"].forDirectory(finalDestination["directory"]) cherrypy.config["cron"]["subtitle"].forDirectory(finalDestination["directory"]) # Update Metadata if self.config.get("Meta", "enabled"): log.debug("metadata") nfoFileName = self.config.get("Meta", "nfoFileName") fanartFileNaming = self.config.get("Meta", "fanartFileName") fanartMinHeight = self.config.get("Meta", "fanartMinHeight") fanartMinWidth = self.config.get("Meta", "fanartMinWidth") posterFileNaming = self.config.get("Meta", "posterFileName") posterMinHeight = self.config.get("Meta", "posterMinHeight") posterMinWidth = self.config.get("Meta", "posterMinWidth") try: x = xmg.MetaGen(movie["movie"].imdb) fanartOrigExt = os.path.splitext(x.get_fanart_url(fanartMinHeight, fanartMinWidth))[-1][1:] posterOrigExt = os.path.splitext(x.get_poster_url(posterMinHeight, posterMinWidth))[-1][1:] nfo_location = os.path.join( finalDestination["directory"], self.genMetaFileName(movie, nfoFileName) ) fanart_filename = self.genMetaFileName( movie, fanartFileNaming, add_tags={"orig_ext": fanartOrigExt} ) poster_filename = self.genMetaFileName( movie, posterFileNaming, add_tags={"orig_ext": posterOrigExt} ) urlOnly = self.config.get("Meta", "urlOnly") x.write_nfo(nfo_location, url=True, xml=False) x.write_fanart(fanart_filename, finalDestination["directory"], fanartMinHeight, fanartMinWidth) x.write_poster(poster_filename, finalDestination["directory"], posterMinHeight, posterMinWidth) log.info("XBMC metainfo for imdbid, %s, generated" % movie["movie"].imdb) except Exception, e: log.error("XMG TMDB API failure. Please report to developers. API returned: %s" % e) log.error(traceback.format_exc()) # Run post-processing Scripts self._run_extra_script(finalDestination) # Notify XBMC log.debug("XBMC") xbmc = XBMC() xbmc.notify("Downloaded %s (%s)" % (movie["movie"].name, movie["movie"].year)) xbmc.updateLibrary() # Notify NMJ log.debug("NMJ") nmj = NMJ() nmj.updateLibrary() # Notify PLEX log.debug("PLEX") plex = PLEX() plex.updateLibrary() # Notify PROWL log.debug("PROWL") prowl = PROWL() prowl.notify("Downloaded %s (%s)" % (movie["movie"].name, movie["movie"].year), "Download Complete") # Notify GROWL log.debug("GROWL") growl = GROWL() growl.notify("Downloaded %s (%s)" % (movie["movie"].name, movie["movie"].year), "Download Complete") # Notify Notifo log.debug("Notifo") notifo = Notifo() notifo.notify("%s (%s)" % (movie["movie"].name, movie["movie"].year), "Downloaded:") # Notify Boxcar log.debug("Boxcar") boxcar = Boxcar() boxcar.notify("%s (%s)" % (movie["movie"].name, movie["movie"].year), "Downloaded:") # Notify NotifyMyAndroid log.debug("NotifyMyAndroid") nma = NMA() nma.notify("Download Complete", "Downloaded %s (%s)" % (movie["movie"].name, movie["movie"].year)) # Notify Twitter log.debug("Twitter") twitter = Twitter() twitter.notify("Download Finished", "Downloaded %s (%s)" % (movie["movie"].name, movie["movie"].year)) # Notify Synoindex log.debug("Synoindex") synoindex = Synoindex() synoindex.addToLibrary(finalDestination["directory"]) # Notify Trakt log.debug("Trakt") trakt = Trakt() trakt.notify(movie["movie"].name, movie["movie"].year, movie["movie"].imdb) else: path = movie["path"].split(os.sep) path.extend(["_UNKNOWN_" + path.pop()]) target = os.sep.join(path) _move(movie["path"], target) log.info("No Match found for: %s" % str(movie["info"]["name"])) # Cleanup if self.conf("cleanup"): log.debug("cleanup") path = movie["path"] # if self.conf('destination') == path: # log.error('Download folder and movie destination shouldn\'t be the same. Change it in Settings >> Renaming.') # return for root, subfiles, filenames in os.walk(path): skip = False # Stop if something is in ignored list for ignore in self.ignoredInPath: if ignore in root.lower(): skip = True # Ignore full directory names for dir in os.path.split(root): if dir in self.ignoreNames: skip = True # ignore if the current dir is the blackhole if root in self.conf("download"): skip = True if skip: continue for filename in filenames: fullFilePath = os.path.join(root, filename) fileSize = os.path.getsize(fullFilePath) if fileSize < 157286400: try: os.remove(fullFilePath) log.info("Removing file %s." % fullFilePath) except OSError: log.error("Couldn't remove file %s. Too large." % fullFilePath) try: os.rmdir(root) log.info("Removing dir: %s in download dir." % root) except OSError: log.error("Tried to clean-up download folder, but '%s' isn't empty." % root)
def testTrakt(self, **data): trakt = Trakt() result = trakt.test(data.get("Trakt.apikey"), data.get("Trakt.username"), data.get("Trakt.password")) return str(result)
def doRename(self): ''' Go find files and rename them! ''' log.debug('Starting renaming') if self.isDisabled(): log.debug('Renaming is disabled') return allMovies = self.getMovies(self.conf('download')) log.debug('Movies: %s' % allMovies) if allMovies: log.debug("Ready to rename some files.") for movie in allMovies: if movie.get('match'): log.debug('self.renameFiles(movie)') finalDestination = self.renameFiles(movie) # Search for trailer & subtitles log.debug('crons') cherrypy.config['cron']['trailer'].forDirectory( finalDestination['directory']) cherrypy.config['cron']['subtitle'].forDirectory( finalDestination['directory']) # Update Metadata if self.config.get('Meta', 'enabled'): log.debug('metadata') nfoFileName = self.config.get('Meta', 'nfoFileName') fanartFileNaming = self.config.get('Meta', 'fanartFileName') fanartMinHeight = self.config.get('Meta', 'fanartMinHeight') fanartMinWidth = self.config.get('Meta', 'fanartMinWidth') posterFileNaming = self.config.get('Meta', 'posterFileName') posterMinHeight = self.config.get('Meta', 'posterMinHeight') posterMinWidth = self.config.get('Meta', 'posterMinWidth') try: x = xmg.MetaGen(movie['movie'].imdb) fanartOrigExt = os.path.splitext( x.get_fanart_url(fanartMinHeight, fanartMinWidth))[-1][1:] posterOrigExt = os.path.splitext( x.get_poster_url(posterMinHeight, posterMinWidth))[-1][1:] nfo_location = os.path.join( finalDestination['directory'], self.genMetaFileName(movie, nfoFileName)) fanart_filename = self.genMetaFileName( movie, fanartFileNaming, add_tags={'orig_ext': fanartOrigExt}) poster_filename = self.genMetaFileName( movie, posterFileNaming, add_tags={'orig_ext': posterOrigExt}) urlOnly = self.config.get('Meta', 'urlOnly') x.write_nfo(nfo_location, url=True, xml=False) x.write_fanart(fanart_filename, finalDestination['directory'], fanartMinHeight, fanartMinWidth) x.write_poster(poster_filename, finalDestination['directory'], posterMinHeight, posterMinWidth) log.info('XBMC metainfo for imdbid, %s, generated' % movie['movie'].imdb) except Exception, e: log.error( 'XMG TMDB API failure. Please report to developers. API returned: %s' % e) log.error(traceback.format_exc()) # Run post-processing Scripts self._run_extra_script(finalDestination) # Notify XBMC log.debug('XBMC') xbmc = XBMC() xbmc.notify('Downloaded %s (%s)' % (movie['movie'].name, movie['movie'].year)) xbmc.updateLibrary() # Notify NMJ log.debug('NMJ') nmj = NMJ() nmj.updateLibrary() # Notify PLEX log.debug('PLEX') plex = PLEX() plex.updateLibrary() # Notify PROWL log.debug('PROWL') prowl = PROWL() prowl.notify( 'Downloaded %s (%s)' % (movie['movie'].name, movie['movie'].year), 'Download Complete') # Notify GROWL log.debug('GROWL') growl = GROWL() growl.notify( 'Downloaded %s (%s)' % (movie['movie'].name, movie['movie'].year), 'Download Complete') # Notify Notifo log.debug('Notifo') notifo = Notifo() notifo.notify( '%s (%s)' % (movie['movie'].name, movie['movie'].year), "Downloaded:") # Notify Boxcar log.debug('Boxcar') boxcar = Boxcar() boxcar.notify( '%s (%s)' % (movie['movie'].name, movie['movie'].year), "Downloaded:") #Notify NotifyMyAndroid log.debug('NotifyMyAndroid') nma = NMA() nma.notify( 'Download Complete', 'Downloaded %s (%s)' % (movie['movie'].name, movie['movie'].year)) # Notify Twitter log.debug('Twitter') twitter = Twitter() twitter.notify( 'Download Finished', 'Downloaded %s (%s)' % (movie['movie'].name, movie['movie'].year)) # Notify Synoindex log.debug('Synoindex') synoindex = Synoindex() synoindex.addToLibrary(finalDestination['directory']) # Notify Trakt log.debug('Trakt') trakt = Trakt() trakt.notify(movie['movie'].name, movie['movie'].year, movie['movie'].imdb) else: path = movie['path'].split(os.sep) path.extend(['_UNKNOWN_' + path.pop()]) target = os.sep.join(path) _move(movie['path'], target) log.info('No Match found for: %s' % str(movie['info']['name'])) #Cleanup if self.conf('cleanup'): log.debug('cleanup') path = movie['path'] # if self.conf('destination') == path: # log.error('Download folder and movie destination shouldn\'t be the same. Change it in Settings >> Renaming.') # return for root, subfiles, filenames in os.walk(path): skip = False # Stop if something is in ignored list for ignore in self.ignoredInPath: if ignore in root.lower(): skip = True # Ignore full directory names for dir in os.path.split(root): if dir in self.ignoreNames: skip = True # ignore if the current dir is the blackhole if root in self.conf('download'): skip = True if skip: continue for filename in filenames: fullFilePath = os.path.join(root, filename) fileSize = os.path.getsize(fullFilePath) if fileSize < 157286400: try: os.remove(fullFilePath) log.info('Removing file %s.' % fullFilePath) except OSError: log.error( 'Couldn\'t remove file %s. Too large.' % fullFilePath) try: os.rmdir(root) log.info('Removing dir: %s in download dir.' % root) except OSError: log.error( "Tried to clean-up download folder, but '%s' isn't empty." % root)
def doJSONCheck(self): ''' Go find movies and add them! ''' if self.isDisabled(): log.debug('Trakt has been disabled') return log.info('Starting Trakt check') trakt = Trakt() watchlist = trakt.getWatchlist() if not watchlist: log.info( "Could not get watchlist. Please add a password if you have a protected account" ) return MyMovieController = MovieController() for movie in watchlist: if self.abort: #this loop takes a while, stop when the program needs to close log.info('Aborting trakt watchlist check') return time.sleep(5) # give the system some slack if (self.conf('dontaddcollection')): if ("in_collection" in movie): if (movie.get("in_collection")): log.debug( 'Movie "%s" already in collection, ignoring' % movie.get('title')) continue log.debug('Searching for movie: "%s".' % movie.get('title')) result = False try: if movie.get('tmdb_id') != "": result = self.searcher['movie'].findById( movie.get('tmdb_id')) elif movie.get('imdb_id') != "": result = self.searcher['movie'].findByImdbId( movie.get('imdb_id')) else: log.info('Trakt has no tmdb or imdb Id for movie: "%s".' % movie.get('title')) continue except Exception: result = False if not result: log.info('Movie not found: "%s".' % movie.get('title')) continue log.debug('Checking movie: %s.' % movie.get('title') + ' (' + str(movie.get('year')) + ')') try: # Check and see if the movie is in CP already, if so, ignore it. cpMovie = Db.query(Movie).filter_by( imdb=movie.get('imdb_id')).first() if cpMovie: log.debug('Movie found in CP Database, ignore: "%s".' % movie.get('title')) continue log.info('Adding movie to queue: %s.' % movie.get('title') + ' (' + str(movie.get('year')) + ')') quality = Db.query(QualityTemplate).filter_by( name=self.config.get('Quality', 'default')).one() MyMovieController._addMovie(result, quality.id) except: log.info('MovieController unable to add this movie: "%s". %s' % (movie.get('title'), traceback.format_exc()))