# -*- coding: utf-8 -*- ## import gobject from plugins import GajimPlugin from plugins.helpers import log_calls from common import ged from common import gajim from common import helpers import gtkgui_helpers class ChatstatePlugin(GajimPlugin): @log_calls('ChatstatePlugin') def init(self): self.description = _('Chat State Notifications in roster.' 'Font color of the contact varies depending on the chat state.\n' 'The plugin does not work if you use custom font color for contacts in roster.\n' 'http://trac.gajim.org/ticket/3628.\nhttp://xmpp.org/extensions/xep-0085.html') self.config_dialog = None # ChatstatePluginConfigDialog(self) self.events_handlers = {'chatstate-received': (ged.GUI2, self.chatstate_received), } self.active = None def chatstate_received(self, obj): if not self.active: return contact = gajim.contacts.get_contact_from_full_jid(obj.conn.name, obj.fjid) if not contact: return chatstate = obj.chatstate if chatstate not in self.chatstates.keys(): return self.model = gajim.interface.roster.model child_iters = gajim.interface.roster._get_contact_iter(obj.jid, obj.conn.name, contact, self.model) for child_iter in child_iters: name = gobject.markup_escape_text(contact.get_shown_name()) if chatstate != 'gone': color = self.chatstates[chatstate] name = '%s' % (color, name) if contact.status and gajim.config.get( 'show_status_msgs_in_roster'): status = contact.status.strip() if status != '': status = helpers.reduce_chars_newlines(status, max_lines=1) name += '\n%s' % (self.status_color, gobject.markup_escape_text(status)) self.model[child_iter][1] = name @log_calls('ChatstatePlugin') def activate(self): color = gtkgui_helpers.get_fade_color(gajim.interface.roster.tree, False, False) self.status_color = '#%04x%04x%04x' % (color.red, color.green, color.blue) theme = gajim.config.get('roster_theme') self.chatstates = {'active': gajim.config.get('inmsgcolor'), 'composing': gajim.config.get_per('themes', theme, 'state_composing_color'), 'inactive': gajim.config.get_per('themes', theme, 'state_inactive_color'), 'paused': gajim.config.get_per('themes', theme, 'state_paused_color'), 'gone': None, } self.active = True @log_calls('ChatstatePlugin') def deactivate(self): self.active = False