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
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
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
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()
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
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
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])
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])