Kleines Bugfix für Desktop Art (Plugin für Rhythmbox)

Hi @all,

ich hab heute mal wieder das Plugin Desktop Art für Ryhtmbox von mathias nedrebø ausprobiert.

So sieht Desktop Art aus!

Dabei fiel mir ein Bug auf: Wenn ihr in den ID3 Tags den Albumartist gesetzt hat, speichert Rhythmbox das Cover als <Albumartist> – <Albumname>.<Type> ab. Desktop Art kennt aber nur <Artist> – <Albumname>.<Type>. Somit findet er diese Cover dann niemals.

Schnell gefixt:

Die Methoden get_cover(self, db_entry=None) und get_song_info(self, db_entry=None)

der Datei /home/$USER/.gnome2/rhythmbox/plugins/desktop-art/CoverManager.py im original:

    def get_cover(self, db_entry=None):
        # Find cover in music dir
        if db_entry:
            cover_dir = path.dirname(url2pathname(db_entry.get_playback_uri()).replace('file://', ''))
            if path.isdir(cover_dir):
                for f in listdir(cover_dir):
                    file_name = path.join(cover_dir, f)
                    mt = mimetypes.guess_type(file_name)[0]
                    if mt and mt.startswith('image/'):
                        if path.splitext(f)[0].lower() in IMAGE_NAMES:
                            return file_name

            # Find cover saved by artdisplay plugin
            song_info = self.get_song_info(db_entry)
            for rb_cover_path in ('~/.gnome2/rhythmbox/covers', '~/.cache/rhythmbox/covers/'):
                for file_type in ('jpg', 'png', 'jpeg', 'gif', 'svg'):
                    cover_file = path.join(path.expanduser(rb_cover_path),
                                           '%s - %s.%s' %
                                           (song_info['artist'],
                                            song_info['album'],
                                            file_type))
                    if path.isfile(cover_file):
                        return cover_file

    def get_song_info(self, db_entry=None):
        song_info = {}
        if db_entry:
            song_info['title'] = self.db.entry_get(db_entry, rhythmdb.PROP_TITLE)
            song_info['artist'] = self.db.entry_get(db_entry, rhythmdb.PROP_ARTIST)
            song_info['album'] = self.db.entry_get(db_entry, rhythmdb.PROP_ALBUM)
        return song_info

Und hier die gefixte Version:

    def get_cover(self, db_entry=None):
        # Find cover in music dir
        if db_entry:
            cover_dir = path.dirname(url2pathname(db_entry.get_playback_uri()).replace('file://', ''))
            if path.isdir(cover_dir):
                for f in listdir(cover_dir):
                    file_name = path.join(cover_dir, f)
                    mt = mimetypes.guess_type(file_name)[0]
                    if mt and mt.startswith('image/'):
                        if path.splitext(f)[0].lower() in IMAGE_NAMES:
                            return file_name

            # Find cover saved by artdisplay plugin
            song_info = self.get_song_info(db_entry)
            for rb_cover_path in ('~/.gnome2/rhythmbox/covers', '~/.cache/rhythmbox/covers/'):
                for file_type in ('jpg', 'png', 'jpeg', 'gif', 'svg'):
                    cover_file = path.join(path.expanduser(rb_cover_path),
                                           '%s - %s.%s' %
                                           (song_info['artist'],
                                            song_info['album'],
                                            file_type))
                    cover_file2 = path.join(path.expanduser(rb_cover_path),
                                           '%s - %s.%s' %
                                           (song_info['albumartist'],
                                            song_info['album'],
                                            file_type))
                    if path.isfile(cover_file):
                        return cover_file
                    if path.isfile(cover_file2):
                        return cover_file2

            # No cover found
            return DesktopControl.UNKNOWN_COVER
        # Not playing
        return None

    def get_song_info(self, db_entry=None):
        song_info = {}
        if db_entry:
            song_info['title'] = self.db.entry_get(db_entry, rhythmdb.PROP_TITLE)
            song_info['artist'] = self.db.entry_get(db_entry, rhythmdb.PROP_ARTIST)
            song_info['albumartist'] = self.db.entry_get(db_entry, rhythmdb.PROP_ALBUM_ARTIST)
            song_info['album'] = self.db.entry_get(db_entry, rhythmdb.PROP_ALBUM)
        return song_info

Blöd ist natürlich immernoch, dass man ungehörte Mp3s zweimal starten muss damit das Cover erscheint – da Rhythmbox beim ersten Mal das Cover erstmal in den Cover Ordner kopiert.

Hier hab ich Datei nochmal zum Download.

Zur Installation in den Ordner /home/$USER/.gnome2/rhythmbox/plugins/desktop-art/ wechseln

und dort die Datei CoverManager.py ersetzen und die CoverManager.pyc löschen. Rhytmbox neustarten (manchmal auch 2 Mal nötig!).

Vllt. hilft das hier ja jemand :)

Achja, falls jemand weiß wie man den Ersteller (mathias nedrebø) darüber informiert lasst es mich wissen – auf seiner HP ist keine Kontaktmöglichkeit vorhanden!

Falls jemand Probleme hat das Plugin zu aktivieren, unter Ubuntu 10.10 hat es folgende Abhängigkeiten:

python-rsvg und python-gnomedesktop (ehemals gnome-python-desktop)

 sudo apt-get install python-rsvg python-gnomedesktop

(Und Python > 2.5, aber Python 2.6 ist bei Ubuntu normal ja dabei!)

Comments (3)

  1. 10:20, July 1, 2011susann  / Reply

    hallo und danke für deine anleitung :)
    weisst du auch, wie man das plugin dazu bekommt, je nach verfügbarkeit sowohl artist als auch album artist covers zu laden?
    liebe grüße & danke! susann

  2. 10:21, July 1, 2011susann  / Reply

    ah, wer lesen kann, ist klar im vorteil! genau das macht es, nicht wahr ;)

  3. 10:39, July 1, 2011Andreas  / Reply

    Soweit ich mich errinnere, macht es genau das ;)

    Bin allerdings vor geraumer Zeit auf Clementine umgestiegen, daher erinnere ich mich nur grob – aber so rein vom Quelltext scheint es das zu machen ;)

Leave a Reply

Allowed Tags - You may use these HTML tags and attributes in your comment.

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Pingbacks (0)

› No pingbacks yet.