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

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

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

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

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

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

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

        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时间

 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")


你可能感兴趣的:(bug,notify,Music,deepin,notify-osd)