move handler to specific functions
somedays read_queue would have to be a common share code and thus no specific plugin code could be call from there. (untested: not able to compile C module trayicon)
This commit is contained in:
parent
768e2d7953
commit
5b7b9c3075
|
@ -1428,145 +1428,197 @@ class plugin:
|
||||||
else:
|
else:
|
||||||
#Save messages
|
#Save messages
|
||||||
temp_q.put(ev)
|
temp_q.put(ev)
|
||||||
|
|
||||||
|
def handle_event_roster(self, array, account):
|
||||||
|
self.roster.mklists(array, account)
|
||||||
|
self.roster.draw_roster()
|
||||||
|
|
||||||
|
def handle_event_warning(self, msg):
|
||||||
|
#('ROSTER', account, array)
|
||||||
|
warning_Window(msg)
|
||||||
|
|
||||||
|
def handle_event_status(self, account, status):
|
||||||
|
#('STATUS', account, status)
|
||||||
|
self.roster.on_status_changed(account, status)
|
||||||
|
|
||||||
|
def handle_event_notify(self, account, array):
|
||||||
|
#('NOTIFY', account, (jid, status, message, resource, priority))
|
||||||
|
jid = string.split(array[0], '/')[0]
|
||||||
|
resource = array[3]
|
||||||
|
if not resource:
|
||||||
|
resource = ''
|
||||||
|
priority = array[4]
|
||||||
|
if string.find(jid, "@") <= 0:
|
||||||
|
#It must be an agent
|
||||||
|
ji = string.replace(jid, '@', '')
|
||||||
|
else:
|
||||||
|
ji = jid
|
||||||
|
#Update user
|
||||||
|
if self.roster.contacts[account].has_key(ji):
|
||||||
|
luser = self.roster.contacts[account][ji]
|
||||||
|
user1 = None
|
||||||
|
resources = []
|
||||||
|
for u in luser:
|
||||||
|
resources.append(u.resource)
|
||||||
|
if u.resource == resource:
|
||||||
|
user1 = u
|
||||||
|
break
|
||||||
|
if not user1:
|
||||||
|
user1 = self.roster.contacts[account][ji][0]
|
||||||
|
if resources != [''] and (len(luser) != 1 or
|
||||||
|
luser[0].show != 'offline'):
|
||||||
|
user1 = user(user1.jid, user1.name, user1.groups, \
|
||||||
|
user1.show, user1.status, user1.sub, user1.resource, \
|
||||||
|
user1.priority)
|
||||||
|
luser.append(user1)
|
||||||
|
user1.resource = resource
|
||||||
|
user1.show = array[1]
|
||||||
|
user1.status = array[2]
|
||||||
|
user1.priority = priority
|
||||||
|
if string.find(jid, "@") <= 0:
|
||||||
|
#It must be an agent
|
||||||
|
if not self.roster.contacts[account].has_key(ji):
|
||||||
|
user1 = user(ji, ji, ['Agents'], array[1], \
|
||||||
|
array[2], 'from', resource, 0)
|
||||||
|
self.roster.contacts[account][ji] = [user1]
|
||||||
|
self.roster.add_user_to_roster(ji, account)
|
||||||
|
else:
|
||||||
|
#Update existing iter
|
||||||
|
self.roster.redraw_jid(ji, account)
|
||||||
|
elif self.roster.contacts[account].has_key(ji):
|
||||||
|
#It isn't an agent
|
||||||
|
self.roster.chg_user_status(user1, array[1], array[2], account)
|
||||||
|
def handle_event_msg(self, account, array):
|
||||||
|
#('MSG', account, (user, msg))
|
||||||
|
jid = string.split(array[0], '/')[0]
|
||||||
|
if string.find(jid, "@") <= 0:
|
||||||
|
jid = string.replace(jid, '@', '')
|
||||||
|
self.roster.on_message(jid, array[1], account)
|
||||||
|
|
||||||
|
def handle_event_subscribe(self, account, array):
|
||||||
|
#('SUBSCRIBE', account, (jid, text))
|
||||||
|
authorize_Window(self, array[0], array[1], account)
|
||||||
|
|
||||||
|
def handle_event_subscribed(self, account, array):
|
||||||
|
#('SUBSCRIBED', account, (jid, nom, resource))
|
||||||
|
jid = array[0]
|
||||||
|
if self.roster.contacts[account].has_key(jid):
|
||||||
|
u = self.roster.contacts[account][jid][0]
|
||||||
|
u.name = array[1]
|
||||||
|
u.resource = array[2]
|
||||||
|
self.roster.redraw_jid(u.jid, account)
|
||||||
|
else:
|
||||||
|
user1 = user(jid, jid, ['general'], 'online', \
|
||||||
|
'online', 'to', array[2], 0)
|
||||||
|
self.roster.contacts[account][jid] = [user1]
|
||||||
|
self.roster.add_user_to_roster(jid, account)
|
||||||
|
warning_Window(_("You are now authorized by %s") % jid)
|
||||||
|
|
||||||
|
|
||||||
|
def handle_event_unsubscribed(self, account, jid):
|
||||||
|
#TODO: change icon
|
||||||
|
warning_Window(_("You are now unsubscribed by %s") % jid)
|
||||||
|
|
||||||
|
def handle_event_agents(self, account, para):
|
||||||
|
#('AGENTS', account, agents)
|
||||||
|
if self.windows[account].has_key('browser'):
|
||||||
|
self.windows[account]['browser'].agents(para)
|
||||||
|
|
||||||
|
def handle_event_agent_info(self, account, array):
|
||||||
|
#('AGENTS_INFO', account, (agent, infos))
|
||||||
|
self.handle_event_agent_info(account, array)
|
||||||
|
if not array[1].has_key('instructions'):
|
||||||
|
warning_Window(_("error contacting %s") % array[0])
|
||||||
|
else:
|
||||||
|
agentRegistration_Window(array[0], array[1], self, account)
|
||||||
|
|
||||||
|
def handle_event_acc_ok(self, account, array):
|
||||||
|
#('ACC_OK', account, (hostname, login, pasword, name, ressource, prio,
|
||||||
|
#use_proxy, proxyhost, proxyport))
|
||||||
|
self.accounts[array[3]] = {'name': array[1], \
|
||||||
|
'hostname': array[0],\
|
||||||
|
'password': array[2],\
|
||||||
|
'ressource': array[4],\
|
||||||
|
'priority': array[5],\
|
||||||
|
'use_proxy': array[6],\
|
||||||
|
'proxyhost': array[7], \
|
||||||
|
'proxyport': array[8]}
|
||||||
|
self.send('CONFIG', None, ('accounts', self.accounts))
|
||||||
|
self.windows[name] = {'infos': {}, 'chats': {}}
|
||||||
|
self.queues[name] = {}
|
||||||
|
self.connected[name] = 0
|
||||||
|
self.roster.groups[name] = {}
|
||||||
|
self.roster.contacts[name] = {}
|
||||||
|
if self.windows.has_key('accounts'):
|
||||||
|
self.windows['accounts'].init_accounts()
|
||||||
|
|
||||||
|
def handle_event_quit(self, p1, p2):
|
||||||
|
self.roster.on_quit(self)
|
||||||
|
|
||||||
|
def handle_event_myvcard(self, p1, p2):
|
||||||
|
nick = ''
|
||||||
|
if p2.has_key('NICKNAME'):
|
||||||
|
nick = p2['NICKNAME']
|
||||||
|
if nick == '':
|
||||||
|
nick = self.accounts[p1]['name']
|
||||||
|
self.nicks[p1] = nick
|
||||||
|
|
||||||
|
def handle_event_vcard(self, p1, p2):
|
||||||
|
if self.windows[p1]['infos'].has_key(p2['jid']):
|
||||||
|
self.windows[p1]['infos'][p2['jid']].set_values(p2)
|
||||||
|
|
||||||
|
def handle_event_log_nb_line(self, account, array):
|
||||||
|
#('LOG_NB_LINE', account, (jid, nb_line))
|
||||||
|
if self.windows['logs'].has_key(array[0]):
|
||||||
|
self.windows['logs'][array[0]].set_nb_line(array[1])
|
||||||
|
begin = 0
|
||||||
|
if array[1] > 50:
|
||||||
|
begin = array[1] - 50
|
||||||
|
self.send('LOG_GET_RANGE', None, (array[0], begin, array[1]))
|
||||||
|
|
||||||
|
def handle_event_log_line(self, account, array):
|
||||||
|
#('LOG_LINE', account, (jid, num_line, date, type, data))
|
||||||
|
# if type = 'recv' or 'sent' data = [msg]
|
||||||
|
# else type = jid and data = [status, away_msg]
|
||||||
|
if self.windows['logs'].has_key(array[0]):
|
||||||
|
self.windows['logs'][array[0]].new_line(array[1:])
|
||||||
|
|
||||||
def read_queue(self):
|
def read_queue(self):
|
||||||
"""Read queue from the core and execute commands from it"""
|
"""Read queue from the core and execute commands from it"""
|
||||||
model = self.roster.tree.get_model()
|
|
||||||
while self.queueIN.empty() == 0:
|
while self.queueIN.empty() == 0:
|
||||||
ev = self.queueIN.get()
|
ev = self.queueIN.get()
|
||||||
#('ROSTER', account, array)
|
|
||||||
if ev[0] == 'ROSTER':
|
if ev[0] == 'ROSTER':
|
||||||
self.roster.mklists(ev[2], ev[1])
|
self.handle_event_roster(ev[2], ev[1])
|
||||||
self.roster.draw_roster()
|
|
||||||
elif ev[0] == 'WARNING':
|
elif ev[0] == 'WARNING':
|
||||||
warning_Window(ev[2])
|
self.handle_event_warning(ev[2])
|
||||||
#('STATUS', account, status)
|
|
||||||
elif ev[0] == 'STATUS':
|
elif ev[0] == 'STATUS':
|
||||||
self.roster.on_status_changed(ev[1], ev[2])
|
self.handle_event_status(ev[1], ev[2])
|
||||||
#('NOTIFY', account, (jid, status, message, resource, priority))
|
|
||||||
elif ev[0] == 'NOTIFY':
|
elif ev[0] == 'NOTIFY':
|
||||||
jid = string.split(ev[2][0], '/')[0]
|
self.handle_event_notify(ev[1], ev[2])
|
||||||
resource = ev[2][3]
|
|
||||||
if not resource:
|
|
||||||
resource = ''
|
|
||||||
priority = ev[2][4]
|
|
||||||
if string.find(jid, "@") <= 0:
|
|
||||||
#It must be an agent
|
|
||||||
ji = string.replace(jid, '@', '')
|
|
||||||
else:
|
|
||||||
ji = jid
|
|
||||||
#Update user
|
|
||||||
if self.roster.contacts[ev[1]].has_key(ji):
|
|
||||||
luser = self.roster.contacts[ev[1]][ji]
|
|
||||||
user1 = None
|
|
||||||
resources = []
|
|
||||||
for u in luser:
|
|
||||||
resources.append(u.resource)
|
|
||||||
if u.resource == resource:
|
|
||||||
user1 = u
|
|
||||||
break
|
|
||||||
if not user1:
|
|
||||||
user1 = self.roster.contacts[ev[1]][ji][0]
|
|
||||||
if resources != [''] and (len(luser) != 1 or
|
|
||||||
luser[0].show != 'offline'):
|
|
||||||
user1 = user(user1.jid, user1.name, user1.groups, \
|
|
||||||
user1.show, user1.status, user1.sub, user1.resource, \
|
|
||||||
user1.priority)
|
|
||||||
luser.append(user1)
|
|
||||||
user1.resource = resource
|
|
||||||
user1.show = ev[2][1]
|
|
||||||
user1.status = ev[2][2]
|
|
||||||
user1.priority = priority
|
|
||||||
if string.find(jid, "@") <= 0:
|
|
||||||
#It must be an agent
|
|
||||||
if not self.roster.contacts[ev[1]].has_key(ji):
|
|
||||||
user1 = user(ji, ji, ['Agents'], ev[2][1], \
|
|
||||||
ev[2][2], 'from', resource, 0)
|
|
||||||
self.roster.contacts[ev[1]][ji] = [user1]
|
|
||||||
self.roster.add_user_to_roster(ji, ev[1])
|
|
||||||
else:
|
|
||||||
#Update existing iter
|
|
||||||
self.roster.redraw_jid(ji, ev[1])
|
|
||||||
elif self.roster.contacts[ev[1]].has_key(ji):
|
|
||||||
#It isn't an agent
|
|
||||||
self.roster.chg_user_status(user1, ev[2][1], ev[2][2], ev[1])
|
|
||||||
#('MSG', account, (user, msg))
|
|
||||||
elif ev[0] == 'MSG':
|
elif ev[0] == 'MSG':
|
||||||
jid = string.split(ev[2][0], '/')[0]
|
self.handle_event_msg(ev[1], ev[2])
|
||||||
if string.find(jid, "@") <= 0:
|
|
||||||
jid = string.replace(jid, '@', '')
|
|
||||||
self.roster.on_message(jid, ev[2][1], ev[1])
|
|
||||||
#('SUBSCRIBE', account, (jid, text))
|
|
||||||
elif ev[0] == 'SUBSCRIBE':
|
elif ev[0] == 'SUBSCRIBE':
|
||||||
authorize_Window(self, ev[2][0], ev[2][1], ev[1])
|
self.handle_event_subscribe(ev[1], ev[2])
|
||||||
#('SUBSCRIBED', account, (jid, nom, resource))
|
|
||||||
elif ev[0] == 'SUBSCRIBED':
|
elif ev[0] == 'SUBSCRIBED':
|
||||||
jid = ev[2][0]
|
self.handle_event_subscribed(ev[1], ev[2])
|
||||||
if self.roster.contacts[ev[1]].has_key(jid):
|
|
||||||
u = self.roster.contacts[ev[1]][jid][0]
|
|
||||||
u.name = ev[2][1]
|
|
||||||
u.resource = ev[2][2]
|
|
||||||
self.roster.redraw_jid(u.jid, ev[1])
|
|
||||||
else:
|
|
||||||
user1 = user(jid, jid, ['general'], 'online', \
|
|
||||||
'online', 'to', ev[2][2], 0)
|
|
||||||
self.roster.contacts[ev[1]][jid] = [user1]
|
|
||||||
self.roster.add_user_to_roster(jid, ev[1])
|
|
||||||
warning_Window(_("You are now authorized by %s") % jid)
|
|
||||||
elif ev[0] == 'UNSUBSCRIBED':
|
elif ev[0] == 'UNSUBSCRIBED':
|
||||||
warning_Window(_("You are now unsubscribed by %s") % ev[2])
|
self.handle_event_unsubscribed(ev[1], ev[2])
|
||||||
#TODO: change icon
|
|
||||||
#('AGENTS', account, agents)
|
|
||||||
elif ev[0] == 'AGENTS':
|
elif ev[0] == 'AGENTS':
|
||||||
if self.windows[ev[1]].has_key('browser'):
|
self.handle_event_agents(ev[1], ev[2])
|
||||||
self.windows[ev[1]]['browser'].agents(ev[2])
|
|
||||||
#('AGENTS_INFO', account, (agent, infos))
|
|
||||||
elif ev[0] == 'AGENT_INFO':
|
elif ev[0] == 'AGENT_INFO':
|
||||||
if not ev[2][1].has_key('instructions'):
|
self.handle_event_agent_info(ev[1], ev[2])
|
||||||
warning_Window(_("error contacting %s") % ev[2][0])
|
|
||||||
else:
|
|
||||||
agentRegistration_Window(ev[2][0], ev[2][1], self, ev[1])
|
|
||||||
#('ACC_OK', account, (hostname, login, pasword, name, ressource, prio,
|
|
||||||
#use_proxy, proxyhost, proxyport))
|
|
||||||
elif ev[0] == 'ACC_OK':
|
elif ev[0] == 'ACC_OK':
|
||||||
self.accounts[ev[2][3]] = {'name': ev[2][1], 'hostname': ev[2][0],\
|
self.handle_event_acc_ok(ev[1], ev[2])
|
||||||
'password': ev[2][2], 'ressource': ev[2][4], 'priority': \
|
|
||||||
ev[2][5], 'use_proxy': ev[2][6], 'proxyhost': ev[2][7], \
|
|
||||||
'proxyport': ev[2][8]}
|
|
||||||
self.send('CONFIG', None, ('accounts', self.accounts))
|
|
||||||
self.windows[name] = {'infos': {}, 'chats': {}}
|
|
||||||
self.queues[name] = {}
|
|
||||||
self.connected[name] = 0
|
|
||||||
self.roster.groups[name] = {}
|
|
||||||
self.roster.contacts[name] = {}
|
|
||||||
if self.windows.has_key('accounts'):
|
|
||||||
self.windows['accounts'].init_accounts()
|
|
||||||
elif ev[0] == 'QUIT':
|
elif ev[0] == 'QUIT':
|
||||||
self.roster.on_quit(self)
|
self.handle_event_quit(ev[1], ev[2])
|
||||||
elif ev[0] == 'MYVCARD':
|
elif ev[0] == 'MYVCARD':
|
||||||
nick = ''
|
self.handle_event_myvcard(ev[1], ev[2])
|
||||||
if ev[2].has_key('NICKNAME'):
|
|
||||||
nick = ev[2]['NICKNAME']
|
|
||||||
if nick == '':
|
|
||||||
nick = self.accounts[ev[1]]['name']
|
|
||||||
self.nicks[ev[1]] = nick
|
|
||||||
elif ev[0] == 'VCARD':
|
elif ev[0] == 'VCARD':
|
||||||
if self.windows[ev[1]]['infos'].has_key(ev[2]['jid']):
|
self.handle_event_vcard(ev[1], ev[2])
|
||||||
self.windows[ev[1]]['infos'][ev[2]['jid']].set_values(ev[2])
|
|
||||||
#('LOG_NB_LINE', account, (jid, nb_line))
|
|
||||||
elif ev[0] == 'LOG_NB_LINE':
|
elif ev[0] == 'LOG_NB_LINE':
|
||||||
if self.windows['logs'].has_key(ev[2][0]):
|
self.handle_event_log_nb_line(ev[1], ev[2])
|
||||||
self.windows['logs'][ev[2][0]].set_nb_line(ev[2][1])
|
|
||||||
begin = 0
|
|
||||||
if ev[2][1] > 50:
|
|
||||||
begin = ev[2][1] - 50
|
|
||||||
self.send('LOG_GET_RANGE', None, (ev[2][0], begin, ev[2][1]))
|
|
||||||
#('LOG_LINE', account, (jid, num_line, date, type, data))
|
|
||||||
# if type = 'recv' or 'sent' data = [msg]
|
|
||||||
# else type = jid and data = [status, away_msg]
|
|
||||||
elif ev[0] == 'LOG_LINE':
|
elif ev[0] == 'LOG_LINE':
|
||||||
if self.windows['logs'].has_key(ev[2][0]):
|
self.handle_event_log_line(ev[1], ev[2])
|
||||||
self.windows['logs'][ev[2][0]].new_line(ev[2][1:])
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
def read_sleepy(self):
|
def read_sleepy(self):
|
||||||
|
|
Loading…
Reference in New Issue