Files
gajim-plugins/chatstate/chatstate.py
2011-09-03 09:59:36 +03:00

81 lines
3.0 KiB
Python

# -*- 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 = '<span foreground="%s">%s</span>' % (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<span size="small" style="italic" ' \
'foreground="%s">%s</span>' % (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