예제 #1
0
    def perform(self, query):
        log.info('EpisodeTagger tagging episode: %s', u(query.find_one(Media).filename))
        filenameMetadata = SolvingChain(EpisodeFilename()).solve(query)

        log.info('EpisodeTagger found info: %s', u(filenameMetadata.find_one(Episode)))
        result = SolvingChain(EpisodeTVDB(), SimpleSolver(Episode)).solve(filenameMetadata)

        media = result.find_one(Media)

        # if we didn't find a valid episode but we still have a series, let's create a syntactically
        # valid episode anyway so it can be imported
        if not media.metadata.get('episodeNumber'):
            media.metadata.episodeNumber = -1

        # import subtitles correctly
        if media.type() == 'subtitle':
            subs = []
            for language in utils.guessCountryCodes(media.filename):
                log.info('Found %s sub in file %s' % (language.english_name, u(media.filename)))
                subs += [ result.Subtitle(metadata = media.metadata,
                                          language = language.alpha2) ]

            media.metadata = subs


        self.cleanup(result)

        log.debug('Finished tagging: %s', u(media.filename))
        return result
예제 #2
0
파일: movietagger.py 프로젝트: EQ4/smewt
    def perform(self, query):
        filename = u(query.find_one(Media).filename)
        log.info('MovieTagger tagging movie: %s' % filename)
        filenameMetadata = MovieFilename().perform(query)
        filenameMovie = filenameMetadata.find_one(Movie)
        log.info('MovieTagger found info: %s' % u(filenameMovie))
        result = MovieTMDB().perform(filenameMetadata)

        media = result.find_one(Media)
        if not media.metadata:
            log.warning('Could not find any tag for: %s' % u(media))

        # import the info we got from the filename if nothing better came in with MovieTMDB
        for prop in filenameMovie.keys():
            if prop not in media.metadata and prop not in media:
                media[prop] = filenameMovie[prop]

        # import subtitles correctly
        if media.type() == 'subtitle':
            # FIXME: problem for vobsubs: as a media points to a single metadata object, we cannot
            # represent a .sub for 3 different languages...
            subs = []
            for language in utils.guessCountryCodes(media.filename):
                subs += [ result.Subtitle(metadata = media.metadata,
                                          language = language.alpha2) ]

            media.metadata = subs


        self.cleanup(result)

        log.debug('Finished tagging: %s' % u(media))
        return result
예제 #3
0
    def perform(self, query):
        filename = u(query.find_one(Media).filename)
        log.info('MovieTagger tagging movie: %s' % filename)
        filenameMetadata = MovieFilename().perform(query)
        filenameMovie = filenameMetadata.find_one(Movie)
        log.info('MovieTagger found info: %s' % u(filenameMovie))
        result = MovieTMDB().perform(filenameMetadata)

        media = result.find_one(Media)
        if not media.metadata:
            log.warning('Could not find any tag for: %s' % u(media))

        # import the info we got from the filename if nothing better came in with MovieTMDB
        for prop in filenameMovie.keys():
            if prop not in media.metadata and prop not in media:
                media[prop] = filenameMovie[prop]

        # import subtitles correctly
        if media.type() == 'subtitle':
            # FIXME: problem for vobsubs: as a media points to a single metadata object, we cannot
            # represent a .sub for 3 different languages...
            subs = []
            for language in utils.guessCountryCodes(media.filename):
                subs += [
                    result.Subtitle(metadata=media.metadata,
                                    language=language.alpha2)
                ]

            media.metadata = subs

        self.cleanup(result)

        log.debug('Finished tagging: %s' % u(media))
        return result
예제 #4
0
    def importFiles(self, files):
        for f in files:
            # new import task
            log.info('Import in %s collection: %s' % (u(self.name), u(f)))
            if self.taskManager:
                importTask = ImportTask(self.graph, self.mediaTagger, f)
                self.taskManager.add(importTask)

        # save newly imported files
        self.saveSettings()
예제 #5
0
파일: collection.py 프로젝트: EQ4/smewt
    def importFiles(self, files):
        for f in files:
            # new import task
            log.info('Import in %s collection: %s' % (u(self.name), u(f)))
            if self.taskManager:
                importTask = ImportTask(self.graph, self.mediaTagger, f)
                self.taskManager.add(importTask)

        # save newly imported files
        self.saveSettings()
