2010-11-05 105 views
4

我已經轉換了一個gnome python腳本,以便每次Spotify更改跟蹤時都使用KDE通知。代碼如下:使用KNotify更新通知

#!/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區域無限的條目。

可我要麼

一)更新使用ID和knotify.update事件?我假設如此,但我不知道如何檢查事件的初始存在,以便第一次使用knotify.event併爲每個後續使用knotify.update。

B)30秒(左右)

C)後關閉事件在歌曲(比選項B好)年底關閉事件,但帶有追蹤編號的同樣的問題,我的天堂「T制定瞭如何做)

乾杯的任何幫助,

哦也,如果有誰知道如何阻止它做一點點的‘鋼琴’的噪音時,它會通知那簡直太好了!

Steve

回答

1

event method returns int。這是通知的ID。所以,你可以用它來收,更新現有的通知:

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

time.sleep(30) 

knotify.closeNotification(id) 

,如果你要檢查它是否已經存在,你可以寫ID來tmp文件,等等

2

更容易是簡單地在創建通知事件時設置超時:

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

timeout是一個表示毫秒的整數值。