annotate finch/plugins/pietray.py @ 27050:fd7dc5cc0310

Allow incoming stanzas to match 'our account' if they come from our resource. This makes little sense but is allowed by rfc3921 7.2 for roster pushes and is what ejabberd 2.0.5 uses.
author Paul Aurich <paul@darkrain42.org>
date Fri, 29 May 2009 20:56:46 +0000
parents 22b9b6f148be
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18139
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
1 #!/usr/bin/env python
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
2
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
3 # This is a dbus script to show a docklet for Finch. This should work
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
4 # for any 'compatible' purple client.
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
5 #
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
6 # By 'compatible', I mean any client that sets and updates the
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
7 # "unseen-count" data on the conversations.
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
8 #
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
9 # It allows doing the following things:
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
10 # - It allows changing status.
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
11 # - It shows the current status and info about unread messages in
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
12 # the tooltip.
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
13 # - It can blink on unread IM/Chat messages, and it allows canging
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
14 # the preference for that.
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
15 #
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
16 # It requires GTK+ 2.10 or above, since it uses GtkStatusIcon.
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
17 #
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
18 # Sadrul <sadrul@pidgin.im>
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
19
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
20 import pygtk
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
21 pygtk.require("2.0")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
22 import gtk
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
23 import dbus, gobject, dbus.glib
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
24 import os # to get the pkg-config output
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
25
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
26 bus = dbus.SessionBus()
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
27 obj = bus.get_object(
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
28 "im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
29 purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
30
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
31 def pack_image_label(menu, image, label):
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
32 item = gtk.ImageMenuItem(label)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
33 if image:
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
34 img = gtk.Image()
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
35 img.set_from_stock(image, 1)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
36 item.set_image(img)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
37 menu.append(item)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
38 return item
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
39
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
40 def activate_primitive_status(item, status):
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
41 saved = purple.PurpleSavedstatusFindTransientByTypeAndMessage(status, "")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
42 if not saved:
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
43 saved = purple.PurpleSavedstatusNew("", status)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
44 purple.PurpleSavedstatusActivate(saved)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
45
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
46 def activate_popular_status(item, time):
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
47 saved = purple.PurpleSavedstatusFindByCreationTime(time)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
48 if saved:
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
49 purple.PurpleSavedstatusActivate(saved)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
50
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
51 def generate_status_menu(menu):
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
52 item = gtk.MenuItem("Available")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
53 item.connect("activate", activate_primitive_status, 2)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
54 menu.append(item)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
55
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
56 item = gtk.MenuItem("Away")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
57 item.connect("activate", activate_primitive_status, 5)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
58 menu.append(item)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
59
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
60 item = gtk.MenuItem("Invisible")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
61 item.connect("activate", activate_primitive_status, 4)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
62 menu.append(item)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
63
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
64 item = gtk.MenuItem("Offline")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
65 item.connect("activate", activate_primitive_status, 1)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
66 menu.append(item)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
67
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
68 menu.append(gtk.MenuItem())
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
69
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
70 popular = purple.PurpleSavedstatusesGetPopular(10)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
71 for pop in popular:
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
72 title = purple.PurpleSavedstatusGetTitle(pop).replace('_', '__')
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
73 item = gtk.MenuItem(title)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
74 item.set_data("timestamp", purple.PurpleSavedstatusGetCreationTime(pop))
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
75 item.connect("activate", activate_popular_status, purple.PurpleSavedstatusGetCreationTime(pop))
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
76 menu.append(item)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
77
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
78 def toggle_pref(item, pref):
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
79 purple.PurplePrefsSetBool(pref, item.get_active())
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
80
18384
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
81 def quit_finch(item, null):
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
82 # XXX: Ask first
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
83 purple.PurpleCoreQuit()
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
84 gtk.main_quit()
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
85
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
86 def close_docklet(item, null):
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
87 gtk.main_quit()
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
88
18139
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
89 def popup_menu(icon, button, tm, none):
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
90 menu = gtk.Menu()
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
91
18384
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
92 #item = gtk.ImageMenuItem(gtk.STOCK_QUIT)
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
93 #item.connect("activate", quit_finch, None)
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
94 #menu.append(item)
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
95
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
96 item = gtk.ImageMenuItem(gtk.STOCK_CLOSE)
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
97 item.connect("activate", close_docklet, None)
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
98 menu.append(item)
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
99
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
100 menu.append(gtk.MenuItem())
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
101
18139
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
102 item = gtk.CheckMenuItem("Blink for unread IM")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
103 item.set_active(purple.PurplePrefsGetBool("/plugins/dbus/docklet/blink/im"))
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
104 item.connect("activate", toggle_pref, "/plugins/dbus/docklet/blink/im")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
105 menu.append(item)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
106
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
107 item = gtk.CheckMenuItem("Blink for unread Chats")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
108 item.set_active(purple.PurplePrefsGetBool("/plugins/dbus/docklet/blink/chat"))
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
109 item.connect("activate", toggle_pref, "/plugins/dbus/docklet/blink/chat")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
110 menu.append(item)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
111
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
112 menu.append(gtk.MenuItem())
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
113
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
114 #item = pack_image_label(menu, None, "Change Status...")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
115 item = gtk.MenuItem("Change Status...")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
116 menu.append(item)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
117 submenu = gtk.Menu()
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
118 item.set_submenu(submenu)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
119 generate_status_menu(submenu)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
120
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
121 menu.show_all()
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
122 menu.popup(None, None, None, button, tm)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
123
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
124 def get_status_message():
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
125 status = purple.PurpleSavedstatusGetCurrent()
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
126 msg = purple.PurpleSavedstatusGetMessage(status)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
127 if msg and len(msg) > 0:
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
128 text = msg + " "
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
129 else:
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
130 text = ""
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
131 text = text + "(" + {
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
132 2: "Available",
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
133 5: "Away",
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
134 4: "Invisible",
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
135 1: "Offline"
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
136 }[purple.PurpleSavedstatusGetType(status)] + ")"
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
137 return text
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
138
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
139 def detect_unread_conversations():
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
140 im = purple.PurplePrefsGetBool("/plugins/dbus/docklet/blink/im")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
141 chat = purple.PurplePrefsGetBool("/plugins/dbus/docklet/blink/chat")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
142 tooltip = ""
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
143 blink = False
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
144 if im and chat:
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
145 convs = purple.PurpleGetConversations()
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
146 elif im:
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
147 convs = purple.PurpleGetIms()
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
148 elif chat:
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
149 convs = purple.PurpleGetChats()
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
150 else:
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
151 convs = None
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
152 for conv in convs:
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
153 count = purple.PurpleConversationGetData(conv, "unseen-count")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
154 if count and count > 0:
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
155 blink = True
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
156 tooltip = tooltip + "\n" + purple.PurpleConversationGetName(conv) + " (" + str(count) + ")"
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
157 t.set_from_file(path + "/share/pixmaps/pidgin.png")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
158 if blink:
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
159 # I hate this icon
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
160 # t.set_from_file(path + "/share/pixmaps/pidgin/tray/22/tray-message.png")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
161 tooltip = "\nUnread Messages:" + tooltip
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
162 # There's going to be some way to expose the client's display name in 2.1.0.
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
163 # Use that instead of hardcoding Finch here.
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
164 t.set_tooltip("Finch: " + get_status_message() + tooltip)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
165 t.set_blinking(blink)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
166
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
167 def conversation_updated(conv, type):
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
168 detect_unread_conversations()
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
169
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
170 def savedstatus_changed(new, old):
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
171 # Change the icon for status perhaps?
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
172 detect_unread_conversations()
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
173
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
174 def init_prefs():
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
175 if not purple.PurplePrefsExists("/plugins/dbus/docklet/blink"):
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
176 purple.PurplePrefsAddNone("/plugins")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
177 purple.PurplePrefsAddNone("/plugins/dbus")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
178 purple.PurplePrefsAddNone("/plugins/dbus/docklet")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
179 purple.PurplePrefsAddNone("/plugins/dbus/docklet/blink")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
180 purple.PurplePrefsAddBool("/plugins/dbus/docklet/blink/im", True)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
181 purple.PurplePrefsAddBool("/plugins/dbus/docklet/blink/chat", True)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
182
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
183 pkg = os.popen("pkg-config --variable=prefix pidgin")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
184 path = pkg.readline().rstrip()
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
185
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
186 bus.add_signal_receiver(conversation_updated,
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
187 dbus_interface="im.pidgin.purple.PurpleInterface",
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
188 signal_name="ConversationUpdated")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
189
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
190 bus.add_signal_receiver(savedstatus_changed,
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
191 dbus_interface="im.pidgin.purple.PurpleInterface",
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
192 signal_name="SavedstatusChanged")
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
193
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
194 t = gtk.StatusIcon()
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
195 t.connect("popup-menu", popup_menu, None)
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
196
18384
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
197 try:
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
198 init_prefs()
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
199 detect_unread_conversations()
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
200 gtk.main ()
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
201 except:
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
202 dialog = gtk.Dialog("pietray: Error", None, gtk.DIALOG_NO_SEPARATOR | gtk.DIALOG_MODAL, ("Close", gtk.RESPONSE_CLOSE))
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
203 dialog.set_resizable(False)
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
204 dialog.vbox.pack_start(gtk.Label("There was some error. Perhaps a purple client is not running."), False, False, 0)
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
205 dialog.show_all()
22b9b6f148be Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 18139
diff changeset
206 dialog.run()
18139
12ab14848af4 Dbus docklet for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
207