3

リズムボックス python プラグイン内からリズムボックス データベース内のすべてのアーティストを一覧表示しようとしています。私が見つけた唯一の解決策は、UI ですべてのアーティストとすべての曲を選択し、すべての曲をループして、その曲のアーティスト名をセットに追加することです。

これに関する問題は、データベース内のすべてのアーティストのリストが必要なため、選択したアーティストを変更したくないということです (非常に非効率的であることに加えて)。以前に、選択したアーティストを保存して、作業が終わったら元に戻せるようにしようとしましたが、UI が新しい情報とより多くの情報 (つまり、より多くの曲) で更新されるまでに時間がかかるため、いくつかの問題が発生します。データベース)、より多くの時間がかかります。

コードは git clone git@github.com:sameltvom/dblister.git で取得できます

コードは次のとおりです。

import rb
import rhythmdb
import gtk

class DblisterPlugin (rb.Plugin):
    def __init__(self):
        rb.Plugin.__init__(self)
    def activate(self, shell):
        self.shell = shell
        print '##### dblister #####'

        # choose all artists, this will choose all albums and songs as well

        # get the lock for rhythmbox ui
        gtk.gdk.threads_enter()
        for p in self.shell.props.library_source.get_property_views():
            if p.props.prop == rhythmdb.PROP_ARTIST:
                p.set_selection([""])
                break
        gtk.gdk.threads_leave()

        ##################### Print all artists in database ######################

        # loop through all songs currently selected (i.e. all songs since we did p.set_selection([""]) above
        # for each song, try to add the artist name to the 'artists' set
        artists = set() # unique keys, no duplicates
        for row in self.shell.props.selected_source.props.query_model:
             entry = row[0]
             artist = self.shell.props.db.entry_get(entry, rhythmdb.PROP_ARTIST)
            artists.add(artist)

        print '--- artists ---'
        for artist in artists:
            print artist


        ##################### Print all songs in database ######################

        print '--- songs ---'
        # loop through all songs currently selected (i.e. all songs since we did p.set_selection([""]) above
        # for each song, print artist name and title
        for row in self.shell.props.selected_source.props.query_model:
             entry = row[0]
             artist = self.shell.props.db.entry_get(entry, rhythmdb.PROP_ARTIST)
             song = self.shell.props.db.entry_get(entry, rhythmdb.PROP_TITLE)
            print artist + ' - ' + song

    def deactivate(self, shell):
        del self.shell
        print 'Bye world'

私がこれをやりたい理由は、https://github.com/sameltvom/rhythmcurseという、リズムボックスへの telnet インターフェイスを開発しているためです。

入力していただければ幸いです。

よろしく、サミュエル

4

1 に答える 1

1

見つけた!UI で選択されているものに関係なく、すべてのエントリを一覧表示する場合は、base_query_model プロパティを使用する必要があります。

コードは次のようになります。

import rb
import rhythmdb
import gtk

class DblisterPlugin (rb.Plugin):
    def __init__(self):
        rb.Plugin.__init__(self)
    def activate(self, shell):
        self.shell = shell
        print '##### dblister #####'


        #################### Print all artists in the library ####################
        artists = set() # unique keys, no duplicates
        for row in self.shell.props.library_source.props.base_query_model:
             entry = row[0]
             artist = self.shell.props.db.entry_get(entry, rhythmdb.PROP_ARTIST)
            artists.add(artist)

        print '--- artists using library_source---'
        for artist in artists:
            print artist

        del artists


        ##################### Print all artists in database ######################

        artists = set() # unique keys, no duplicates
        for row in self.shell.props.selected_source.props.base_query_model:
             entry = row[0]
             artist = self.shell.props.db.entry_get(entry, rhythmdb.PROP_ARTIST)
            artists.add(artist)

        print '--- artists ---'
        for artist in artists:
            print artist


        ##################### Print all songs in database ######################

        print '--- songs ---'
        for row in self.shell.props.selected_source.props.base_query_model:
             entry = row[0]
             artist = self.shell.props.db.entry_get(entry, rhythmdb.PROP_ARTIST)
             song = self.shell.props.db.entry_get(entry, rhythmdb.PROP_TITLE)
            print artist + ' - ' + song

    def deactivate(self, shell):
        del self.shell
        print 'Bye world'

またまた素敵なものを見つけました。self.shell.props.selected_source.props.base_query_model の代わりに elf.shell.props.library_source.props.base_query_model を使用すると、左側の Last.FM や Radio などにビューを変更した可能性がありますが、それでも出力が得られます。ペイン。

ただし、すべてのアーティストを見つけるには、すべての曲をループする必要があります。しかし、主な問題はなくなりました。

于 2011-01-19T20:55:33.027 に答える