def imdb_search(self, arg=None, menuw=None): """ search imdb for this item """ fxd = FxdImdb() box = PopupBox(text=_('searching IMDB...')) box.show() items = [] try: duplicates = [] if self.disc_set: self.searchstring = self.item.media.label else: self.searchstring = self.item.name for id, name, year, type in fxd.guessImdb(self.searchstring, self.disc_set): try: for i in self.item.parent.play_items: if i.name == name: if not i in duplicates: duplicates.append(i) except: pass try: items.append( menu.MenuItem( '%s (%s, %s)' % (htmlenties2txt(name), year, type), self.imdb_create_fxd, (id, year))) except UnicodeError, e: print e except Exception, e: print 'imdb_search:', e box.destroy() box = PopupBox(text=_('Unknown error while connecting to IMDB')) box.show() time.sleep(2) box.destroy() return
def imdb_search(self, arg=None, menuw=None): """ search imdb for this item """ fxd = FxdImdb() box = PopupBox(text=_('searching IMDB...')) box.show() items = [] try: duplicates = [] if self.disc_set: self.searchstring = self.item.media.label else: self.searchstring = self.item.name for id, name, year, type in fxd.guessImdb(self.searchstring, self.disc_set): try: for i in self.item.parent.play_items: if i.name == name: if not i in duplicates: duplicates.append(i) except: pass try: #items.append(menu.MenuItem('%s (%s, %s)' % (htmlenties2txt(name), year, type), items.append( menu.MenuItem('%s (%s, %s)' % (name, year, type), self.imdb_create_fxd, (id, year))) except UnicodeError, e: print e # if filename had a season/episode lets´ grab it self.season = fxd.season self.episode = fxd.episode
def _create_fxd(prog, filename, start_time): """ Create a .fxd file with the specified program information in. """ from util.fxdimdb import FxdImdb, makeVideo fxd = FxdImdb() (filebase, fileext) = os.path.splitext(filename) fxd.setFxdFile(filebase, overwrite=True) video = makeVideo('file', 'f1', os.path.basename(filename)) fxd.setVideo(video) if prog: fxd.title = prog.title fxd.info['tagline'] = fxd.str2XML(prog.sub_title) desc = prog.desc.replace('\n\n', '\n').replace('\n', ' ') fxd.info['plot'] = fxd.str2XML(desc) else: fxd.title = _('Manual Recording') fxd.info['recording_timestamp'] = str(start_time) fxd.info['runtime'] = None # bad use of the movie year field :) try: fxd.info['year'] = time.strftime(config.TV_RECORD_YEAR_FORMAT, time.localtime(start_time)) except: fxd.info['year'] = '2007' if plugin.is_active('tv.recordings_manager'): fxd.info['watched'] = 'False' fxd.info['keep'] = 'False' fxd.writeFxd()
def create_fxd(self): from util.fxdimdb import FxdImdb, makeVideo fxd = FxdImdb() (filebase, fileext) = os.path.splitext(self.filename) fxd.setFxdFile(filebase, overwrite=True) desc = self.desc.replace("\n", " ") video = makeVideo("file", "f1", os.path.basename(self.filename)) fxd.setVideo(video) fxd.info["tagline"] = fxd.str2XML(self.episode) fxd.info["plot"] = fxd.str2XML(self.desc) fxd.title = self.title fxd.writeFxd()
if task: usage() task = 'search' search_arg = a if o == '-g': if task: usage() task = 'guess' search_arg = a if o == '--rom-drive': drive = a driveset = TRUE fxd = FxdImdb() if task == 'add': if len(args) == 2: usage() fxd.setFxdFile(arg[0]) if fxd.isDiscset() == TRUE: fxd.setDiscset(drive, None) elif fxd.isDiscset() == FALSE: type = 'file' if arg[1].find('[dvd]') != -1: type = 'dvd' if arg[1].find('[vcd]') != -1: type = 'vcd' id = abs(Random() * 100) if driveset == TRUE: video = makeVideo(type, 'f' + str(id), arg[1], device=drive)
def imdb_add_to_fxd(self, arg=None, menuw=None): """ add item to fxd file BROKEN, PLEASE FIX """ #if this exists we got a cdrom/dvdrom if self.item.media and self.item.media.devicename: devicename = self.item.media.devicename else: devicename = None fxd = FxdImdb() fxd.setFxdFile(arg[0].fxd_file) if self.item.mode in ('dvd', 'vcd'): fxd.setDiscset(devicename, None) else: num = len(fxd.video) + 1 video = makeVideo('file', 'f%s' % num, self.item.filename, device=devicename) fxd.setVideo(video) if arg[1] == 'variant': part = makePart('Variant %d' % num, 'f%s' % num) if fxd.variant: part = [makePart('Variant 1', 'f1'), part] fxd.setVariants(part) fxd.writeFxd() self.imdb_menu_back(menuw)
def imdb_create_fxd(self, arg=None, menuw=None): """ create fxd file for the item """ fxd = FxdImdb() box = PopupBox(text=_('getting data...')) box.show() #if this exists we got a cdrom/dvdrom if self.item.media and self.item.media.devicename: devicename = self.item.media.devicename else: devicename = None fxd.setImdbId(arg[0]) if self.disc_set: fxd.setDiscset(devicename, None) else: if self.item.subitems: for i in range(len(self.item.subitems)): video = makeVideo('file', 'f%s' % i, os.path.basename( self.item.subitems[i].filename), device=devicename) fxd.setVideo(video) else: video = makeVideo('file', 'f1', os.path.basename(self.item.filename), device=devicename) fxd.setVideo(video) fxd.setFxdFile(os.path.splitext(self.item.filename)[0]) fxd.writeFxd() self.imdb_menu_back(menuw) box.destroy()
def create_fxd(self): from util.fxdimdb import FxdImdb, makeVideo fxd = FxdImdb() (filebase, fileext) = os.path.splitext(self.filename) fxd.setFxdFile(filebase, overwrite=True) desc = self.desc.replace('\n', ' ') video = makeVideo('file', 'f1', os.path.basename(self.filename)) fxd.setVideo(video) fxd.info['tagline'] = fxd.str2XML(self.episode) fxd.info['plot'] = fxd.str2XML(self.desc) fxd.title = self.title fxd.writeFxd()
def _create_fxd(prog, filename, start_time): """ Create a .fxd file with the specified program information in. """ from util.fxdimdb import FxdImdb, makeVideo fxd = FxdImdb() (filebase, fileext) = os.path.splitext(filename) fxd.setFxdFile(filebase, overwrite=True) video = makeVideo('file', 'f1', os.path.basename(filename)) fxd.setVideo(video) if prog: fxd.title = prog.title fxd.info['tagline'] = fxd.str2XML(prog.sub_title) desc = prog.desc.replace('\n\n','\n').replace('\n',' ') fxd.info['plot'] = fxd.str2XML(desc) else: fxd.title = _('Manual Recording') fxd.info['recording_timestamp'] = str(start_time) fxd.info['runtime'] = None # bad use of the movie year field :) try: fxd.info['year'] = time.strftime(config.TV_RECORD_YEAR_FORMAT, time.localtime(start_time)) except: fxd.info['year'] = '2007' if plugin.is_active('tv.recordings_manager'): fxd.info['watched'] = 'False' fxd.info['keep'] = 'False' fxd.writeFxd()
sys.exit(u'--search and --guess are mutually exclusive') elif opts.add and len(args != 2): sys.exit(u'--add requires <fxd filename> <video file>') elif opts.search and len(args) < 1: sys.exit(u'--search requires <search pattern>') elif opts.guess and len(args) < 1: sys.exit(u'--guess requires <guess pattern>') elif opts.bulk and len(args) < 2: sys.exit(u'requires <imdb id> <directory>') tv_marker = (opts.tv or opts.season or opts.episode) and '"' or '' if opts.rom_drive is not None: driveset = True fxd = FxdImdb() if opts.add: fxd.setFxdFile(args[0]) fxd.setFxdFile(arg[0]) if fxd.isDiscset() is None: sys.exit(u'Fxd file is not valid, updating failed') elif fxd.isDiscset(): fxd.setDiscset(opts.rom_drive, None) else: type = 'file' if arg[1].find('[dvd]') != -1: type = 'dvd' if arg[1].find('[vcd]') != -1: type = 'vcd' id = abs( Random() * 100 ) if driveset:
def __init__(self, license=None): if not config.SYS_USE_NETWORK: self.reason = 'SYS_USE_NETWORK not enabled' return self.fxd = FxdImdb() plugin.ItemPlugin.__init__(self)
class PluginInterface(plugin.ItemPlugin): """ You can add IMDB information for video items with the plugin. Make sure you have imdbpy installed, on Debian do: | apt-get install python-imdbpy Check out http://imdbpy.sourceforge.net/?page=download for imdbpy package for your distribution Activate with: | plugin.activate('video.imdb2') You can also set imdb_search on a key (e.g. '1') by setting | EVENTS['menu']['1'] = Event(MENU_CALL_ITEM_ACTION, arg='imdb_search_or_cover_search') """ def __init__(self, license=None): if not config.SYS_USE_NETWORK: self.reason = 'SYS_USE_NETWORK not enabled' return self.fxd = FxdImdb() plugin.ItemPlugin.__init__(self) def imdb_get_disc_searchstring(self, item): name = item.media.label name = re.sub('([a-z])([A-Z])', point_maker, name) name = re.sub('([a-zA-Z])([0-9])', point_maker, name) name = re.sub('([0-9])([a-zA-Z])', point_maker, name.lower()) for r in config.IMDB_REMOVE_FROM_LABEL: name = re.sub(r, '', name) parts = re.split('[\._ -]', name) name = '' for p in parts: if p: name += '%s ' % p if name: return name[:-1] else: return '' def actions(self, item): self.item = item if item.type == 'video' and (not item.files or not item.files.fxd_file): if item.mode == 'file' or (item.mode in ('dvd', 'vcd') and \ item.info.has_key('tracks') and not \ item.media): self.disc_set = False return [(self.imdb_search, _('Search IMDB for this file'), 'imdb_search_or_cover_search')] elif item.mode in ('dvd', 'vcd') and item.info.has_key('tracks'): self.disc_set = True s = self.imdb_get_disc_searchstring(self.item) if s: return [(self.imdb_search, _('Search IMDB for [%s]') % s, 'imdb_search_or_cover_search')] if item.type == 'dir' and item.media and item.media.mountdir.find( item.dir) == 0: self.disc_set = True s = self.imdb_get_disc_searchstring(self.item) if s: return [(self.imdb_search, _('Search IMDB for [%s]') % s, 'imdb_search_or_cover_search')] return [] def imdb_search(self, arg=None, menuw=None): """ search imdb for this item """ items = [] dlg = dialog.show_working_indicator(_('Searching IMDB...')) if self.disc_set: self.searchstring = self.item.media.label else: self.searchstring = self.item['title'] try: #guess the title from the filename lock = kaa.ThreadCallable(self.fxd.guessImdb, self.searchstring, self.disc_set)() lock.wait() results = lock.result # loop through the results and create menu # should not use imdbpy objects here as imdbpy should be encapsulated by FxdImdb # but for now it's to much work to do this the right way. # It works so let's deal with it later. for movie in results: try: # OK, we have a regular movie here, no nested episodes items.append(menu.MenuItem('%s (%s) (%s)' % \ (movie['long imdb title'], movie['kind'], movie.movieID), self.imdb_create_fxd, (movie.movieID, movie['kind']))) except Unicode, e: print e except (FxdImdb_Error) as error: logger.warning('%s', error) dlg.hide() dialog.show_message(_('Connection to IMDB failed')) return dlg.hide() if config.IMDB_AUTOACCEPT_SINGLE_HIT and len(items) == 1: self.imdb_create_fxd(arg=items[0].arg, menuw=menuw) return if items: moviemenu = menu.Menu(_('IMDB Query'), items, self.item.skin_fxd, item_types='%s default' % self.item.type) # we see if the item has individual skin and load it if so menuw.pushmenu(moviemenu) return dialog.show_message(_('No information available from IMDB')) return def imdb_menu_back(self, menuw): """ check how many menus we have to go back to see the item """ import directory # check if we have to go one menu back (called directly) or # two (called from the item menu) back = 1 if menuw.menustack[-2].selected != self.item: back = 2 # maybe we called the function directly because there was only one # entry and we called it with an event if menuw.menustack[-1].selected == self.item: back = 0 # update the directory if directory.dirwatcher: directory.dirwatcher.scan() # go back in menustack for i in range(back): menuw.delete_menu() menuw.refresh() def imdb_create_fxd(self, arg=None, menuw=None): """ create fxd file for the item """ dlg = dialog.show_working_indicator(_('Getting data...')) try: lock = kaa.ThreadCallable(self.fxd.retrieveImdbData, arg[0], self.fxd.ctitle[1], self.fxd.ctitle[2])() lock.wait() except FxdImdb_Error, error: logger.warning('%s', error) dlg.hide() return #if this exists we got a cdrom/dvdrom if self.item.media and self.item.media.devicename: devicename = self.item.media.devicename else: devicename = None if self.disc_set: self.fxd.setDiscset(devicename, None) else: if self.item.subitems: for i in range(len(self.item.subitems)): video = makeVideo('file', 'f%s' % i, os.path.basename( self.item.subitems[i].filename), device=devicename) self.fxd.setVideo(video) else: video = makeVideo('file', 'f1', os.path.basename(self.item.filename), device=devicename) self.fxd.setVideo(video) self.fxd.setFxdFile(os.path.splitext(self.item.filename)[0]) self.fxd.writeFxd() self.fxd = FxdImdb() self.imdb_menu_back(menuw) dlg.hide()
sys.exit(u'--search and --guess are mutually exclusive') elif opts.add and len(args != 2): sys.exit(u'--add requires <fxd filename> <video file>') elif opts.search and len(args) < 1: sys.exit(u'--search requires <search pattern>') elif opts.guess and len(args) < 1: sys.exit(u'--guess requires <guess pattern>') elif opts.bulk and len(args) < 2: sys.exit(u'requires <imdb id> <directory>') tv_marker = (opts.tv or opts.season or opts.episode) and '"' or '' if opts.rom_drive is not None: driveset = True fxd = FxdImdb() if opts.add: fxd.setFxdFile(args[0]) fxd.setFxdFile(arg[0]) if fxd.isDiscset() is None: sys.exit(u'Fxd file is not valid, updating failed') elif fxd.isDiscset(): fxd.setDiscset(opts.rom_drive, None) else: type = 'file' if arg[1].find('[dvd]') != -1: type = 'dvd' if arg[1].find('[vcd]') != -1: type = 'vcd' id = abs(Random() * 100) if driveset: