~ubuntu-branches/debian/sid/docky/sid

« back to all changes in this revision

Viewing changes to scripts/liferea_badge.py

  • Committer: Package Import Robot
  • Author(s): Rico Tzschichholz
  • Date: 2012-01-19 19:03:38 UTC
  • mfrom: (1.1.14) (10.1.9 experimental)
  • Revision ID: package-import@ubuntu.com-20120119190338-n44q7tmqsrkudvk7
Tags: 2.1.3-2
* Upload to unstable
* debian/watch:
  + Look for xz tarballs from now on

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env python
2
 
 
3
 
#  
4
 
#  Copyright (C) 2010 Rico Tzschichholz
5
 
6
 
#  This program is free software: you can redistribute it and/or modify
7
 
#  it under the terms of the GNU General Public License as published by
8
 
#  the Free Software Foundation, either version 3 of the License, or
9
 
#  (at your option) any later version.
10
 
11
 
#  This program is distributed in the hope that it will be useful,
12
 
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 
#  GNU General Public License for more details.
15
 
16
 
#  You should have received a copy of the GNU General Public License
17
 
#  along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
 
#
19
 
 
20
 
import atexit
21
 
import gobject
22
 
import dbus
23
 
import dbus.glib
24
 
import glib
25
 
import sys
26
 
import os
27
 
 
28
 
try:
29
 
        from docky.docky import DockyItem, DockySink
30
 
        from signal import signal, SIGTERM
31
 
        from sys import exit
32
 
except ImportError, e:
33
 
        print e
34
 
        exit()
35
 
 
36
 
lifereabus = "org.gnome.feed.Reader"
37
 
readerpath = "/org/gnome/feed/Reader"
38
 
readeriface = "org.gnome.feed.Reader"
39
 
        
40
 
class DockyLifereaItem(DockyItem):
41
 
        def __init__(self, path):
42
 
                DockyItem.__init__(self, path)
43
 
                self.timer = 0
44
 
                self.reader = None
45
 
                                
46
 
                self.bus.add_signal_receiver(self.name_owner_changed_cb,
47
 
                                             dbus_interface='org.freedesktop.DBus',
48
 
                                             signal_name='NameOwnerChanged')
49
 
                                             
50
 
                obj = self.bus.get_object ("org.freedesktop.DBus", "/org/freedesktop/DBus")
51
 
                self.bus_interface = dbus.Interface(obj, "org.freedesktop.DBus")
52
 
                
53
 
                self.bus_interface.ListNames (reply_handler=self.list_names_handler, error_handler=self.list_names_error_handler)
54
 
 
55
 
        def list_names_handler(self, names):
56
 
                if lifereabus in names:
57
 
                        self.init_liferea_objects()
58
 
                        self.update_badge()
59
 
 
60
 
        def list_names_error_handler(self, error):
61
 
                print "error getting bus names - %s" % str(error)
62
 
        
63
 
        def name_owner_changed_cb(self, name, old_owner, new_owner):
64
 
                if name == lifereabus:
65
 
                        if new_owner:
66
 
                                self.init_liferea_objects()
67
 
                        else:
68
 
                                self.reader = None
69
 
                                if self.timer > 0:
70
 
                                        gobject.source_remove (self.timer)
71
 
                                        self.timer = 0
72
 
                                self.update_badge()
73
 
        
74
 
        def init_liferea_objects(self):
75
 
                obj = self.bus.get_object(lifereabus, readerpath)
76
 
                self.reader = dbus.Interface(obj, readeriface)
77
 
                
78
 
                if not self.timer > 0:
79
 
                        self.timer = gobject.timeout_add (10000, self.update_badge)
80
 
 
81
 
        def update_badge(self):
82
 
                if not self.reader:
83
 
                        self.iface.ResetBadgeText()
84
 
                        return False
85
 
                
86
 
                items_unread = self.reader.GetUnreadItems()
87
 
                #items_new = self.reader.GetNewItems()
88
 
                if items_unread > 0:
89
 
                        self.iface.SetBadgeText("%s" % items_unread)
90
 
                else:
91
 
                        self.iface.ResetBadgeText()
92
 
                return True
93
 
 
94
 
class DockyLifereaSink(DockySink):
95
 
        def item_path_found(self, pathtoitem, item):
96
 
                if item.GetOwnsDesktopFile() and item.GetDesktopFile().endswith ("liferea.desktop"):
97
 
                        self.items[pathtoitem] = DockyLifereaItem(pathtoitem)
98
 
 
99
 
dockysink = DockyLifereaSink()
100
 
 
101
 
def cleanup ():
102
 
        dockysink.dispose ()
103
 
 
104
 
if __name__ == "__main__":
105
 
        mainloop = gobject.MainLoop(is_running=True)
106
 
 
107
 
        atexit.register (cleanup)
108
 
        signal(SIGTERM, lambda signum, stack_frame: exit(1))
109
 
 
110
 
        mainloop.run()