Пример #1
0
 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
Пример #2
0
    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)
Пример #3
0
 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
Пример #4
0
    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)
Пример #5
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
Пример #6
0
 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]]
Пример #7
0
 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
Пример #8
0
 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
Пример #9
0
    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)