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
+
+
+
+
+ offline
+
+
+
+
+ away
+
+
+
+
+ xa
+
+
+
+
+ dnd
+
+
+
+
+ invisible
+
+
+
+
+ chat
+
+
+
+
+ ask
+
+
+
+
+ noauth
+
+
+
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
+
+
+
+
+ offline
+
+
+
+
+ away
+
+
+
+
+ xa
+
+
+
+
+ dnd
+
+
+
+
+ invisible
+
+
+
+
+ chat
+
+
+
+
+ ask
+
+
+
+
+ noauth
+
+
+
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
+
+
+
+
+ offline
+
+
+
+
+ away
+
+
+
+
+ xa
+
+
+
+
+ dnd
+
+
+
+
+ invisible
+
+
+
+
+ chat
+
+
+
+
+ ask
+
+
+
+
+ noauth
+
+
+
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
+
+
+
+
+ offline
+
+
+
+
+ away
+
+
+
+
+ xa
+
+
+
+
+ dnd
+
+
+
+
+ invisible
+
+
+
+
+ chat
+
+
+
+
+ ask
+
+
+
+
+ noauth
+
+
+
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
+
+
+
+
+ offline
+
+
+
+
+ away
+
+
+
+
+ xa
+
+
+
+
+ dnd
+
+
+
+
+ invisible
+
+
+
+
+ chat
+
+
+
+
+ ask
+
+
+
+
+ noauth
+
+
+
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