def main_menu(self, arg=None, menuw=None): """ display the (IMAGE|VIDEO|AUDIO|GAMES) main menu """ self.display_type, force_text_view = arg title = _('Media') self.menuw = menuw if self.display_type == 'video': title = _('Movie') if self.display_type == 'audio': title = _('Audio') if self.display_type == 'image': title = _('Image') if self.display_type == 'games': title = _('Games') menutitle = _('%s Main Menu') % title if self.display_type: items = getattr(config, '%s_ITEMS' % self.display_type.upper()) else: items = [] self.normal_items = [] # add default items for item in items: try: add_args = None if isstring(item): title, filename = u'', item else: (title, filename) = item[:2] if len(item) > 2: add_args = item[2:] reachable = 1 pos = filename.find(':/') if pos > 0: if filename.find(':/') < filename.find('/'): hostname = filename[0:pos] filename = filename[pos+1:] try: if os.system( config.HOST_ALIVE_CHECK % hostname ) != 0: reachable = 0 except: traceback.print_exc() # May need to change this filename.find('.fxd') elif not os.path.exists(filename): print '\"%s\" doesn\'t exist' % (filename) reachable = 0 if reachable: if vfs.isdir(filename): item = directory.DirItem(String(filename), self, display_type=self.display_type, add_args=add_args) if title: item.name = title self.normal_items.append(item) else: if not vfs.isfile(filename): filename = filename[len(os.getcwd()):] if filename[0] == '/': filename = filename[1:] filename = vfs.join(config.SHARE_DIR, filename) # normal file # webradio is both a playlist and an fxditem dups = [] for p in plugin.mimetype(self.display_type): items = p.get(self, [ String(filename) ]) if filename in dups: continue else: dups.append(filename) if title: for i in items: i.name = title self.normal_items += items except: traceback.print_exc() items = self.main_menu_generate() # autoselect one item if len(items) == 1: items[0](menuw=menuw) return item_menu = menu.Menu(menutitle, items, item_types='%s main menu' % self.display_type, umount_all=1, reload_func=self.reload) item_menu.skin_force_text_view = force_text_view self.menuw = menuw menuw.pushmenu(item_menu)
def create_metadata(): """ scan files and create metadata """ import util.extendedmeta print checking('creating audio metadata'), sys.__stdout__.flush() for dir in config.AUDIO_ITEMS: if os.path.isdir(dir[1]): util.extendedmeta.AudioParser(dir[1], rescan=True) print 'done' print checking('creating playlist metadata'), sys.__stdout__.flush() pl = [] fxd = [] for dir in config.AUDIO_ITEMS: if os.path.isdir(dir[1]): pl += util.match_files_recursively(dir[1], playlist.mimetype.suffix()) fxd += util.match_files_recursively(dir[1], fxditem.mimetype.suffix()) elif isinstance(dir, list) or isinstance(dir, tuple): print print 'bad path: %s ' % dir[1], sys.__stdout__.flush() elif util.match_suffix(dir, playlist.mimetype.suffix()): pl.append(dir) elif util.match_suffix(dir, fxditem.mimetype.suffix()): fxd.append(dir) elif util.match_suffix(dir[1], playlist.mimetype.suffix()): pl.append(dir[1]) elif util.match_suffix(dir[1], fxditem.mimetype.suffix()): fxd.append(dir[1]) try: items = playlist.mimetype.get(None, util.misc.unique(pl)) # ignore fxd files for now, they can't store meta-info # for f in fxditem.mimetype.get(None, util.misc.unique(fxd)): # if f.type == 'playlist': # items.append(f) for i in items: util.extendedmeta.PlaylistParser(i) except: pass print 'done' print checking('checking database'), sys.__stdout__.flush() try: # The DB stuff import sqlite for dir in config.AUDIO_ITEMS: if os.path.isdir(dir[1]): util.extendedmeta.addPathDB(dir[1], dir[0], verbose=False) print 'done' except ImportError: print 'skipping' pass print checking('creating directory metadata'), sys.__stdout__.flush() subdirs = {'all': []} # get all subdirs for each type for type in activate_plugins: subdirs[type] = [] for d in getattr(config, '%s_ITEMS' % type.upper()): try: d = d[1] if d == os.path.sep: print 'ERROR: %s_ITEMS contains root directory, skipped.' % type continue except: pass if not os.path.isdir(d): continue rec = util.get_subdirs_recursively(d) subdirs['all'] += rec subdirs[type] += rec subdirs['all'] = util.misc.unique(subdirs['all']) subdirs['all'].sort(lambda l, o: cmp(l.upper(), o.upper())) # walk though each directory for s in subdirs['all']: if s.find(os.path.join(os.path.sep, '.')) > 0: continue # create the DirItems d = directory.DirItem(s, None) # rebuild meta-info d.create_metainfo() for type in activate_plugins: if subdirs.has_key(type) and s in subdirs[type]: d.display_type = type # scan again with display_type d.create_metainfo() print 'done'