def __init__(self, item, rescan=False): self.artist = '' self.album = '' self.year = '' self.length = 0 item.build() songs = [] for i in item.playlist: if not callable(i): for p in plugin.mimetype('audio'): songs += p.get(None, [ i ]) else: songs.append(i) for song in songs: if not hasattr(song, 'filename'): continue try: data = mediainfo.get(song.filename) for type in ('artist', 'album'): setattr(self, type, self.strcmp(getattr(self, type), data[type])) self.year = self.strcmp(self.year, data['userdate']) if data['length']: self.length += int(data['length']) except OSError: pass if not self.length: return for type in ('artist', 'album', 'year', 'length'): if getattr(self, type): mediainfo.set(item.filename, type, getattr(self, type))
def make_query(filename, dirtitle): logger.log( 9, 'make_query(filename=%r, dirtitle=%r)', filename, dirtitle) if not os.path.exists(filename): print "File %s does not exist" % (filename) return None a = mediainfo.get(filename) t = tracknum(a['trackno']) ext = os.path.splitext(filename)[1] values = {} values['id'] = 'null' values['dirtitle'] = util.escape(dirtitle) values['path'] = util.escape(os.path.dirname(filename)) values['filename'] = util.escape(os.path.basename(filename)) values['type'] = ext values['artist'] = util.escape(a['artist']) values['title'] = util.escape(a['title']) values['album'] = util.escape(a['album']) values['genre'] = util.escape(a['genre']) values['year'] = inti(a['userdate']) values['track'] = int(t[0]) values['track_total'] = int(t[1]) values['bpm'] = a['bitrate'] and int(a['bitrate']) or -1 values['last_play'] = float(0) values['play_count'] = int(0) values['start_time'] = inti(a['0']) values['end_time'] = a['length'] and inti(a['length']) or -1 values['rating'] = int(0) values['eq'] = 'null' # if there is an error in one of the values it will show in this block "%(id)s" % values "'%(dirtitle)s'" % values "'%(path)s'" % values "'%(filename)s'" % values "'%(type)s'" % values "'%(artist)s'" % values "'%(title)s'" % values "'%(album)s'" % values "'%(genre)s'" % values "'%(year)s'" % values "%(track)i" % values "%(track_total)i" % values "%(bpm)i" % values "%(last_play)f" % values "%(play_count)i" % values "%(start_time)i" % values "%(end_time)i" % values "%(rating)i" % values "'%(eq)s'" % (values) # Assign the values VALUES = """%(id)s, '%(dirtitle)s', '%(path)s', '%(filename)s', '%(type)s', '%(artist)s', '%(title)s', '%(album)s', '%(genre)s', '%(year)s', %(track)i, %(track_total)i, %(bpm)i, %(last_play)f, %(play_count)i, %(start_time)i, %(end_time)i, %(rating)i, '%(eq)s'""" % (values) SQL = 'INSERT OR IGNORE INTO music VALUES (%s)' % VALUES return SQL
def make_query(filename, dirtitle): if not os.path.exists(filename): print "File %s does not exist" % (filename) return None a = mediainfo.get(filename) t = tracknum(a['trackno']) VALUES = "(null,\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',%i,%i,%i,\'%s\',%f,%i,\'%s\',\'%s\',%i,\'%s\')" \ % (util.escape(dirtitle),util.escape(os.path.dirname(filename)),util.escape(os.path.basename(filename)), \ 'mp3',util.escape(a['artist']),util.escape(a['title']),util.escape(a['album']),inti(a['date']),t[0], \ t[1], 100,0,0,'0',inti(a['length']),0,'null') SQL = 'INSERT OR IGNORE INTO music VALUES ' + VALUES return SQL
def __init__(self, dirname, force=False, rescan=False): self.artist = '' self.album = '' self.year = '' self.length = 0 self.changed = False self.force = force self.tag = eyeD3.Tag() cachefile = vfs.getoverlay(os.path.join(dirname, '..', 'freevo.cache')) subdirs = util.getdirnames(dirname, softlinks=False) filelist = None if not rescan: for subdir in subdirs: d = AudioParser(subdir, rescan) if d.changed: break else: # no changes in all subdirs, looks good if os.path.isfile(cachefile) and \ os.stat(dirname)[stat.ST_MTIME] <= os.stat(cachefile)[stat.ST_MTIME]: # and no changes in here. Do not parse everything again if force: # forces? We need to load our current values info = mediainfo.get(dirname) if info: for type in ('artist', 'album', 'year', 'length'): if info.has_key(type): setattr(self, type, info[type]) return if not filelist: filelist = util.match_files(dirname, config.AUDIO_SUFFIX) if not filelist and not subdirs: # no files in here? We are done return # ok, something changed here, too bad :-( self.changed = True self.force = False # scan all subdirs for subdir in subdirs: d = AudioParser(subdir, force=True, rescan=rescan) for type in ('artist', 'album', 'year'): setattr(self, type, self.strcmp(getattr(self, type), getattr(d, type))) self.length += d.length # cache dir first mediainfo.cache_dir(dirname) use_tracks = True for song in filelist: try: data = mediainfo.get(song) for type in ('artist', 'album'): setattr(self, type, self.strcmp(getattr(self, type), data[type])) self.year = self.strcmp(self.year, data['date']) if data['length']: self.length += int(data['length']) use_tracks = use_tracks and data['trackno'] except OSError: pass if use_tracks and (self.album or self.artist): mediainfo.set(dirname, 'audio_advanced_sort', True) if not self.length: return for type in ('artist', 'album', 'year', 'length'): if getattr(self, type): mediainfo.set(dirname, type, getattr(self, type)) data = mediainfo.get(dirname) modtime = os.stat(dirname)[stat.ST_MTIME] if not data['coverscan'] or data['coverscan'] != modtime: data.store('coverscan', modtime) self.extract_image(dirname)
def __init__(self, dirname, force=False, rescan=False): self.artist = '' self.album = '' self.year = '' self.length = 0 self.changed = False self.force = force self.tag = eyeD3.Tag() cachefile = vfs.getoverlay(os.path.join(dirname, '..', 'freevo.cache')) subdirs = util.getdirnames(dirname, softlinks=False) filelist = None if not rescan: for subdir in subdirs: d = AudioParser(subdir, rescan) if d.changed: break else: # no changes in all subdirs, looks good if os.path.isfile(cachefile) and os.stat(dirname)[stat.ST_MTIME] <= os.stat(cachefile)[stat.ST_MTIME]: # and no changes in here. Do not parse everything again if force: # forces? We need to load our current values info = mediainfo.get(dirname) if info: for type in ('artist', 'album', 'year', 'length'): if info.has_key(type): setattr(self, type, info[type]) return if not filelist: filelist = util.match_files(dirname, config.AUDIO_SUFFIX) if not filelist and not subdirs: # no files in here? We are done return # ok, something changed here, too bad :-( self.changed = True self.force = False # scan all subdirs for subdir in subdirs: d = AudioParser(subdir, force=True, rescan=rescan) for type in ('artist', 'album', 'year'): setattr(self, type, self.strcmp(getattr(self, type), getattr(d, type))) self.length += d.length # cache dir first mediainfo.cache_dir(dirname) use_tracks = True for song in filelist: try: data = mediainfo.get(song) for type in ('artist', 'album'): setattr(self, type, self.strcmp(getattr(self, type), data[type])) self.year = self.strcmp(self.year, data['userdate']) if data['length']: self.length += int(data['length']) use_tracks = use_tracks and data['trackno'] except OSError: pass if use_tracks and (self.album or self.artist): mediainfo.set(dirname, 'audio_advanced_sort', True) if not self.length: return for type in ('artist', 'album', 'year', 'length'): if getattr(self, type): mediainfo.set(dirname, type, getattr(self, type)) data = mediainfo.get(dirname) modtime = os.stat(dirname)[stat.ST_MTIME] if not data['coverscan'] or data['coverscan'] != modtime: data.store('coverscan', modtime) self.extract_image(dirname)