def assign(self, metadata, uri): """ Assigns a uri of lyrics to tracks represented by metadata """ uri = ensure_unicode(uri) c = self._conn.cursor() if metadata.location: location = normalize_location(metadata.location) else: location = '' if self._find_by_location(metadata): logging.debug('Assign lyric file %s to track of location %s' % (uri, location)) c.execute(LrcDb.UPDATE_LYRIC, (uri, location,)) else: title = ensure_unicode(metadata.title) if metadata.title is not None else '' artist = ensure_unicode(metadata.artist) if metadata.artist is not None else '' album = ensure_unicode(metadata.album) if metadata.album is not None else '' try: tracknum = int(metadata.tracknum) if tracknum < 0: tracknum = 0 except: tracknum = 0 logging.debug('Assign lyrics file %s to track %s. %s - %s in album %s @ %s' % (uri, tracknum, artist, title, album, location)) c.execute(LrcDb.ASSIGN_LYRIC, (title, artist, album, tracknum, location, uri)) self._conn.commit() c.close()
def query_param_from_metadata(metadata): """ Generate query dict from metadata """ param = { METADATA_TITLE: ensure_unicode(metadata.title) if metadata.title is not None else '', METADATA_ARTIST: ensure_unicode(metadata.artist) if metadata.artist is not None else '', METADATA_ALBUM: ensure_unicode(metadata.album) if metadata.album is not None else '', } try: tracknum = int(metadata.tracknum) if tracknum < 0: tracknum = 0 except: tracknum = 0 param[METADATA_TRACKNUM] = tracknum return param
def normalize_location(location): """ Normalize location of metadata to URI form >>> normalize_location('/path/to/file') u'file:///path/to/file' >>> normalize_location(u'/path/to/file') u'file:///path/to/file' >>> normalize_location('file:///path/to/file') u'file:///path/to/file' >>> normalize_location('/\xe6\x96\x87\xe4\xbb\xb6/\xe8\xb7\xaf\xe5\xbe\x84') u'file:///%E6%96%87%E4%BB%B6/%E8%B7%AF%E5%BE%84' >>> normalize_location(u'/\u6587\u4ef6/\u8def\u5f84') u'file:///%E6%96%87%E4%BB%B6/%E8%B7%AF%E5%BE%84' """ if location and location[0] == '/': location = 'file://' + urllib.pathname2url(ensure_utf8(location)) location = ensure_unicode(location) return location