def _load(self, filename): log.debug("Loading file %r", filename) file = ASF(encode_filename(filename)) metadata = Metadata() for name, values in file.tags.items(): if name == 'WM/Picture': for image in values: (mime, data, type, description) = unpack_image(image.value) extras = { 'desc': description, 'type': image_type_from_id3_num(type) } metadata.add_image(mime, data, extras=extras) continue elif name not in self.__RTRANS: continue elif name == 'WM/SharedUserRating': # Rating in WMA ranges from 0 to 99, normalize this to the range 0 to 5 values[0] = int(round(int(unicode(values[0])) / 99.0 * (config.setting['rating_steps'] - 1))) name = self.__RTRANS[name] values = filter(bool, map(unicode, values)) if values: metadata[name] = values self._info(metadata, file) return metadata
def _load(self, filename): log.debug("Loading file %r", filename) file = ASF(encode_filename(filename)) metadata = Metadata() for name, values in file.tags.items(): if name == 'WM/Picture': for image in values: (mime, data, type, description) = unpack_image(image.value) extras = { 'desc': description, 'type': image_type_from_id3_num(type) } metadata.add_image(mime, data, extras=extras) continue elif name not in self.__RTRANS: continue elif name == 'WM/SharedUserRating': # Rating in WMA ranges from 0 to 99, normalize this to the range 0 to 5 values[0] = int( round( int(unicode(values[0])) / 99.0 * (config.setting['rating_steps'] - 1))) name = self.__RTRANS[name] values = filter(bool, map(unicode, values)) if values: metadata[name] = values self._info(metadata, file) return metadata
def test_image_type_from_id3_num(self): self.assertEqual(id3.image_type_from_id3_num(0), 'other') self.assertEqual(id3.image_type_from_id3_num(3), 'front') self.assertEqual(id3.image_type_from_id3_num(6), 'medium') self.assertEqual(id3.image_type_from_id3_num(9999), 'other')
def _load(self, filename): log.debug("Loading file %r", filename) file = self._File(encode_filename(filename)) file.tags = file.tags or {} metadata = Metadata() for origname, values in file.tags.items(): for value in values: name = origname if name == "date" or name == "originaldate": # YYYY-00-00 => YYYY value = sanitize_date(value) elif name == 'performer' or name == 'comment': # transform "performer=Joe Barr (Piano)" to "performer:Piano=Joe Barr" name += ':' if value.endswith(')'): start = len(value) - 2 count = 1 while count > 0 and start > 0: if value[start] == ')': count += 1 elif value[start] == '(': count -= 1 start -= 1 if start > 0: name += value[start + 2:-1] value = value[:start] elif name.startswith('rating'): try: name, email = name.split(':', 1) except ValueError: email = '' if email != config.setting['rating_user_email']: continue name = '~rating' value = unicode(int(round((float(value) * (config.setting['rating_steps'] - 1))))) elif name == "fingerprint" and value.startswith("MusicMagic Fingerprint"): name = "musicip_fingerprint" value = value[22:] elif name == "tracktotal": if "totaltracks" in file.tags: continue name = "totaltracks" elif name == "disctotal": if "totaldiscs" in file.tags: continue name = "totaldiscs" elif name == "metadata_block_picture": image = mutagen.flac.Picture(base64.standard_b64decode(value)) extras = { 'desc': image.desc, 'type': image_type_from_id3_num(image.type) } metadata.add_image(image.mime, image.data, extras=extras) continue metadata.add(name, value) if self._File == mutagen.flac.FLAC: for image in file.pictures: extras = { 'desc': image.desc, 'type': image_type_from_id3_num(image.type) } metadata.add_image(image.mime, image.data, extras=extras) # Read the unofficial COVERART tags, for backward compatibillity only if not "metadata_block_picture" in file.tags: try: for index, data in enumerate(file["COVERART"]): metadata.add_image(file["COVERARTMIME"][index], base64.standard_b64decode(data) ) except KeyError: pass self._info(metadata, file) return metadata
def _load(self, filename): log.debug("Loading file %r", filename) file = self._File(encode_filename(filename)) file.tags = file.tags or {} metadata = Metadata() for origname, values in file.tags.items(): for value in values: name = origname if name == "date" or name == "originaldate": # YYYY-00-00 => YYYY value = sanitize_date(value) elif name == 'performer' or name == 'comment': # transform "performer=Joe Barr (Piano)" to "performer:Piano=Joe Barr" name += ':' if value.endswith(')'): start = len(value) - 2 count = 1 while count > 0 and start > 0: if value[start] == ')': count += 1 elif value[start] == '(': count -= 1 start -= 1 if start > 0: name += value[start + 2:-1] value = value[:start] elif name.startswith('rating'): try: name, email = name.split(':', 1) except ValueError: email = '' if email != config.setting['rating_user_email']: continue name = '~rating' value = unicode(int(round((float(value) * (config.setting['rating_steps'] - 1))))) elif name == "fingerprint" and value.startswith("MusicMagic Fingerprint"): name = "musicip_fingerprint" value = value[22:] elif name == "tracktotal": if "totaltracks" in file.tags: continue name = "totaltracks" elif name == "disctotal": if "totaldiscs" in file.tags: continue name = "totaldiscs" elif name == "metadata_block_picture": image = mutagen.flac.Picture(base64.standard_b64decode(value)) extras = { 'desc': image.desc, 'type': image_type_from_id3_num(image.type) } metadata.add_image(image.mime, image.data, extras=extras) continue elif name in self.__translate: name = self.__translate[name] metadata.add(name, value) if self._File == mutagen.flac.FLAC: for image in file.pictures: extras = { 'desc': image.desc, 'type': image_type_from_id3_num(image.type) } metadata.add_image(image.mime, image.data, extras=extras) # Read the unofficial COVERART tags, for backward compatibillity only if not "metadata_block_picture" in file.tags: try: for index, data in enumerate(file["COVERART"]): metadata.add_image(file["COVERARTMIME"][index], base64.standard_b64decode(data) ) except KeyError: pass self._info(metadata, file) return metadata
def types_from_id3(self): self.assertEqual(id3.image_type_from_id3_num(0), ['other']) self.assertEqual(id3.image_type_from_id3_num(3), ['front']) self.assertEqual(id3.image_type_from_id3_num(6), ['medium']) self.assertEqual(id3.image_type_from_id3_num(9999), ['other'])
def image_type_as_id3_num(self): self.assertEqual(id3.image_type_from_id3_num('other'), 0) self.assertEqual(id3.image_type_from_id3_num('front'), 3) self.assertEqual(id3.image_type_from_id3_num('medium'), 6) self.assertEqual(id3.image_type_from_id3_num('track'), 6) self.assertEqual(id3.image_type_from_id3_num('unknowntype'), 0)