예제 #6
0
    def perform(self, query):
        self.checkValid(query)

        log.debug('MovieTvdb: finding more info on %s' % u(query.find_one(Movie)))
        movie = query.find_one(Movie)

        try:
            mdprovider = TVDBMetadataProvider()
            result = mdprovider.startMovie(movie.title)
        except SmewtException:
            # movie could not be found, return a dummy Unknown movie instead so we can group them somewhere
            log.warning('Could not find info for movie: %s' % u(query.find_one(Media).filename))
            noposter = '/static/images/noposter.png'
            result = MemoryObjectGraph()
            result.Movie(title = 'Unknown', loresImage = noposter, hiresImage = noposter)

        result = foundMetadata(query, result.find_one(Movie))
        return result
예제 #7
0
파일: movietmdb.py 프로젝트: EQ4/smewt
    def perform(self, query):
        self.checkValid(query)

        log.debug("MovieTvdb: finding more info on %s" % u(query.find_one(Movie)))
        movie = query.find_one(Movie)

        try:
            mdprovider = TVDBMetadataProvider()
            result = mdprovider.startMovie(movie.title)
        except SmewtException:
            # movie could not be found, return a dummy Unknown movie instead so we can group them somewhere
            log.warning("Could not find info for movie: %s" % u(query.find_one(Media).filename))
            noposter = "/static/images/noposter.png"
            result = MemoryObjectGraph()
            result.Movie(title="Unknown", loresImage=noposter, hiresImage=noposter)

        result = foundMetadata(query, result.find_one(Movie))
        return result
예제 #8
0
def play_video(metadata, sublang=None):
    # FIXME: this should be handled properly with media player plugins

    # files should be a list of (Metadata, sub), where sub is possibly None
    # then we would look into the available graphs where such a Metadata has files,
    # and choose the one on the fastest media (ie: local before nfs before tcp)
    # it should also choose subtitles the same way, so we could even imagine reading
    # the video from one location and the subs from another

    # find list of all files to be played
    # returns a list of (video_filename, sub_filename)

    if sublang:
        msg = 'Playing %s with %s subtitles' % (metadata,
                                                Language(sublang).english_name)
    else:
        msg = 'Playing %s with no subtitles' % metadata
    log.info(u(msg))

    # FIXME: we assume that sorting alphanumerically is good enough, but that is
    #        not necessarily the case...
    #        we should also look whether the file also has the 'cdNumber' attribute
    files = tolist(metadata.get('files'))
    files = sorted(files, key=lambda f: f.get('filename'))

    if sublang is not None:
        sublang = Language(sublang)

    for sub in tolist(metadata.get('subtitles')):
        if sub.language == sublang:
            subs = sorted(tolist(sub.get('files')),
                          key=lambda f: f.get('filename'))
            break
    else:
        subs = [None] * len(files)

    # update last viewed info
    metadata.lastViewed = time.time()
    metadata.watched = True

    _play([f.filename for f in files], [s.filename for s in subs if s])
예제 #9
0
파일: actions.py 프로젝트: EQ4/smewt
def play_video(metadata, sublang=None):
    # FIXME: this should be handled properly with media player plugins

    # files should be a list of (Metadata, sub), where sub is possibly None
    # then we would look into the available graphs where such a Metadata has files,
    # and choose the one on the fastest media (ie: local before nfs before tcp)
    # it should also choose subtitles the same way, so we could even imagine reading
    # the video from one location and the subs from another

    # find list of all files to be played
    # returns a list of (video_filename, sub_filename)

    if sublang:
        msg = "Playing %s with %s subtitles" % (metadata, Language(sublang).english_name)
    else:
        msg = "Playing %s with no subtitles" % metadata
    log.info(u(msg))

    # FIXME: we assume that sorting alphanumerically is good enough, but that is
    #        not necessarily the case...
    #        we should also look whether the file also has the 'cdNumber' attribute
    files = tolist(metadata.get("files"))
    files = sorted(files, key=lambda f: f.get("filename"))

    if sublang is not None:
        sublang = Language(sublang)

    for sub in tolist(metadata.get("subtitles")):
        if sub.language == sublang:
            subs = sorted(tolist(sub.get("files")), key=lambda f: f.get("filename"))
            break
    else:
        subs = [None] * len(files)

    # update last viewed info
    metadata.lastViewed = time.time()
    metadata.watched = True

    _play([f.filename for f in files], [s.filename for s in subs if s])