Я пытаюсь создать плагин Python, который будет устанавливать рейтинг воспроизводимой в данный момент песни в Rhythmbox 2.96. Похоже, что Rhythmbox 2.96 больше не позволяет вам использовать API (модули Python) для установки рейтинга песни; действия, связанные с игроком, были заменены MPRIS.
Затем я попытался рассмотреть возможность использования dbus с MPRIS, но в 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, если это имеет значение.