每次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相同的问题我还没有找到怎么办?
为任何帮助干杯,
哦,如果有人知道怎么阻止它发出一点“钢琴”的声音,当它通知它也会很棒时!
史蒂夫
答案 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文件,依此类推