def _get_tag(self, raw, t): if not raw.tags: return [] if t not in self.tag_mapping.itervalues(): t = "TXXX:" + t field = raw.tags.getall(t) if len(field) <= 0: return [] ret = [] if t in ('TDRC', 'TDOR'): # values are ID3TimeStamps for value in field: ret.extend([unicode(x) for x in value.text]) elif t == 'USLT': # Lyrics are stored in plain old strings for value in field: ret.append(unicode(value.text)) elif t == 'WOAR': # URLS are stored in url not text for value in field: ret.extend([unicode(value.url.replace('\n','').replace('\r',''))]) elif t == 'APIC': ret = [CoverImage(type=f.type, desc=f.desc, mime=f.mime, data=f.data) for f in field] elif t == 'COMM': # Newlines within comments are allowed, keep them for item in field: ret.extend([value for value in item.text]) else: for value in field: try: ret.extend([unicode(x.replace('\n','').replace('\r','')) \ for x in value.text]) except: pass return ret
def _get_tag(self, raw, tag): if tag == '__cover': return [ CoverImage(type=p.type, desc=p.desc, mime=p.mime, data=p.data) for p in raw.pictures ] return CaseInsensitveBaseFormat._get_tag(self, raw, tag)
def _get_tag(self, raw, tag): value = CaseInsensitveBaseFormat._get_tag(self, raw, tag) if value and tag == 'metadata_block_picture': new_value = [] for v in value: picture = Picture(base64.b64decode(v)) new_value.append(CoverImage(type=picture.type, desc=picture.desc, mime=picture.mime, data=picture.data)) value = new_value return value
def __init__(self, all_button=True): Gtk.Box.__init__(self) self.init_template() self.parent_row = None self.all_func = None self.update_func = None # Prevents the update function from being called, make # sure you do that manually after the batch update self.batch_update = False self.pixbuf = None self.info = CoverImage(None, None, None, None) self.default_type = 3 self.mime_info = { 'image/jpeg': { # Title for display 'title': _('JPEG image'), # Type and options for GDK Pixbuf saving 'type': 'jpeg', 'options': { 'quality': '90' } }, 'image/png': { 'title': _('PNG image'), 'type': 'png', 'options': {} }, 'image/': { 'title': _('Image'), # Store unknown images as JPEG 'type': 'jpeg', 'options': { 'quality': '90' } }, # TODO: Handle linked images '-->': { 'title': _('Linked image') } } self.button.drag_dest_set(Gtk.DestDefaults.ALL, [], Gdk.DragAction.COPY) self.button.drag_dest_add_uri_targets() self.type_selection.connect('scroll-event', dummy_scroll_handler) self.all_button = None if all_button: self.all_button = AllButton(self) self.pack_start(self.all_button, False, False, 0)
def read_tags(self, tags): if "cover" in tags: tags[tags.index("cover")] = "metadata_block_picture" td = super(OggFormat, self).read_tags(tags) if 'metadata_block_picture' in td: td['cover'] = [] for d in td["metadata_block_picture"]: picture = mutagen.flac.Picture(base64.standard_b64decode(d)) td['cover'] += [ CoverImage(type=picture.type, desc=picture.desc, mime=picture.mime, data=picture.data) ] return td
def _get_tag(self, f, name): if not f.has_key(name): return [] elif name == 'covr': ret = [] for value in f[name]: if value.imageformat == mp4.MP4Cover.FORMAT_PNG: mime = 'image/png' else: mime = 'image/jpeg' ret.append( CoverImage(type=None, desc=None, mime=mime, data=value)) return ret elif name in ['trkn', 'disk']: ret = [] for value in f[name]: ret.append("%d/%d" % (value[0], value[1])) return ret else: return [t for t in f[name]]
def _get_tag(self, raw, t): if not raw.tags: return [] if t not in self.tag_mapping.values(): t = "TXXX:" + t field = raw.tags.getall(t) if len(field) <= 0: return [] ret = [] if t in ('TDRC', 'TDOR'): # values are ID3TimeStamps, need str conversion for value in field: ret.extend([str(x) for x in value.text]) elif t == 'USLT': # Lyrics are stored in a single str object for value in field: ret.append(value.text) elif ( t == 'WOAR' ): # URLs are stored in url field instead of text field (as a single str object) for value in field: ret.append(value.url.replace('\n', '').replace('\r', '')) elif t == 'APIC': ret = [ CoverImage(type=f.type, desc=f.desc, mime=f.mime, data=f.data) for f in field ] elif t == 'COMM': # Newlines within comments are allowed, keep them for item in field: ret.extend([value for value in item.text]) else: for value in field: try: ret.extend( [x.replace('\n', '').replace('\r', '') for x in value.text] ) except Exception: pass return ret
def read_tags(self, tags): td = super(FlacFormat, self).read_tags(tags) if 'cover' in tags: td['cover'] = [CoverImage(type=p.type, desc=p.desc, mime=p.mime, data=p.data) \ for p in self.mutagen.pictures] return td
def __init__(self, all_button=True): gtk.HBox.__init__(self, homogeneous=False, spacing=5) self.parent_row = None self.all_func = None self.update_func = None # Prevents the update function from being called, make # sure you do that manually after the batch update self.batch_update = False self.pixbuf = None self.info = CoverImage(None, None, None, None) self.default_type = 3 self.mime_info = { 'image/jpeg': { # Title for display 'title': _('JPEG image'), # Type and options for GDK Pixbuf saving 'type': 'jpeg', 'options': { 'quality': '90' } }, 'image/png': { 'title': _('PNG image'), 'type': 'png', 'options': {} }, 'image/': { 'title': _('Image'), # Store unknown images as JPEG 'type': 'jpeg', 'options': { 'quality': '90' } }, # TODO: Handle linked images '-->': { 'title': _('Linked image') } } builder = gtk.Builder() builder.add_from_file( xdg.get_data_path('ui', 'trackproperties_dialog_cover_row.ui')) builder.connect_signals(self) cover_row = builder.get_object('cover_row') cover_row.reparent(self) button = builder.get_object('button') button.drag_dest_set(gtk.DEST_DEFAULT_ALL, [], gtk.gdk.ACTION_COPY) button.drag_dest_add_uri_targets() self.image = builder.get_object('image') self.info_label = builder.get_object('info_label') self.type_model = builder.get_object('type_model') self.type_selection = builder.get_object('type_selection') self.type_selection.set_sensitive(False) self.description_entry = builder.get_object('description_entry') self.description_entry.set_sensitive(False) self.all_button = None if all_button: self.all_button = AllButton(self) self.pack_start(self.all_button, expand=False, fill=False)