many improvement in roster management
TODO: write name and groups in roster
This commit is contained in:
parent
26553b576a
commit
16d6b489e8
|
@ -56,7 +56,7 @@ class GajimHub:
|
||||||
""" Sends an event to registered plugins
|
""" Sends an event to registered plugins
|
||||||
NOTIFY : ('NOTIFY', (user, status, message))
|
NOTIFY : ('NOTIFY', (user, status, message))
|
||||||
MSG : ('MSG', (user, msg))
|
MSG : ('MSG', (user, msg))
|
||||||
ROSTER : ('ROSTER', {jid:{'Online':_, 'nom':_, 'server':_, 'resource':_, 'group':_, 'status':_, 'show':_} ,jid:{}})
|
ROSTER : ('ROSTER', {jid:{'status':_, 'name':_, 'show':_, 'groups':[], 'online':_, 'ask':_, 'sub':_} ,jid:{}})
|
||||||
SUBSCRIBED : ('SUBSCRIBED', {'jid':_, 'nom':_, 'server':_, 'resource':_, 'status':_, 'show':_})"""
|
SUBSCRIBED : ('SUBSCRIBED', {'jid':_, 'nom':_, 'server':_, 'resource':_, 'status':_, 'show':_})"""
|
||||||
|
|
||||||
if self.events.has_key(event):
|
if self.events.has_key(event):
|
||||||
|
|
35
core/core.py
35
core/core.py
|
@ -69,8 +69,7 @@ class GajimCore:
|
||||||
#plein de trucs a faire
|
#plein de trucs a faire
|
||||||
jid = prs.getFrom()
|
jid = prs.getFrom()
|
||||||
self.hub.sendPlugin('SUBSCRIBED', {'jid':jid.getBasic(), \
|
self.hub.sendPlugin('SUBSCRIBED', {'jid':jid.getBasic(), \
|
||||||
'nom':jid.getNode(), 'server':jid.getDomain(), \
|
'nom':jid.getNode()})
|
||||||
'resource':jid.getResource()})
|
|
||||||
log.debug("we are now subscribed to %s" % who)
|
log.debug("we are now subscribed to %s" % who)
|
||||||
elif type == 'unsubscribe':
|
elif type == 'unsubscribe':
|
||||||
log.debug("unsubscribe request from %s" % who)
|
log.debug("unsubscribe request from %s" % who)
|
||||||
|
@ -103,19 +102,25 @@ class GajimCore:
|
||||||
self.cfgParser.Profile_ressource):
|
self.cfgParser.Profile_ressource):
|
||||||
|
|
||||||
self.con.requestRoster()
|
self.con.requestRoster()
|
||||||
roster = self.con.getRoster()
|
roster = self.con.getRoster().getRaw()
|
||||||
tab_roster = {}
|
for jid in roster.keys():
|
||||||
for jid in roster.getJIDs():
|
if not roster[jid]['show']:
|
||||||
if roster.getShow(jid):
|
roster[jid]['show'] = roster[jid]['online']
|
||||||
show = roster.getShow(jid)
|
if not roster[jid]['name']:
|
||||||
else:
|
roster[jid]['name'] = ''
|
||||||
show = roster.getOnline(jid)
|
self.hub.sendPlugin('ROSTER', roster)
|
||||||
tab_roster[jid.getBasic()] = \
|
# tab_roster = {}
|
||||||
{"Online":roster.getOnline(jid), "nom":jid.getNode(), \
|
# for jid in roster.getJIDs():
|
||||||
"server":jid.getDomain(), "resource":jid.getResource(), \
|
# if roster.getShow(jid):
|
||||||
"group":'general', "status":roster.getStatus(jid), \
|
# show = roster.getShow(jid)
|
||||||
"show":show}
|
# else:
|
||||||
self.hub.sendPlugin('ROSTER', tab_roster)
|
# show = roster.getOnline(jid)
|
||||||
|
# tab_roster[jid.getBasic()] = \
|
||||||
|
# {"Online":roster.getOnline(jid), "nom":jid.getNode(), \
|
||||||
|
# "server":jid.getDomain(), "resource":jid.getResource(), \
|
||||||
|
# "group":'general', "status":roster.getStatus(jid), \
|
||||||
|
# "show":show}
|
||||||
|
# self.hub.sendPlugin('ROSTER', tab_roster)
|
||||||
self.con.sendInitPresence()
|
self.con.sendInitPresence()
|
||||||
self.connected = 1
|
self.connected = 1
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
|
||||||
<child internal-child="image">
|
<child internal-child="image">
|
||||||
<widget class="GtkImage" id="image51">
|
<widget class="GtkImage" id="image60">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="stock">gtk-convert</property>
|
<property name="stock">gtk-convert</property>
|
||||||
<property name="icon_size">1</property>
|
<property name="icon_size">1</property>
|
||||||
|
@ -55,23 +55,35 @@
|
||||||
<widget class="GtkMenu" id="gajim_menu_menu">
|
<widget class="GtkMenu" id="gajim_menu_menu">
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkMenuItem" id="preferences">
|
<widget class="GtkImageMenuItem" id="preferences">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="label" translatable="yes">gtk-preferences</property>
|
<property name="label" translatable="yes">_Preferences</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<signal name="activate" handler="on_preferences_activate" last_modification_time="Wed, 22 Oct 2003 21:18:29 GMT"/>
|
<signal name="activate" handler="on_preferences_activate" last_modification_time="Wed, 22 Oct 2003 21:18:29 GMT"/>
|
||||||
|
|
||||||
|
<child internal-child="image">
|
||||||
|
<widget class="GtkImage" id="image61">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-preferences</property>
|
||||||
|
<property name="icon_size">1</property>
|
||||||
|
<property name="xalign">0.5</property>
|
||||||
|
<property name="yalign">0.5</property>
|
||||||
|
<property name="xpad">0</property>
|
||||||
|
<property name="ypad">0</property>
|
||||||
|
</widget>
|
||||||
|
</child>
|
||||||
</widget>
|
</widget>
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkImageMenuItem" id="accounts">
|
<widget class="GtkImageMenuItem" id="accounts">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="label" translatable="yes">Accounts</property>
|
<property name="label" translatable="yes">A_ccounts</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<signal name="activate" handler="on_accounts_activate" last_modification_time="Wed, 22 Oct 2003 21:18:21 GMT"/>
|
<signal name="activate" handler="on_accounts_activate" last_modification_time="Wed, 22 Oct 2003 21:18:21 GMT"/>
|
||||||
|
|
||||||
<child internal-child="image">
|
<child internal-child="image">
|
||||||
<widget class="GtkImage" id="image52">
|
<widget class="GtkImage" id="image62">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="stock">gtk-select-color</property>
|
<property name="stock">gtk-select-color</property>
|
||||||
<property name="icon_size">1</property>
|
<property name="icon_size">1</property>
|
||||||
|
@ -98,7 +110,7 @@
|
||||||
<signal name="activate" handler="on_add_activate" last_modification_time="Sun, 26 Oct 2003 17:26:34 GMT"/>
|
<signal name="activate" handler="on_add_activate" last_modification_time="Sun, 26 Oct 2003 17:26:34 GMT"/>
|
||||||
|
|
||||||
<child internal-child="image">
|
<child internal-child="image">
|
||||||
<widget class="GtkImage" id="image53">
|
<widget class="GtkImage" id="image63">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="stock">gtk-add</property>
|
<property name="stock">gtk-add</property>
|
||||||
<property name="icon_size">1</property>
|
<property name="icon_size">1</property>
|
||||||
|
@ -125,7 +137,7 @@
|
||||||
<signal name="activate" handler="on_about_activate" last_modification_time="Fri, 03 Oct 2003 12:49:50 GMT"/>
|
<signal name="activate" handler="on_about_activate" last_modification_time="Fri, 03 Oct 2003 12:49:50 GMT"/>
|
||||||
|
|
||||||
<child internal-child="image">
|
<child internal-child="image">
|
||||||
<widget class="GtkImage" id="image54">
|
<widget class="GtkImage" id="image64">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="stock">gtk-help</property>
|
<property name="stock">gtk-help</property>
|
||||||
<property name="icon_size">1</property>
|
<property name="icon_size">1</property>
|
||||||
|
@ -147,7 +159,7 @@
|
||||||
<accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/>
|
<accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/>
|
||||||
|
|
||||||
<child internal-child="image">
|
<child internal-child="image">
|
||||||
<widget class="GtkImage" id="image55">
|
<widget class="GtkImage" id="image65">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="stock">gtk-quit</property>
|
<property name="stock">gtk-quit</property>
|
||||||
<property name="icon_size">1</property>
|
<property name="icon_size">1</property>
|
||||||
|
|
|
@ -30,30 +30,29 @@ CONFPATH = "~/.gajimrc"
|
||||||
class user:
|
class user:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
if len(args) == 0:
|
if len(args) == 0:
|
||||||
|
self.jid = ''
|
||||||
self.name = ''
|
self.name = ''
|
||||||
self.server = ''
|
self.groups = []
|
||||||
self.resource = ''
|
|
||||||
self.group = ''
|
|
||||||
self.show = ''
|
self.show = ''
|
||||||
self.status = ''
|
self.status = ''
|
||||||
|
self.sub == ''
|
||||||
elif len(args) == 6:
|
elif len(args) == 6:
|
||||||
self.name = args[0]
|
self.jid = args[0]
|
||||||
self.server = args[1]
|
self.name = args[1]
|
||||||
self.resource = args[2]
|
self.groups = args[2]
|
||||||
self.group = args[3]
|
self.show = args[3]
|
||||||
self.show = args[4]
|
self.status = args[4]
|
||||||
self.status = args[5]
|
self.sub = args[5]
|
||||||
elif ((len(args)) and (type (args[0]) == type (self)) and
|
# elif ((len(args)) and (type (args[0]) == type (self)) and
|
||||||
(self.__class__ == args[0].__class__)):
|
# (self.__class__ == args[0].__class__)):
|
||||||
self.name = args[0].name
|
# self.name = args[0].name
|
||||||
self.server = args[0].server
|
# self.groups = args[0].groups
|
||||||
self.resource = args[0].resource
|
# self.show = args[0].show
|
||||||
self.group = args[0].group
|
# self.status = args[0].status
|
||||||
self.show = args[0].show
|
# self.sub = args[0].sub
|
||||||
self.status = args[0].status
|
|
||||||
else: raise TypeError, 'bad arguments'
|
else: raise TypeError, 'bad arguments'
|
||||||
# self.jid = self.name + '@' + self.server + '/' + self.resource
|
# self.jid = self.name + '@' + self.server + '/' + self.resource
|
||||||
self.jid = self.name + '@' + self.server
|
# self.jid = self.name + '@' + self.server
|
||||||
|
|
||||||
class add:
|
class add:
|
||||||
def delete_event(self, widget):
|
def delete_event(self, widget):
|
||||||
|
@ -130,6 +129,9 @@ class message:
|
||||||
self.xml = gtk.glade.XML('plugins/gtkgui.glade', 'Chat')
|
self.xml = gtk.glade.XML('plugins/gtkgui.glade', 'Chat')
|
||||||
self.window = self.xml.get_widget('Chat')
|
self.window = self.xml.get_widget('Chat')
|
||||||
self.window.set_title('Chat with ' + user.name)
|
self.window.set_title('Chat with ' + user.name)
|
||||||
|
self.xml.get_widget('label_contact').set_text(user.name + ' <'\
|
||||||
|
+ user.jid + '>')
|
||||||
|
#+ '/' + user.resource + '>')
|
||||||
self.message = self.xml.get_widget('message')
|
self.message = self.xml.get_widget('message')
|
||||||
self.conversation = self.xml.get_widget('conversation')
|
self.conversation = self.xml.get_widget('conversation')
|
||||||
self.convTxtBuffer = self.conversation.get_buffer()
|
self.convTxtBuffer = self.conversation.get_buffer()
|
||||||
|
@ -151,31 +153,24 @@ class roster:
|
||||||
def get_icon_pixbuf(self, stock):
|
def get_icon_pixbuf(self, stock):
|
||||||
return self.tree.render_icon(stock, size = gtk.ICON_SIZE_MENU, detail = None)
|
return self.tree.render_icon(stock, size = gtk.ICON_SIZE_MENU, detail = None)
|
||||||
|
|
||||||
def mkl_group(self):
|
def mkroster(self, tab):
|
||||||
|
""" l_contact = {jid:{'user':_, 'iter':[iter1, ...]] """
|
||||||
|
self.l_contact = {}
|
||||||
""" l_group = {name:iter} """
|
""" l_group = {name:iter} """
|
||||||
self.l_group = {}
|
self.l_group = {}
|
||||||
for d in self.l_contact.values():
|
|
||||||
u=d['user']
|
|
||||||
if not self.l_group.has_key(u.group):
|
|
||||||
iterG = self.treestore.append(None, (self.pixbufs['online'], u.group, 'group'))
|
|
||||||
self.l_group[u.group]=iterG
|
|
||||||
|
|
||||||
def mkroster(self, tab):
|
|
||||||
""" l_contact = {jid:{'user':_, 'iter':_] """
|
|
||||||
self.l_contact = {}
|
|
||||||
for jid in tab.keys():
|
for jid in tab.keys():
|
||||||
user1 = user(tab[jid]['nom'], tab[jid]['server'], tab[jid]['resource'], tab[jid]['group'], tab[jid]["show"], tab[jid]["status"])
|
user1 = user(jid, tab[jid]['name'], tab[jid]['groups'], tab[jid]['show'], tab[jid]['status'], tab[jid]['sub'])
|
||||||
self.l_contact[user1.jid] = {'user': user1, 'iter': None}
|
self.l_contact[user1.jid] = {'user':user1, 'iter':[]}
|
||||||
self.treestore.clear()
|
if user1.groups == []:
|
||||||
self.mkl_group()
|
user1.groups.append('general')
|
||||||
for g in self.l_group.keys():
|
for g in user1.groups:
|
||||||
for d in self.l_contact.values():
|
if not self.l_group.has_key(g):
|
||||||
c=d['user']
|
iterG = self.treestore.append(None, (None, g, 'group'))
|
||||||
if c.group == g:
|
self.l_group[g]=iterG
|
||||||
if c.show != 'offline' or self.showOffline:
|
if user1.show != 'offline' or self.showOffline:
|
||||||
iterU = self.treestore.append(self.l_group[g], (self.pixbufs[c.show], c.name, c.jid))
|
iterU = self.treestore.append(self.l_group[g], (self.pixbufs[user1.show], user1.name, user1.jid))
|
||||||
self.l_contact[c.jid]['iter'] = iterU
|
self.l_contact[user1.jid]['iter'].append(iterU)
|
||||||
|
|
||||||
def update_iter(self, widget, path, iter, data):
|
def update_iter(self, widget, path, iter, data):
|
||||||
jid = self.treestore.get_value(iter, 2)
|
jid = self.treestore.get_value(iter, 2)
|
||||||
if jid == data[0]:
|
if jid == data[0]:
|
||||||
|
@ -191,17 +186,24 @@ class roster:
|
||||||
|
|
||||||
def chg_status(self, jid, show, status):
|
def chg_status(self, jid, show, status):
|
||||||
u = self.l_contact[jid]['user']
|
u = self.l_contact[jid]['user']
|
||||||
self.found = 0
|
if self.l_contact[jid]['iter'] == []:
|
||||||
self.treestore.foreach(self.update_iter, (jid, show))
|
for g in u.groups:
|
||||||
if self.found == 0:
|
if not self.l_group.has_key(g):
|
||||||
if not self.l_group.has_key(u.group):
|
iterG = self.treestore.append(None, (None, g, 'group'))
|
||||||
iterG = self.treestore.append(None, (self.pixbufs['online'], u.group, 'group'))
|
self.l_group[u.group] = iterG
|
||||||
self.l_group[u.group] = iterG
|
iterU = self.treestore.append(self.l_group[g], (self.pixbufs[show], u.name, u.jid))
|
||||||
iterU = self.treestore.append(self.l_group[u.group], (self.pixbufs[show], u.name, u.jid))
|
self.l_contact[u.jid]['iter'].append(iterU)
|
||||||
self.l_contact[u.jid]['iter'] = iterU
|
else:
|
||||||
|
if show == 'offline' and not self.showOffline:
|
||||||
|
self.treestore.remove(iter)
|
||||||
|
else:
|
||||||
|
for i in self.l_contact[jid]['iter']:
|
||||||
|
self.treestore.set_value(i, 0, self.pixbufs[show])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
u.show = show
|
u.show = show
|
||||||
u.status = status
|
u.status = status
|
||||||
return 1
|
|
||||||
|
|
||||||
def mk_menu_c(self, event, iter):
|
def mk_menu_c(self, event, iter):
|
||||||
self.menu_c = gtk.Menu()
|
self.menu_c = gtk.Menu()
|
||||||
|
@ -248,10 +250,11 @@ class roster:
|
||||||
def req_sub(self, jid, txt):
|
def req_sub(self, jid, txt):
|
||||||
self.queueOUT.put(('SUB', (jid, txt)))
|
self.queueOUT.put(('SUB', (jid, txt)))
|
||||||
if not self.l_contact.has_key(jid):
|
if not self.l_contact.has_key(jid):
|
||||||
user1 = user(jid, jid, jid, 'general', 'requested', 'requested')
|
#TODO: sub
|
||||||
|
user1 = user(jid, jid, ['general'], 'requested', 'requested', 'sub')
|
||||||
#TODO: ajouter un grp si necessaire
|
#TODO: ajouter un grp si necessaire
|
||||||
iterU = self.treestore.append(self.l_group['general'], (self.pixbufs['requested'], jid, jid))
|
iterU = self.treestore.append(self.l_group['general'], (self.pixbufs['requested'], jid, jid))
|
||||||
self.l_contact[jid] = {'user':user1, 'iter':iterU}
|
self.l_contact[jid] = {'user':user1, 'iter':[iterU]}
|
||||||
|
|
||||||
def on_status_changed(self, widget):
|
def on_status_changed(self, widget):
|
||||||
self.queueOUT.put(('STATUS',widget.name))
|
self.queueOUT.put(('STATUS',widget.name))
|
||||||
|
@ -275,7 +278,7 @@ class roster:
|
||||||
if self.tab_messages.has_key(jid):
|
if self.tab_messages.has_key(jid):
|
||||||
#NE FONCTIONNE PAS !
|
#NE FONCTIONNE PAS !
|
||||||
self.tab_messages[jid].window.grab_focus()
|
self.tab_messages[jid].window.grab_focus()
|
||||||
else:
|
elif self.l_contact.has_key(jid):
|
||||||
self.tab_messages[jid] = message(self.l_contact[jid]['user'], self)
|
self.tab_messages[jid] = message(self.l_contact[jid]['user'], self)
|
||||||
|
|
||||||
def __init__(self, queueOUT):
|
def __init__(self, queueOUT):
|
||||||
|
@ -308,7 +311,8 @@ class roster:
|
||||||
self.col = gtk.TreeViewColumn()
|
self.col = gtk.TreeViewColumn()
|
||||||
render_pixbuf = gtk.CellRendererPixbuf()
|
render_pixbuf = gtk.CellRendererPixbuf()
|
||||||
self.col.pack_start(render_pixbuf, expand = False)
|
self.col.pack_start(render_pixbuf, expand = False)
|
||||||
self.col.add_attribute(render_pixbuf, 'pixbuf', 0)
|
self.col.add_attribute(render_pixbuf, 'pixbuf-expander-closed', 0)
|
||||||
|
self.col.add_attribute(render_pixbuf, 'pixbuf-expander-open', 0)
|
||||||
render_text = gtk.CellRendererText()
|
render_text = gtk.CellRendererText()
|
||||||
self.col.pack_start(render_text, expand = True)
|
self.col.pack_start(render_text, expand = True)
|
||||||
self.col.add_attribute(render_text, 'text', 1)
|
self.col.add_attribute(render_text, 'text', 1)
|
||||||
|
@ -337,14 +341,14 @@ class plugin:
|
||||||
self.r.chg_status(ev[1][0], ev[1][1], ev[1][2])
|
self.r.chg_status(ev[1][0], ev[1][1], ev[1][2])
|
||||||
elif ev[0] == 'MSG':
|
elif ev[0] == 'MSG':
|
||||||
if not self.r.tab_messages.has_key(ev[1][0]):
|
if not self.r.tab_messages.has_key(ev[1][0]):
|
||||||
|
#FIXME:message d'un inconne
|
||||||
self.r.tab_messages[ev[1][0]] = message(self.r.l_contact[ev[1][0]]['user'], self.r)
|
self.r.tab_messages[ev[1][0]] = message(self.r.l_contact[ev[1][0]]['user'], self.r)
|
||||||
self.r.tab_messages[ev[1][0]].print_conversation(ev[1][1])
|
self.r.tab_messages[ev[1][0]].print_conversation(ev[1][1])
|
||||||
elif ev[0] == 'SUBSCRIBED':
|
elif ev[0] == 'SUBSCRIBED':
|
||||||
u = self.r.l_contact[ev[1]['jid'][0]]
|
u = self.r.l_contact[ev[1]['jid']]['user']
|
||||||
u.name = ev[1]['nom']
|
u.name = ev[1]['nom']
|
||||||
u.server = ev[1]['server']
|
for i in self.r.l_contact[u.jid]['iter']:
|
||||||
u.resource = ev[1]['resource']
|
self.r.treestore.set_value(i, 1, u.name)
|
||||||
self.r.treestore.set_value(self.r.l_contact[u.jid]['iter'], 1, u.name)
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
def __init__(self, quIN, quOUT):
|
def __init__(self, quIN, quOUT):
|
||||||
|
|
Loading…
Reference in New Issue