2010-11-05 5 views
4

J'ai converti un script gnome python pour utiliser les notifications KDE chaque fois que Spotify change de piste. Le code est ci-dessous:Mise à jour de la notification à l'aide de 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() 

Cela fonctionne bien pour chaque notification, mais laisse l'entrée dans la zone KNotify indéfiniment.

Puis-je soit

a) mettre à jour l'événement à l'aide d'un ID et knotify.update? Je suppose donc, mais je ne sais pas comment vérifier l'existence initiale de l'événement pour utiliser knotify.event la première fois et knotify.update pour chaque ultérieure.

b) Fermez l'événement au bout de 30 secondes (environ)

c) Fermer l'événement à la fin de la chanson (mieux que l'option b), mais est livré avec le même problème des ID de suivi que je havre de paix « t travaillé comment faire)

Vive pour toute aide,

Oh, si quelqu'un sait aussi comment arrêter faire un peu de bruit « piano » quand il avertit que serait super aussi!

Steve

Répondre

1

méthode d'événement renvoie int. C'est l'identifiant de la notification. Ainsi, vous pouvez l'utiliser pour la fermeture, mettre à jour des Notify:

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

time.sleep(30) 

knotify.closeNotification(id) 

Si vous devez vérifier si elle existe déjà, vous pouvez écrire Id à tmp fichier, et ainsi de suite

2

plus facile serait simplement fixer un délai d'attente lors de la création de l'événement de notification:

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

est une valeur entière qui représente milli-secondes.

Questions connexes