使用KNotify更新通知

时间:2010-11-05 16:09:35

标签: python notifications kde

每次Spotify更改跟踪时,我都会转换gnome python脚本以使用KDE通知。代码如下:

#!/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相同的问题我还没有找到怎么办?

为任何帮助干杯,

哦,如果有人知道怎么阻止它发出一点“钢琴”的声音,当它通知它也会很棒时!

史蒂夫

2 个答案:

答案 0 :(得分:3)

更简单的方法是在创建通知事件时设置超时:

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

timeout是一个表示毫秒的整数值。

答案 1 :(得分:1)

event方法返回int。这是通知的ID。因此,您可以使用它来关闭,更新现有的Notify:

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

time.sleep(30) 

knotify.closeNotification(id)

如果您必须检查它是否已存在,您可以将Id写入tmp文件,依此类推