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")
相關文章
相關標籤/搜索