def delete_old_files_2(): """ delete cachfiles/entries for files which don't exists anymore """ print checking('deleting old web-server thumbnails'), sys.__stdout__.flush() num = 0 for file in util.match_files_recursively(vfs.www_image_cachedir(), config.IMAGE_SUFFIX): if not vfs.isfile( file[len(vfs.www_image_cachedir()):file.rindex('.')]): os.unlink(file) num += 1 print 'deleted %s file%s' % (num, num != 1 and 's' or '') print checking('deleting old cache files'), sys.__stdout__.flush() num = 0 for file in util.match_files_recursively(config.OVERLAY_DIR, ['raw']): if file.startswith(os.path.join(config.OVERLAY_DIR, 'disc')): continue if not vfs.isfile(file[len(config.OVERLAY_DIR):-4]): os.unlink(file) num += 1 print 'deleted %s file%s' % (num, num != 1 and 's' or '') print checking('deleting cache for directories not existing anymore'), subdirs = util.get_subdirs_recursively(config.OVERLAY_DIR) subdirs.reverse() for file in subdirs: if not os.path.isdir(file[len(config.OVERLAY_DIR):]) and not \ file.startswith(os.path.join(config.OVERLAY_DIR, 'disc')): for metafile in ('cover.png', 'cover.png.raw', 'cover.jpg', 'cover.jpg.raw', 'mmpython.cache', 'freevo.cache'): if os.path.isfile(os.path.join(file, metafile)): os.unlink(os.path.join(file, metafile)) if not os.listdir(file): os.rmdir(file) print 'done' print checking('deleting old entries in meta-info'), sys.__stdout__.flush() for filename in util.recursefolders(config.OVERLAY_DIR, 1, 'freevo.cache', 1): if filename.startswith(os.path.join(config.OVERLAY_DIR, 'disc')): continue sinfo = os.stat(filename) if not sinfo[ST_SIZE]: #print '%s is empty' % filename continue dirname = os.path.dirname(filename)[len(config.OVERLAY_DIR):] data = util.read_pickle(filename) for key in copy.copy(data): if not os.path.exists(os.path.join(dirname, str(key))): del data[key] util.save_pickle(data, filename) print 'done'
def delete_old_files_2(): """ delete cachfiles/entries for files which don't exists anymore """ print checking('deleting old web-server thumbnails'), sys.__stdout__.flush() num = 0 for file in util.match_files_recursively(vfs.www_image_cachedir(), config.IMAGE_SUFFIX): if not vfs.isfile(file[len(vfs.www_image_cachedir()):file.rindex('.')]): os.unlink(file) num += 1 print 'deleted %s file%s' % (num, num != 1 and 's' or '') print checking('deleting old cache files'), sys.__stdout__.flush() num = 0 for file in util.match_files_recursively(config.OVERLAY_DIR, ['raw']): if file.startswith(os.path.join(config.OVERLAY_DIR, 'disc')): continue if not vfs.isfile(file[len(config.OVERLAY_DIR):-4]): os.unlink(file) num += 1 print 'deleted %s file%s' % (num, num != 1 and 's' or '') print checking('deleting cache for directories not existing anymore'), subdirs = util.get_subdirs_recursively(config.OVERLAY_DIR) subdirs.reverse() for file in subdirs: if not os.path.isdir(file[len(config.OVERLAY_DIR):]) and not \ file.startswith(os.path.join(config.OVERLAY_DIR, 'disc')): for metafile in ('cover.png', 'cover.png.raw', 'cover.jpg', 'cover.jpg.raw', 'mmpython.cache', 'freevo.cache'): if os.path.isfile(os.path.join(file, metafile)): os.unlink(os.path.join(file, metafile)) if not os.listdir(file): os.rmdir(file) print 'done' print checking('deleting old entries in meta-info'), sys.__stdout__.flush() for filename in util.recursefolders(config.OVERLAY_DIR, 1, 'freevo.cache', 1): if filename.startswith(os.path.join(config.OVERLAY_DIR, 'disc')): continue sinfo = os.stat(filename) if not sinfo[ST_SIZE]: #print '%s is empty' % filename continue dirname = os.path.dirname(filename)[len(config.OVERLAY_DIR):] data = util.read_pickle(filename) for key in copy.copy(data): if not os.path.exists(os.path.join(dirname, str(key))): del data[key] util.save_pickle(data, filename) print 'done'
def cache_recursive(dirlist, verbose=False): """ cache a list of directories recursive """ all_dirs = [] # create a list of all subdirs for dir in dirlist: for dirname in util.get_subdirs_recursively(dir): if not dirname in all_dirs and \ not os.path.basename(dirname) in ('.xvpics', '.thumbnails', '.svn'): all_dirs.append(dirname) if not dir in all_dirs: all_dirs.append(dir) # if verbose, remove all dirs that need no caching if verbose: for d in copy.copy(all_dirs): if not check_cache(d): all_dirs.remove(d) print '%s changes' % len(all_dirs) # cache all dirs for d in all_dirs: if verbose: dname = d if len(dname) > 55: dname = dname[:15] + ' [...] ' + dname[-35:] cache_status = CacheStatus(check_cache(d), ' %4d/%-4d %s' % \ (all_dirs.index(d)+1, len(all_dirs), dname)) cache_dir(d, cache_status.callback) print else: cache_dir(d) if all_dirs: print
def cache_recursive(dirlist, verbose=False): """ cache a list of directories recursive """ all_dirs = [] # create a list of all subdirs for dir in dirlist: for dirname in util.get_subdirs_recursively(dir): if not dirname in all_dirs and os.path.basename(dirname)[0] != '.': all_dirs.append(dirname) if not dir in all_dirs: all_dirs.append(dir) # if verbose, remove all dirs that need no caching if verbose: for d in copy.copy(all_dirs): if not check_cache(d): all_dirs.remove(d) print '%s changes' % len(all_dirs) # cache all dirs for d in all_dirs: if verbose: dname = d if len(dname) > 55: dname = dname[:15] + ' [...] ' + dname[-35:] cache_status = CacheStatus(check_cache(d), ' %4d/%-4d %s' % \ (all_dirs.index(d)+1, len(all_dirs), dname)) cache_dir(d, cache_status.callback) print else: cache_dir(d) if all_dirs: print
# Fire up splashscreen and load the cache if config.MEDIAINFO_USE_MEMORY == 2: import util.mediainfo splash = Splashscreen(_('Reading cache, please wait ...')) skin.register('splashscreen', ('screen', splash)) cachefiles = [] for type in ('video', 'audio', 'image', 'games'): if plugin.is_active(type): n = 'config.%s_ITEMS' % type.upper() x = eval(n) for item in x: if os.path.isdir(item[1]): cachefiles += [item[1]] + util.get_subdirs_recursively( item[1]) cachefiles = util.unique(cachefiles) for f in cachefiles: splash.progress( int((float( (cachefiles.index(f) + 1)) / len(cachefiles)) * 100)) util.mediainfo.load_cache(f) skin.delete('splashscreen') # prepare again, now that all plugins are loaded skin.prepare() # start menu MainMenu().getcmd()
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'
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'
# Fire up splashscreen and load the cache if config.MEDIAINFO_USE_MEMORY == 2: import util.mediainfo splash = Splashscreen(_('Reading cache, please wait ...')) skin.register('splashscreen', ('screen', splash)) cachefiles = [] for type in ('video', 'audio', 'image', 'games'): if plugin.is_active(type): n = 'config.%s_ITEMS' % type.upper() x = eval(n) for item in x: if os.path.isdir(item[1]): cachefiles += [ item[1] ] + util.get_subdirs_recursively(item[1]) cachefiles = util.unique(cachefiles) for f in cachefiles: splash.progress(int((float((cachefiles.index(f)+1)) / len(cachefiles)) * 100)) util.mediainfo.load_cache(f) skin.delete('splashscreen') # prepare again, now that all plugins are loaded skin.prepare() # start menu MainMenu().getcmd()