finch/plugins/pietray.py

Thu, 30 Apr 2020 20:27:38 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 30 Apr 2020 20:27:38 -0500
changeset 40389
a10a60c6cea4
parent 39349
c28414267b99
permissions
-rwxr-xr-x

Clean up the account actions lists as we're iterating to avoid having to iterate it twice.

18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1 #!/usr/bin/env python
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
2
39349
c28414267b99 finch: Add note to pietray plugin stating that the plugin is broken
Mike Ruprecht <cmaiku@gmail.com>
parents: 37987
diff changeset
3 # NOTICE: This script is currently broken as the libpurple DBus
c28414267b99 finch: Add note to pietray plugin stating that the plugin is broken
Mike Ruprecht <cmaiku@gmail.com>
parents: 37987
diff changeset
4 # bindings have been removed.
c28414267b99 finch: Add note to pietray plugin stating that the plugin is broken
Mike Ruprecht <cmaiku@gmail.com>
parents: 37987
diff changeset
5 #
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
6 # This is a dbus script to show a docklet for Finch. This should work
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
7 # for any 'compatible' purple client.
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
8 #
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
9 # By 'compatible', I mean any client that sets and updates the
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
10 # "unseen-count" data on the conversations.
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
11 #
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
12 # It allows doing the following things:
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
13 # - It allows changing status.
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
14 # - It shows the current status and info about unread messages in
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
15 # the tooltip.
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
16 # - It can blink on unread IM/Chat messages, and it allows canging
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
17 # the preference for that.
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
18 #
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
19 # It requires GTK+ 2.10 or above, since it uses GtkStatusIcon.
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
20 #
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
21 # Sadrul <sadrul@pidgin.im>
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
22
37983
7d134a4a87b2 Ensure all Python scripts are Py3k compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 18424
diff changeset
23 from __future__ import absolute_import, division, print_function
7d134a4a87b2 Ensure all Python scripts are Py3k compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 18424
diff changeset
24
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
25 import os # to get the pkg-config output
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
26
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
27 import pygtk
37987
81d3f45ae36b Ignore flake8 E402 where intended.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37985
diff changeset
28 pygtk.require("2.0") # noqa
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
29 import gtk
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
30 import dbus
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
31 import dbus.glib
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
32
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
33
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
34 bus = dbus.SessionBus()
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
35 obj = bus.get_object("im.pidgin.purple.PurpleService",
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
36 "/im/pidgin/purple/PurpleObject")
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
37 purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
38
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
39
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
40 def pack_image_label(menu, image, label):
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
41 item = gtk.ImageMenuItem(label)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
42 if image:
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
43 img = gtk.Image()
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
44 img.set_from_stock(image, 1)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
45 item.set_image(img)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
46 menu.append(item)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
47 return item
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
48
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
49
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
50 def activate_primitive_status(item, status):
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
51 saved = purple.PurpleSavedstatusFindTransientByTypeAndMessage(status, "")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
52 if not saved:
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
53 saved = purple.PurpleSavedstatusNew("", status)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
54 purple.PurpleSavedstatusActivate(saved)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
55
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
56
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
57 def activate_popular_status(item, time):
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
58 saved = purple.PurpleSavedstatusFindByCreationTime(time)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
59 if saved:
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
60 purple.PurpleSavedstatusActivate(saved)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
61
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
62
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
63 def generate_status_menu(menu):
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
64 item = gtk.MenuItem("Available")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
65 item.connect("activate", activate_primitive_status, 2)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
66 menu.append(item)
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
67
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
68 item = gtk.MenuItem("Away")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
69 item.connect("activate", activate_primitive_status, 5)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
70 menu.append(item)
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
71
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
72 item = gtk.MenuItem("Invisible")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
73 item.connect("activate", activate_primitive_status, 4)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
74 menu.append(item)
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
75
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
76 item = gtk.MenuItem("Offline")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
77 item.connect("activate", activate_primitive_status, 1)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
78 menu.append(item)
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
79
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
80 menu.append(gtk.MenuItem())
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
81
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
82 popular = purple.PurpleSavedstatusesGetPopular(10)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
83 for pop in popular:
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
84 title = purple.PurpleSavedstatusGetTitle(pop).replace('_', '__')
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
85 item = gtk.MenuItem(title)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
86 item.set_data("timestamp",
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
87 purple.PurpleSavedstatusGetCreationTime(pop))
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
88 item.connect("activate", activate_popular_status,
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
89 purple.PurpleSavedstatusGetCreationTime(pop))
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
90 menu.append(item)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
91
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
92
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
93 def toggle_pref(item, pref):
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
94 purple.PurplePrefsSetBool(pref, item.get_active())
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
95
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
96
18424
090bc431d552 Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18211
diff changeset
97 def quit_finch(item, null):
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
98 # XXX: Ask first
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
99 purple.PurpleCoreQuit()
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
100 gtk.main_quit()
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
101
18424
090bc431d552 Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18211
diff changeset
102
090bc431d552 Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18211
diff changeset
103 def close_docklet(item, null):
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
104 gtk.main_quit()
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
105
18424
090bc431d552 Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18211
diff changeset
106
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
107 def popup_menu(icon, button, tm, none):
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
108 menu = gtk.Menu()
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
109
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
110 # item = gtk.ImageMenuItem(gtk.STOCK_QUIT)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
111 # item.connect("activate", quit_finch, None)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
112 # menu.append(item)
18424
090bc431d552 Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18211
diff changeset
113
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
114 item = gtk.ImageMenuItem(gtk.STOCK_CLOSE)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
115 item.connect("activate", close_docklet, None)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
116 menu.append(item)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
117
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
118 menu.append(gtk.MenuItem())
18424
090bc431d552 Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18211
diff changeset
119
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
120 item = gtk.CheckMenuItem("Blink for unread IM")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
121 item.set_active(
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
122 purple.PurplePrefsGetBool("/plugins/dbus/docklet/blink/im"))
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
123 item.connect("activate", toggle_pref, "/plugins/dbus/docklet/blink/im")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
124 menu.append(item)
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
125
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
126 item = gtk.CheckMenuItem("Blink for unread Chats")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
127 item.set_active(
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
128 purple.PurplePrefsGetBool("/plugins/dbus/docklet/blink/chat"))
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
129 item.connect("activate", toggle_pref, "/plugins/dbus/docklet/blink/chat")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
130 menu.append(item)
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
131
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
132 menu.append(gtk.MenuItem())
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
133
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
134 # item = pack_image_label(menu, None, "Change Status...")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
135 item = gtk.MenuItem("Change Status...")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
136 menu.append(item)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
137 submenu = gtk.Menu()
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
138 item.set_submenu(submenu)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
139 generate_status_menu(submenu)
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
140
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
141 menu.show_all()
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
142 menu.popup(None, None, None, button, tm)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
143
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
144
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
145 def get_status_message():
37985
c3bab3be9695 Remove some "clever" Python code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37984
diff changeset
146 status_names = {
c3bab3be9695 Remove some "clever" Python code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37984
diff changeset
147 1: 'Offline',
c3bab3be9695 Remove some "clever" Python code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37984
diff changeset
148 2: 'Available',
c3bab3be9695 Remove some "clever" Python code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37984
diff changeset
149 4: 'Invisible',
c3bab3be9695 Remove some "clever" Python code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37984
diff changeset
150 5: 'Away',
c3bab3be9695 Remove some "clever" Python code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37984
diff changeset
151 }
c3bab3be9695 Remove some "clever" Python code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37984
diff changeset
152
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
153 status = purple.PurpleSavedstatusGetCurrent()
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
154 msg = purple.PurpleSavedstatusGetMessage(status)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
155 if msg and len(msg) > 0:
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
156 text = msg + " "
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
157 else:
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
158 text = ""
37985
c3bab3be9695 Remove some "clever" Python code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37984
diff changeset
159 text += "(" + status_names[purple.PurpleSavedstatusGetType(status)] + ")"
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
160 return text
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
161
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
162
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
163 def detect_unread_conversations():
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
164 im = purple.PurplePrefsGetBool("/plugins/dbus/docklet/blink/im")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
165 chat = purple.PurplePrefsGetBool("/plugins/dbus/docklet/blink/chat")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
166 tooltip = ""
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
167 blink = False
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
168 if im and chat:
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
169 convs = purple.PurpleGetConversations()
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
170 elif im:
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
171 convs = purple.PurpleGetIms()
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
172 elif chat:
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
173 convs = purple.PurpleGetChats()
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
174 else:
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
175 convs = None
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
176 for conv in convs:
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
177 count = purple.PurpleConversationGetData(conv, "unseen-count")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
178 if count and count > 0:
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
179 blink = True
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
180 tooltip += "\n%s (%d)" % (purple.PurpleConversationGetName(conv),
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
181 count)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
182 t.set_from_file(path + "/share/pixmaps/pidgin.png")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
183 if blink:
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
184 # I hate this icon
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
185 # t.set_from_file(path +
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
186 # "/share/pixmaps/pidgin/tray/22/tray-message.png")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
187 tooltip = "\nUnread Messages:" + tooltip
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
188 # There's going to be some way to expose the client's display name in
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
189 # 2.1.0. Use that instead of hardcoding Finch here.
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
190 t.set_tooltip("Finch: " + get_status_message() + tooltip)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
191 t.set_blinking(blink)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
192
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
193
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
194 def conversation_updated(conv, type):
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
195 detect_unread_conversations()
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
196
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
197
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
198 def savedstatus_changed(new, old):
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
199 # Change the icon for status perhaps?
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
200 detect_unread_conversations()
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
201
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
202
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
203 def init_prefs():
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
204 if not purple.PurplePrefsExists("/plugins/dbus/docklet/blink"):
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
205 purple.PurplePrefsAddNone("/plugins")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
206 purple.PurplePrefsAddNone("/plugins/dbus")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
207 purple.PurplePrefsAddNone("/plugins/dbus/docklet")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
208 purple.PurplePrefsAddNone("/plugins/dbus/docklet/blink")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
209 purple.PurplePrefsAddBool("/plugins/dbus/docklet/blink/im", True)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
210 purple.PurplePrefsAddBool("/plugins/dbus/docklet/blink/chat", True)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
211
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
212
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
213 pkg = os.popen("pkg-config --variable=prefix pidgin")
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
214 path = pkg.readline().rstrip()
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
215
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
216 bus.add_signal_receiver(conversation_updated,
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
217 dbus_interface="im.pidgin.purple.PurpleInterface",
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
218 signal_name="ConversationUpdated")
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
219
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
220 bus.add_signal_receiver(savedstatus_changed,
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
221 dbus_interface="im.pidgin.purple.PurpleInterface",
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
222 signal_name="SavedstatusChanged")
18211
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
223
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
224 t = gtk.StatusIcon()
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
225 t.connect("popup-menu", popup_menu, None)
b20146d6331e Dbus docklet for finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
226
18424
090bc431d552 Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18211
diff changeset
227 try:
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
228 init_prefs()
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
229 detect_unread_conversations()
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
230 gtk.main()
18424
090bc431d552 Add a 'Close' option for pietray to close the docklet.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18211
diff changeset
231 except:
37984
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
232 dialog = gtk.Dialog("pietray: Error", None,
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
233 gtk.DIALOG_NO_SEPARATOR | gtk.DIALOG_MODAL,
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
234 ("Close", gtk.RESPONSE_CLOSE))
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
235 dialog.set_resizable(False)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
236 error_label = gtk.Label("There was some error. Perhaps a purple client is "
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
237 "not running.")
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
238 dialog.vbox.pack_start(error_label, False, False, 0)
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
239 dialog.show_all()
6a5ca046a90d Make all Python files PEP8 compatible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 37983
diff changeset
240 dialog.run()

mercurial