Une particularité du bureau gnome 2.14 est qu'il utilise un nouveau système de notification. Alors qu'est ce que c'est ? c'est grosso modo le truc qui vous informe de ce qu'il se passe sur votre PC (attention batterie faible, plus d'espace disque ...). Ca s'appelle notification framework (regardez ici ils en cosent !)
Nonobstant la longueur des recherches, j'ai trouvé un certain nombre de choses que voici :
- Le framework porte un nom ... il s'appelle galago !
- Il utilise libnotify ce qui ne m'arange pas puisque python n'a pas de bindings qui vont bien
- Par contre il a la formidable idée d'utiliser dbus qui est formidable pour sa portabilité interlangages ;)
- là j'ai cherché comment utiliser dbus avec python mais en vain ...
- J'ai par contre trouvé les spécif dbus de galago
- j'ai aussi éxploré "alamano" l'api dbus pour python :
#!/usr/bin/env python import dbus interface = 'org.freedesktop.Notifications' path = '/org/freedesktop/Notifications' bus = dbus.SessionBus() obj = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus') dbus_iface = dbus.Interface(obj, 'org.freedesktop.DBus') avail = dbus_iface.ListNames() print avail print interface in avail obj = bus.get_object(interface, path) print dbus.Interface(obj, interface) print dbus print dir(dbus)
Donc voila une classe qui va bien et qui fait ce que je veux :
#!/usr/bin/env python import dbus class Notification: def __init__(self): self.app_name = "" self.replaces_id = 0 self.app_icon = "" self.summary = "" self.body = "" self.actions = [] self.hints = {} self.expire_timeout = 1000 try: session_bus = dbus.SessionBus() obj = session_bus.get_object("org.freedesktop.Notifications","/org/freedesktop/Notifications") self.interface = dbus.Interface(obj, "org.freedesktop.Notifications") except Exception: self.interface = None def setAppName(self, app_name): self.app_name = app_name def setReplacesId(self, replaces_id): self.replaces_id = replaces_id def setIcon(self, app_icon): self.app_icon = app_icon def setSummary(self, summary): self.summary = summary def setBody(self, body): self.body = body def addAction(self, action): t.append(action) def addHint(self, hint): pass # TODO def setTimeout(self, expire_timeout): self.expire_timeout = expire_timeout * 1000 def setMSTimeout(self, expire_timeout): self.expire_timeout = expire_timeout def notify(self): self.interface.Notify(self.app_name, self.replaces_id, self.app_icon, self.summary, self.body, self.actions, self.hints, self.expire_timeout) notif = Notification() notif.setAppName("AppliTest") notif.setSummary("Notification quand tu nous tiens") notif.setBody("Voici mon premier test on va faire un texte un temps soit peu long pour voir comment se comporte la boite quand le texte est long ... un texte court n'aurait peut etre pas donne le meme effet !!!") notif.setIcon("/usr/share/pixmaps/vlc.png") notif.setTimeout(7) notif.notify()
et son résultat prometeur vous allez constater par vous même :

La prochaine étape étant de rajouter les fonctionnalités de Hint et d'Actions qui vont bien, programmer tout ça correctement, utiliser les fonctionalités offertes par galago qui ont l'air d'être assez nombreuses ... mais si j'avance dans tout ça je complèterai !!! En attendant ça nous fait a tous une bonne base de départ !




Commentaires
David, biologeek le lundi 24 avril 2006 à 13:53
PiTiLeZarD le lundi 24 avril 2006 à 15:45
David, biologeek le lundi 24 avril 2006 à 23:29
PiTiLeZarD le mercredi 26 avril 2006 à 18:52
vchahun le mercredi 23 mai 2007 à 23:09
PiTiLeZarD le jeudi 24 mai 2007 à 00:21