Rhythmbox 2.96 で現在再生中の曲の評価を設定する Python プラグインを作成しようとしています。Rhythmbox 2.96 では、API (Python モジュール) を使用して曲の評価を設定することができなくなったようです。プレーヤー関連のアクションは、MPRIS を支持して削除されました。
次に、MPRIS で dbus を使用してみましたが、MPRIS には曲の評価を設定するための仕様もありません。いろいろ調べた結果、Rhythmbox コードベースでこのサンプルを見つけ、それをテスト スクリプトに適合させました。
動作しますが、SetEntryProperties メソッドによって Rhythmbox が約 30 秒間フリーズします。ここに Python スクリプトがあります。
指示:
コードを rate.py というファイルにコピーします。
を使用して端末からリズムボックスを起動します
rhythmbox -D rate
Rhythmbox で、プラグインから Python コンソールを有効にします。
Python コンソールを起動して実行します
execfile('/path/to/rate.py')
ターミナルに印刷出力が表示され、Rhythmbox が約 20 ~ 30 秒間フリーズします。
# rhythmbox -D rate
# Rhythmbox: Edit > Plugins > Python Console enabled
# Play a song
# Open Rhythmbox Python Console
# execfile('/path/to/rate.py')
import sys
import rb
from gi.repository import Gtk, Gdk
def rateThread(rating):
try:
currentSongURI = shell.props.shell_player.get_playing_entry().get_playback_uri()
print "Setting rating for " + currentSongURI
from gi.repository import GLib, Gio
bus_type = Gio.BusType.SESSION
flags = 0
iface_info = None
print "Get Proxy"
proxy = Gio.DBusProxy.new_for_bus_sync(bus_type, flags, iface_info,
"org.gnome.Rhythmbox3",
"/org/gnome/Rhythmbox3/RhythmDB",
"org.gnome.Rhythmbox3.RhythmDB", None)
print "Got proxy"
rating = float(rating)
vrating = GLib.Variant("d", rating)
print "SetEntryProperties"
proxy.SetEntryProperties("(sa{sv})", currentSongURI, {"rating": vrating})
print "Done"
except:
print sys.exc_info()
return False
def rate():
if shell.props.shell_player.get_playing_entry():
Gdk.threads_add_idle(100, rateThread, 3)
rate()
印刷される例外は次のとおりです。
Desktop/test2.py:41: (<class 'gi._glib.GError'>, GError('Timeout was
reached',), <traceback object at 0x913e554>)
私の Python/dbus に関する知識は限られているため、そのエラーが発生する理由がわかりません。助けていただければ幸いです。
また、コードを使用して Rhythmbox で曲の評価を設定するより良い方法を知っていれば、それも大歓迎です!
違いがある場合は、Ubuntu 12.04 を使用しています。