diff --git a/server_status_icons/__init__.py b/server_status_icons/__init__.py new file mode 100644 index 0000000..9696c34 --- /dev/null +++ b/server_status_icons/__init__.py @@ -0,0 +1 @@ +from server_status_icons import ServerStatusIconsPlugin diff --git a/server_status_icons/facebook/16x16/away.png b/server_status_icons/facebook/16x16/away.png new file mode 100644 index 0000000..ba86e9e Binary files /dev/null and b/server_status_icons/facebook/16x16/away.png differ diff --git a/server_status_icons/facebook/16x16/chat.png b/server_status_icons/facebook/16x16/chat.png new file mode 100644 index 0000000..e9ec9a1 Binary files /dev/null and b/server_status_icons/facebook/16x16/chat.png differ diff --git a/server_status_icons/facebook/16x16/dnd.png b/server_status_icons/facebook/16x16/dnd.png new file mode 100644 index 0000000..71e55bd Binary files /dev/null and b/server_status_icons/facebook/16x16/dnd.png differ diff --git a/server_status_icons/facebook/16x16/icon.def.xml b/server_status_icons/facebook/16x16/icon.def.xml new file mode 100644 index 0000000..32a3bb2 --- /dev/null +++ b/server_status_icons/facebook/16x16/icon.def.xml @@ -0,0 +1,53 @@ + + + 1.0 + Facebook + Facebook Iconset for Vacuum-IM + 2010-05-24 + Artem Rogudeev / [AKI]`Rodent + + + online + online.png + + + + offline + offline.png + + + + away + away.png + + + + xa + xa.png + + + + dnd + dnd.png + + + + invisible + invisible.png + + + + chat + chatty.png + + + + ask + ask.png + + + + noauth + noauth.png + + diff --git a/server_status_icons/facebook/16x16/invisible.png b/server_status_icons/facebook/16x16/invisible.png new file mode 100644 index 0000000..ea2c3d9 Binary files /dev/null and b/server_status_icons/facebook/16x16/invisible.png differ diff --git a/server_status_icons/facebook/16x16/offline.png b/server_status_icons/facebook/16x16/offline.png new file mode 100644 index 0000000..4759cea Binary files /dev/null and b/server_status_icons/facebook/16x16/offline.png differ diff --git a/server_status_icons/facebook/16x16/online.png b/server_status_icons/facebook/16x16/online.png new file mode 100644 index 0000000..f0faf29 Binary files /dev/null and b/server_status_icons/facebook/16x16/online.png differ diff --git a/server_status_icons/facebook/16x16/xa.png b/server_status_icons/facebook/16x16/xa.png new file mode 100644 index 0000000..8f1caa0 Binary files /dev/null and b/server_status_icons/facebook/16x16/xa.png differ diff --git a/server_status_icons/gtalk/16x16/away.png b/server_status_icons/gtalk/16x16/away.png new file mode 100644 index 0000000..ae59da2 Binary files /dev/null and b/server_status_icons/gtalk/16x16/away.png differ diff --git a/server_status_icons/gtalk/16x16/chat.png b/server_status_icons/gtalk/16x16/chat.png new file mode 100644 index 0000000..7738747 Binary files /dev/null and b/server_status_icons/gtalk/16x16/chat.png differ diff --git a/server_status_icons/gtalk/16x16/dnd.png b/server_status_icons/gtalk/16x16/dnd.png new file mode 100644 index 0000000..08b7ef1 Binary files /dev/null and b/server_status_icons/gtalk/16x16/dnd.png differ diff --git a/server_status_icons/gtalk/16x16/icon.def.xml b/server_status_icons/gtalk/16x16/icon.def.xml new file mode 100644 index 0000000..92bf86a --- /dev/null +++ b/server_status_icons/gtalk/16x16/icon.def.xml @@ -0,0 +1,53 @@ + + + 1.0 + Google Talk + Google Talk Iconset for Vacuum-IM + 2010-06-12 + Artem Rogudeev / [AKI]`Rodent + + + online + online.png + + + + offline + offline.png + + + + away + away.png + + + + xa + xa.png + + + + dnd + dnd.png + + + + invisible + invisible.png + + + + chat + chatty.png + + + + ask + ask.png + + + + noauth + noauth.png + + diff --git a/server_status_icons/gtalk/16x16/invisible.png b/server_status_icons/gtalk/16x16/invisible.png new file mode 100644 index 0000000..28fd2c2 Binary files /dev/null and b/server_status_icons/gtalk/16x16/invisible.png differ diff --git a/server_status_icons/gtalk/16x16/offline.png b/server_status_icons/gtalk/16x16/offline.png new file mode 100644 index 0000000..c2a62e5 Binary files /dev/null and b/server_status_icons/gtalk/16x16/offline.png differ diff --git a/server_status_icons/gtalk/16x16/online.png b/server_status_icons/gtalk/16x16/online.png new file mode 100644 index 0000000..a4ecba7 Binary files /dev/null and b/server_status_icons/gtalk/16x16/online.png differ diff --git a/server_status_icons/gtalk/16x16/xa.png b/server_status_icons/gtalk/16x16/xa.png new file mode 100644 index 0000000..0d75887 Binary files /dev/null and b/server_status_icons/gtalk/16x16/xa.png differ diff --git a/server_status_icons/livejournal/16x16/away.png b/server_status_icons/livejournal/16x16/away.png new file mode 100644 index 0000000..99de366 Binary files /dev/null and b/server_status_icons/livejournal/16x16/away.png differ diff --git a/server_status_icons/livejournal/16x16/chat.png b/server_status_icons/livejournal/16x16/chat.png new file mode 100644 index 0000000..3902692 Binary files /dev/null and b/server_status_icons/livejournal/16x16/chat.png differ diff --git a/server_status_icons/livejournal/16x16/dnd.png b/server_status_icons/livejournal/16x16/dnd.png new file mode 100644 index 0000000..6e58f1f Binary files /dev/null and b/server_status_icons/livejournal/16x16/dnd.png differ diff --git a/server_status_icons/livejournal/16x16/icon.def.xml b/server_status_icons/livejournal/16x16/icon.def.xml new file mode 100644 index 0000000..345df36 --- /dev/null +++ b/server_status_icons/livejournal/16x16/icon.def.xml @@ -0,0 +1,53 @@ + + + 1.0 + LiveJournal + LiveJournal Iconset for Vacuum-IM + 2010-08-15 + Artem Rogudeev / [AKI]`Rodent + + + online + online.png + + + + offline + offline.png + + + + away + away.png + + + + xa + xa.png + + + + dnd + dnd.png + + + + invisible + invisible.png + + + + chat + chatty.png + + + + ask + ask.png + + + + noauth + noauth.png + + diff --git a/server_status_icons/livejournal/16x16/invisible.png b/server_status_icons/livejournal/16x16/invisible.png new file mode 100644 index 0000000..4aa1533 Binary files /dev/null and b/server_status_icons/livejournal/16x16/invisible.png differ diff --git a/server_status_icons/livejournal/16x16/offline.png b/server_status_icons/livejournal/16x16/offline.png new file mode 100644 index 0000000..5789f44 Binary files /dev/null and b/server_status_icons/livejournal/16x16/offline.png differ diff --git a/server_status_icons/livejournal/16x16/online.png b/server_status_icons/livejournal/16x16/online.png new file mode 100644 index 0000000..eaeb181 Binary files /dev/null and b/server_status_icons/livejournal/16x16/online.png differ diff --git a/server_status_icons/livejournal/16x16/xa.png b/server_status_icons/livejournal/16x16/xa.png new file mode 100644 index 0000000..1dbebcd Binary files /dev/null and b/server_status_icons/livejournal/16x16/xa.png differ diff --git a/server_status_icons/manifest.ini b/server_status_icons/manifest.ini new file mode 100644 index 0000000..0e22ecb --- /dev/null +++ b/server_status_icons/manifest.ini @@ -0,0 +1,9 @@ +[info] +name: Server Status Icons +short_name: server_status_icons +version: 0.1 +description: Replace standard Gajim status icons with server + specific for known XMPP server accounts (vk.com, ...) +authors = Denis Fomin + Pavel Suslov +homepage = http://trac-plugins.gajim.org/wiki/ diff --git a/server_status_icons/odnoklassniki/16x16/away.png b/server_status_icons/odnoklassniki/16x16/away.png new file mode 100644 index 0000000..39bc456 Binary files /dev/null and b/server_status_icons/odnoklassniki/16x16/away.png differ diff --git a/server_status_icons/odnoklassniki/16x16/chat.png b/server_status_icons/odnoklassniki/16x16/chat.png new file mode 100644 index 0000000..3f63e66 Binary files /dev/null and b/server_status_icons/odnoklassniki/16x16/chat.png differ diff --git a/server_status_icons/odnoklassniki/16x16/dnd.png b/server_status_icons/odnoklassniki/16x16/dnd.png new file mode 100644 index 0000000..c9e0a66 Binary files /dev/null and b/server_status_icons/odnoklassniki/16x16/dnd.png differ diff --git a/server_status_icons/odnoklassniki/16x16/invisible.png b/server_status_icons/odnoklassniki/16x16/invisible.png new file mode 100644 index 0000000..301d2ae Binary files /dev/null and b/server_status_icons/odnoklassniki/16x16/invisible.png differ diff --git a/server_status_icons/odnoklassniki/16x16/offline.png b/server_status_icons/odnoklassniki/16x16/offline.png new file mode 100644 index 0000000..5a25681 Binary files /dev/null and b/server_status_icons/odnoklassniki/16x16/offline.png differ diff --git a/server_status_icons/odnoklassniki/16x16/online.png b/server_status_icons/odnoklassniki/16x16/online.png new file mode 100644 index 0000000..b80229b Binary files /dev/null and b/server_status_icons/odnoklassniki/16x16/online.png differ diff --git a/server_status_icons/odnoklassniki/16x16/xa.png b/server_status_icons/odnoklassniki/16x16/xa.png new file mode 100644 index 0000000..9d1652d Binary files /dev/null and b/server_status_icons/odnoklassniki/16x16/xa.png differ diff --git a/server_status_icons/odnoklassniki/32x32/away.png b/server_status_icons/odnoklassniki/32x32/away.png new file mode 100644 index 0000000..9a7482a Binary files /dev/null and b/server_status_icons/odnoklassniki/32x32/away.png differ diff --git a/server_status_icons/odnoklassniki/32x32/chat.png b/server_status_icons/odnoklassniki/32x32/chat.png new file mode 100644 index 0000000..e94dee2 Binary files /dev/null and b/server_status_icons/odnoklassniki/32x32/chat.png differ diff --git a/server_status_icons/odnoklassniki/32x32/dnd.png b/server_status_icons/odnoklassniki/32x32/dnd.png new file mode 100644 index 0000000..5381b1f Binary files /dev/null and b/server_status_icons/odnoklassniki/32x32/dnd.png differ diff --git a/server_status_icons/odnoklassniki/32x32/invisible.png b/server_status_icons/odnoklassniki/32x32/invisible.png new file mode 100644 index 0000000..c5095c6 Binary files /dev/null and b/server_status_icons/odnoklassniki/32x32/invisible.png differ diff --git a/server_status_icons/odnoklassniki/32x32/offline.png b/server_status_icons/odnoklassniki/32x32/offline.png new file mode 100644 index 0000000..a2d314e Binary files /dev/null and b/server_status_icons/odnoklassniki/32x32/offline.png differ diff --git a/server_status_icons/odnoklassniki/32x32/online.png b/server_status_icons/odnoklassniki/32x32/online.png new file mode 100644 index 0000000..0643f10 Binary files /dev/null and b/server_status_icons/odnoklassniki/32x32/online.png differ diff --git a/server_status_icons/odnoklassniki/32x32/xa.png b/server_status_icons/odnoklassniki/32x32/xa.png new file mode 100644 index 0000000..a774343 Binary files /dev/null and b/server_status_icons/odnoklassniki/32x32/xa.png differ diff --git a/server_status_icons/server_status_icons.py b/server_status_icons/server_status_icons.py new file mode 100644 index 0000000..0b4bf20 --- /dev/null +++ b/server_status_icons/server_status_icons.py @@ -0,0 +1,127 @@ +# -*- coding: utf-8 -*- +## + +import gtk +import os + +from plugins.gui import GajimPluginConfigDialog +from plugins import GajimPlugin +from plugins.helpers import log_calls +import gtkgui_helpers +from common import gajim +from common import helpers +from common import ged + + +class ServerStatusIconsPlugin(GajimPlugin): + + @log_calls('ServerStatusIconsPlugin') + def init(self): + self.description = _('Replace standard Gajim status icons with server' + ' specific for known XMPP server accounts (vk.com, ...)') + self.pos_list = [_('after statusicon'), _('before avatar')] + self.gui_extension_points = { + 'roster_draw_contact': (self.connect_with_roster_draw_contact, + self.disconnect_from_roster_draw_contact)} + self.known_servers = {'chat.facebook.com': 'facebook', + 'gmail.com': 'gtalk', + 'livejournal.com': 'livejournal', + 'odnoklassniki.ru': 'odnoklassniki', + 'vk.com': 'vkontakte', + 'ya.ru': 'yaonline'} + + @log_calls('ServerStatusIconsPlugin') + def connect_with_roster_draw_contact(self, roster, jid, account, contact): + if not self.active: + return + if gajim.jid_is_transport(jid): + return + + child_iters = roster._get_contact_iter(jid, account, contact, + roster.model) + if not child_iters: + return + + icon_name = helpers.get_icon_name_to_show(contact, account) + if gajim.events.get_events(account, jid) or icon_name == 'requested': + return + + host = jid.split('@')[1] + server = self.known_servers.get(host, False) + if not server: + return + + if server not in roster.transports_state_images['16']: + # we don't have iconset for this transport loaded yet. Let's do it + self.make_transport_state_images(roster, server) + if server in roster.transports_state_images['16'] and \ + icon_name in roster.transports_state_images['16'][server]: + state_images = roster.transports_state_images['16'][server] + img = state_images[icon_name] + for child_iter in child_iters: + roster.model[child_iter][0] = img + + def make_transport_state_images(self, roster, transport): + """ + Initialize opened and closed 'transport' iconset dict + """ + + folder = os.path.join(self.local_file_path(transport), '16x16') + pixo, pixc = gtkgui_helpers.load_icons_meta() + roster.transports_state_images['opened'][transport] = \ + gtkgui_helpers.load_iconset(folder, pixo, transport=True) + roster.transports_state_images['closed'][transport] = \ + gtkgui_helpers.load_iconset(folder, pixc, transport=True) + roster.transports_state_images['16'][transport] = \ + gtkgui_helpers.load_iconset(folder, transport=True) + folder = os.path.join(self.local_file_path(transport), '32x32') + roster.transports_state_images['32'][transport] = \ + gtkgui_helpers.load_iconset(folder, transport=True) + + def _nec_our_show(self, obj): + account = obj.conn.name + roster = gajim.interface.roster + status = gajim.connections[account].connected + + if account not in gajim.contacts.get_accounts(): + return + child_iterA = roster._get_account_iter(account, roster.model) + if not child_iterA: + return + + hostname = gajim.config.get_per('accounts', account, 'hostname') + server = self.known_servers.get(hostname, False) + if not server: + return + + if not roster.regroup: + show = gajim.SHOW_LIST[status] + else: # accounts merged + show = helpers.get_global_show() + + if server not in roster.transports_state_images['16']: + # we don't have iconset for this transport loaded yet. Let's do it + self.make_transport_state_images(roster, server) + if server in roster.transports_state_images['16'] and \ + show in roster.transports_state_images['16'][server]: + roster.model[child_iterA][0] = roster.transports_state_images[ + '16'][server][show] + + @log_calls('ServerStatusIconsPlugin') + def disconnect_from_roster_draw_contact(self, roster, jid, account, + contact): + pass + + @log_calls('ServerStatusIconsPlugin') + def activate(self): + self.active = True + gajim.interface.roster.setup_and_draw_roster() + gajim.ged.register_event_handler('our-show', ged.GUI2, + self._nec_our_show) + + @log_calls('ServerStatusIconsPlugin') + def deactivate(self): + self.active = None + gajim.ged.remove_event_handler('our-show', ged.GUI2, + self._nec_our_show) + gajim.interface.roster.setup_and_draw_roster() diff --git a/server_status_icons/vkontakte/16x16/away.png b/server_status_icons/vkontakte/16x16/away.png new file mode 100644 index 0000000..df98921 Binary files /dev/null and b/server_status_icons/vkontakte/16x16/away.png differ diff --git a/server_status_icons/vkontakte/16x16/chat.png b/server_status_icons/vkontakte/16x16/chat.png new file mode 100644 index 0000000..933d210 Binary files /dev/null and b/server_status_icons/vkontakte/16x16/chat.png differ diff --git a/server_status_icons/vkontakte/16x16/dnd.png b/server_status_icons/vkontakte/16x16/dnd.png new file mode 100644 index 0000000..288af5a Binary files /dev/null and b/server_status_icons/vkontakte/16x16/dnd.png differ diff --git a/server_status_icons/vkontakte/16x16/icon.def.xml b/server_status_icons/vkontakte/16x16/icon.def.xml new file mode 100644 index 0000000..f50090e --- /dev/null +++ b/server_status_icons/vkontakte/16x16/icon.def.xml @@ -0,0 +1,53 @@ + + + 1.0 + Vkontakte + Vkontakte Iconset for Vacuum-IM + 2010-05-24 + Artem Rogudeev / [AKI]`Rodent + + + online + online.png + + + + offline + offline.png + + + + away + away.png + + + + xa + xa.png + + + + dnd + dnd.png + + + + invisible + invisible.png + + + + chat + chatty.png + + + + ask + ask.png + + + + noauth + noauth.png + + diff --git a/server_status_icons/vkontakte/16x16/invisible.png b/server_status_icons/vkontakte/16x16/invisible.png new file mode 100644 index 0000000..0cb6486 Binary files /dev/null and b/server_status_icons/vkontakte/16x16/invisible.png differ diff --git a/server_status_icons/vkontakte/16x16/offline.png b/server_status_icons/vkontakte/16x16/offline.png new file mode 100644 index 0000000..13964a4 Binary files /dev/null and b/server_status_icons/vkontakte/16x16/offline.png differ diff --git a/server_status_icons/vkontakte/16x16/online.png b/server_status_icons/vkontakte/16x16/online.png new file mode 100644 index 0000000..cd3e388 Binary files /dev/null and b/server_status_icons/vkontakte/16x16/online.png differ diff --git a/server_status_icons/vkontakte/16x16/xa.png b/server_status_icons/vkontakte/16x16/xa.png new file mode 100644 index 0000000..cc2557f Binary files /dev/null and b/server_status_icons/vkontakte/16x16/xa.png differ diff --git a/server_status_icons/yaonline/16x16/away.png b/server_status_icons/yaonline/16x16/away.png new file mode 100644 index 0000000..5b604a9 Binary files /dev/null and b/server_status_icons/yaonline/16x16/away.png differ diff --git a/server_status_icons/yaonline/16x16/chat.png b/server_status_icons/yaonline/16x16/chat.png new file mode 100644 index 0000000..c9b4a9e Binary files /dev/null and b/server_status_icons/yaonline/16x16/chat.png differ diff --git a/server_status_icons/yaonline/16x16/dnd.png b/server_status_icons/yaonline/16x16/dnd.png new file mode 100644 index 0000000..8e11a2b Binary files /dev/null and b/server_status_icons/yaonline/16x16/dnd.png differ diff --git a/server_status_icons/yaonline/16x16/icon.def.xml b/server_status_icons/yaonline/16x16/icon.def.xml new file mode 100644 index 0000000..fda7e60 --- /dev/null +++ b/server_status_icons/yaonline/16x16/icon.def.xml @@ -0,0 +1,53 @@ + + + 1.0 + Ya.Online + Ya.Online Iconset for Vacuum-IM + 2010-09-04 + Artem Rogudeev / [AKI]`Rodent + + + online + online.png + + + + offline + offline.png + + + + away + away.png + + + + xa + xa.png + + + + dnd + dnd.png + + + + invisible + invisible.png + + + + chat + chatty.png + + + + ask + ask.png + + + + noauth + noauth.png + + diff --git a/server_status_icons/yaonline/16x16/invisible.png b/server_status_icons/yaonline/16x16/invisible.png new file mode 100644 index 0000000..a52b11f Binary files /dev/null and b/server_status_icons/yaonline/16x16/invisible.png differ diff --git a/server_status_icons/yaonline/16x16/offline.png b/server_status_icons/yaonline/16x16/offline.png new file mode 100644 index 0000000..b3519c8 Binary files /dev/null and b/server_status_icons/yaonline/16x16/offline.png differ diff --git a/server_status_icons/yaonline/16x16/online.png b/server_status_icons/yaonline/16x16/online.png new file mode 100644 index 0000000..c0c2d03 Binary files /dev/null and b/server_status_icons/yaonline/16x16/online.png differ diff --git a/server_status_icons/yaonline/16x16/xa.png b/server_status_icons/yaonline/16x16/xa.png new file mode 100644 index 0000000..b6221f9 Binary files /dev/null and b/server_status_icons/yaonline/16x16/xa.png differ