diff --git a/core/core.py b/core/core.py index de1bd21c6..25422f390 100644 --- a/core/core.py +++ b/core/core.py @@ -163,6 +163,9 @@ class GajimCore: #('UPDUSER', (jid, name, groups)) elif ev[0] == 'UPDUSER': self.con.updateRosterItem(jid=ev[1][0], name=ev[1][1], groups=ev[1][2]) + elif ev[0] == 'REQ_AGENTS': + agents = self.con.requestAgents() + self.hub.sendPlugin('AGENTS', agents) else: log.debug("Unknown Command") elif self.connected == 1: @@ -179,5 +182,6 @@ def start(): gc.hub.register('gtkgui', 'MSG') gc.hub.register('gtkgui', 'SUBSCRIBED') gc.hub.register('gtkgui', 'SUBSCRIBE') + gc.hub.register('gtkgui', 'AGENTS') guiPl.load () gc.mainLoop() diff --git a/plugins/gtkgui.glade b/plugins/gtkgui.glade index a1e954529..5cb3ba720 100644 --- a/plugins/gtkgui.glade +++ b/plugins/gtkgui.glade @@ -40,7 +40,7 @@ True - + True gtk-convert 1 @@ -62,7 +62,7 @@ - + True gtk-preferences 1 @@ -83,7 +83,7 @@ - + True gtk-select-color 1 @@ -96,6 +96,27 @@ + + + True + _Browse agents + True + + + + + True + gtk-find + 1 + 0.5 + 0.5 + 0 + 0 + + + + + True @@ -110,7 +131,7 @@ - + True gtk-add 1 @@ -137,7 +158,7 @@ - + True gtk-help 1 @@ -159,7 +180,7 @@ - + True gtk-quit 1 @@ -1886,4 +1907,208 @@ David Ferlier (david@yazzy.org) + + True + Agents browser + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + 400 + 250 + True + False + + + + True + False + 0 + + + + 5 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_NONE + GTK_CORNER_TOP_LEFT + + + + True + True + True + False + False + True + + + + + 0 + True + True + + + + + + True + + + 3 + False + True + + + + + + True + GTK_BUTTONBOX_SPREAD + 0 + + + + True + True + True + GTK_RELIEF_NORMAL + + + + + True + 0.5 + 0.5 + 0 + 0 + + + + True + False + 2 + + + + True + gtk-refresh + 4 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + _Refresh + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + + + + + + + True + True + True + GTK_RELIEF_NORMAL + + + + + True + 0.5 + 0.5 + 0 + 0 + + + + True + False + 2 + + + + True + gtk-close + 4 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + _Close + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + + + + + + 2 + False + True + + + + + + diff --git a/plugins/gtkgui.py b/plugins/gtkgui.py index 4a3ef90ee..cb7abcb81 100644 --- a/plugins/gtkgui.py +++ b/plugins/gtkgui.py @@ -27,6 +27,7 @@ import gobject import string import common.optparser CONFPATH = "~/.gajimrc" +Wbrowser = 0 class user: def __init__(self, *args): @@ -135,6 +136,44 @@ class authorize: self.xml.signal_connect('on_button_deny_clicked', self.deny) self.xml.signal_connect('on_button_close_clicked', self.delete_event) +class browser: + def delete_event(self, widget): + global Wbrowser + Wbrowser = 0 + self.window.destroy() + + def browse(self): + self.r.queueOUT.put(('REQ_AGENTS', None)) + + def agents(self, agents): + for jid in agents.keys(): + iter = self.model.append() + self.model.set(iter, 0, agents[jid]['name'], 1, jid) + + def on_refresh(self, widget): + self.model.clear() + self.browse() + + def __init__(self, roster): + self.xml = gtk.glade.XML('plugins/gtkgui.glade', 'browser') + self.window = self.xml.get_widget('browser') + self.treeview = self.xml.get_widget('treeview') + self.r = roster + self.model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) + self.treeview.set_model(self.model) + #columns + renderer = gtk.CellRendererText() + renderer.set_data('column', 0) + self.treeview.insert_column_with_attributes(-1, 'Name', renderer, text=0) + renderer = gtk.CellRendererText() + renderer.set_data('column', 1) + self.treeview.insert_column_with_attributes(-1, 'JID', renderer, text=1) + + self.xml.signal_connect('gtk_widget_destroy', self.delete_event) + self.xml.signal_connect('on_refresh_clicked', self.on_refresh) + #TODO: Si connecté + self.browse() + class message: def delete_event(self, widget): del self.roster.tab_messages[self.user.jid] @@ -204,6 +243,7 @@ class roster: self.l_contact = {} """ l_group = {name:iter} """ self.l_group = {} + self.treestore.clear() for jid in tab.keys(): name = tab[jid]['name'] if not name: @@ -378,6 +418,11 @@ class roster: self.l_contact[jid]['user'].name = new_text self.queueOUT.put(('UPDUSER', (jid, new_text, self.l_contact[jid]['user'].groups))) + def on_browse(self, widget): + global Wbrowser + if not Wbrowser: + Wbrowser = browser(self) + def __init__(self, queueOUT): #initialisation des variables # FIXME : handle no file ... @@ -424,6 +469,7 @@ class roster: #signals self.xml.signal_connect('gtk_main_quit', self.on_quit) self.xml.signal_connect('on_accounts_activate', self.on_accounts) + self.xml.signal_connect('on_browse_agents_activate', self.on_browse) self.xml.signal_connect('on_add_activate', self.on_add) self.xml.signal_connect('on_about_activate', self.on_about) self.xml.signal_connect('on_quit_activate', self.on_quit) @@ -434,6 +480,7 @@ class roster: class plugin: def read_queue(self): + global Wbrowser while self.queueIN.empty() == 0: ev = self.queueIN.get() # print ev @@ -454,6 +501,9 @@ class plugin: u.name = ev[1]['nom'] for i in self.r.l_contact[u.jid]['iter']: self.r.treestore.set_value(i, 1, u.name) + elif ev[0] == 'AGENTS': + if Wbrowser: + Wbrowser.agents(ev[1]) return 1 def __init__(self, quIN, quOUT):