Notify-osd是怎么让我找到Deepin音乐BUG的

        最近心血来潮,换到了Ubuntu13.10。通过一段时间的整治,使着仍是挺方便的。 python

        惟一不爽的就是系统通知(右上角上面偶尔出现的信息提示条)出现的时间太长了(默认是10s)。 linux

        你们都知道,咱们日常不论干什么QQ是要登陆的,偶也不例外。本人在Firefox下使用的webQQ,每次群里一聊天,那信息提示框过了好几分钟了还以那儿提示老久之前的消息呢,导至换歌的时候我都看不到Deepin音乐的提示了。 git

        这不行啊,太难受了。作为一个不做就会死的程序猿,咱得处理一下这个问题。 github

        Google了一把,能够把系统默认的notify-osd这个系统通知组件换成通过Leolik大神修改的,此修改版能够控制timeout,Ok照https://launchpad.net/~leolik/+archive/leolik 装了一边。 web

        通过notify-send测试timeout是能够生效的,可是如今问题来了每次换哥的时候通知一闪就完了,我靠,以前时间长,如今我还没看清就关掉了
app

        So怀疑是音乐内部设置了超时的时间,可是查看通知插件的代码也没有发现有设置timeout的地方(地址:https://github.com/linuxdeepin/deepin-music-player/blob/master/plugins/notify/__init__.py 你们有兴趣能够看一下)。
测试

        随便看的时候在源码目录下发现有一个dbus_notify.py,打开一看内容跟插件中调用的接口特别像,仔细一对照。得就是它了,下面是修正后的代码。你们其实直接修改/usr/share/deepin-music-player/src下的文件就能够了。就添加了一行代码,改了下timeout时间
spa

class DbusNotify(object):
    
    def __init__(self, app_name, icon=None):
        self.app_name = app_name
        self.icon = icon or app_name
        self.summary = ""
        self.body = ""
        self.hints = {}
        self.actions = []
        self.timeout = 1000 ##修改此处的timeout时间,因为是毫秒记,因此记得×1000。原来是3连一秒都不到,确定是一闪而过啊
        
    def set_summary(self, summary):    
        self.summary = summary
        
    def set_body(self, body):    
        self.body = body
        
    def set_icon_from_pixbuf(self, pixbuf):
        pass
    
    def pixbuf_to_dbus(self, pixbuf):
        pass
        
    def set_icon_from_path(self, image_path):    
        self.hints["image-path"] = image_path
        self.icon = image_path  ##此处是在通知栏中显示歌曲的封面,默认的时候居然没有这条语句,deepin开源也太不负责了吧

    def notify(self):
        bus = dbus.SessionBus()
        # if not check_dbus(bus, NOTIFICATIONS_SERVICE_NAME):
        #     return False
        
        try:
            proxy = bus.get_object(NOTIFICATIONS_SERVICE_NAME,
                                   NOTIFICATIONS_PATH)
            notify_interface = dbus.Interface(proxy, NOTIFICATIONS_SERVICE_NAME)
            notify_interface.Notify(self.app_name, 5, self.icon, self.summary, self.body,
                                    self.actions, self.hints, self.timeout)
        except:    
            pass
            

dbus_notify = DbusNotify("deepin-music-player", "deepin-music-player")
相关文章
相关标签/搜索