4

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を追跡するという同じ問題が発生します。これは私がどのように行うかを理解していません)

助けてくれてありがとう、

ああ、また、誰かがそれを止める方法を知っていれば、それも素晴らしいだろうと通知されたときに小さな「ピアノ」の音を立てます!

スティーブ

4

2 に答える 2

3

Easier would be to simply set a timeout upon creation of the notification event:

knotify.event(event, fromApp, contexts, title, text, pixmap, actions, timeout, winId)

timeout is an integer value representing milli-seconds.

于 2011-12-04T12:57:07.777 に答える
1

イベントメソッドはintを返します。それが通知のIDです。したがって、既存のNotifyを閉じて更新するために使用できます。

id = knotify.event("warning", ....)

time.sleep(30) 

knotify.closeNotification(id)

すでに存在するかどうかを確認する必要がある場合は、IDをtmpファイルに書き込むことができます。

于 2011-01-11T19:46:26.050 に答える