Spotifyがトラックを変更するたびにKDE通知を使用するようにgnomepythonスクリプトを変換しました。コードは以下のとおりです。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Title: Spotify Notification Demo
Author: Stuart Colville, http://muffinresearch.co.uk
Modified to work with KDE: Steve Nixon
License: BSD
"""
import dbus
import gobject
from dbus.mainloop.glib import DBusGMainLoop
class SpotifyNotifier(object):
def __init__(self):
"""initialise."""
bus_loop = DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus(mainloop=bus_loop)
loop = gobject.MainLoop()
self.spotify = bus.get_object("org.mpris.spotify", "/")
self.spotify.connect_to_signal("TrackChange", self.track_changed)
self.notify_id = None
loop.run()
def track_changed(self, metadata):
"""Handle track changes."""
if metadata:
title = unicode(metadata.get("title").encode("latin-1"), "utf-8")
album = unicode(metadata.get("album").encode("latin-1"), "utf-8")
artist = unicode(metadata.get("artist").encode("latin-1"), "utf-8")
knotify = dbus.SessionBus().get_object("org.kde.knotify", "/Notify")
knotify.event("warning", "kde", [], title, u"by %s from %s" % (artist, album), [], [], 0, 0, dbus_interface="org.kde.KNotify")
if __name__ == "__main__":
SpotifyNotifier()
これは通知ごとに正常に機能しますが、KNotify領域のエントリは無期限に残ります。
どちらでもいいですか
a)IDとknotify.updateを使用してイベントを更新しますか?私はそう思いますが、最初にknotify.eventを使用し、その後はknotify.updateを使用するために、イベントの初期存在を確認する方法がわかりません。
b)30秒(またはそれくらい)後にイベントを閉じます
c)曲の最後でイベントを閉じます(オプションbよりも優れています)が、IDを追跡するという同じ問題が発生します。これは私がどのように行うかを理解していません)
助けてくれてありがとう、
ああ、また、誰かがそれを止める方法を知っていれば、それも素晴らしいだろうと通知されたときに小さな「ピアノ」の音を立てます!
スティーブ