示例#1
0
    def testTrakt(self, **data):

        trakt = Trakt()
        result = trakt.test(data.get('Trakt.apikey'),
                            data.get('Trakt.username'),
                            data.get('Trakt.password'))

        return str(result)
示例#2
0
    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)
示例#3
0
    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()))