some bugfixes

update variables when add / remove / update an account
This commit is contained in:
Yann Leboulanger 2004-03-20 21:58:21 +00:00
parent b2db86b54c
commit 569eee98bf
2 changed files with 79 additions and 29 deletions
plugins/gtkgui

View file

@ -422,6 +422,7 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property> <property name="relief">GTK_RELIEF_NORMAL</property>
<signal name="clicked" handler="on_clear_clicked" last_modification_time="Thu, 18 Mar 2004 19:12:00 GMT"/>
<child> <child>
<widget class="GtkAlignment" id="alignment5"> <widget class="GtkAlignment" id="alignment5">

View file

@ -608,8 +608,20 @@ class accountPreference_Window:
if self.modify: if self.modify:
#if we modify the name of the account #if we modify the name of the account
if name != self.account: if name != self.account:
#update variables
self.plugin.windows[name] = self.plugin.windows[self.account]
self.plugin.queues[name] = self.plugin.queues[self.account]
self.plugin.connected[name] = self.plugin.connected[self.account]
self.plugin.roster.groups[name] = \
self.plugin.roster.groups[self.account]
self.plugin.roster.contacts[name] = \
self.plugin.roster.contacts[self.account]
del self.plugin.windows[self.account]
del self.plugin.queues[self.account]
del self.plugin.connected[self.account]
del self.plugin.roster.groups[self.account]
del self.plugin.roster.contacts[self.account]
del self.plugin.accounts[self.account] del self.plugin.accounts[self.account]
#TODO: update many variables
#if it's a new account #if it's a new account
else: else:
if name in self.plugin.accounts.keys(): if name in self.plugin.accounts.keys():
@ -625,9 +637,17 @@ class accountPreference_Window:
'password': entryPass.get_text(), 'ressource': \ 'password': entryPass.get_text(), 'ressource': \
entryRessource.get_text()} entryRessource.get_text()}
self.plugin.send('CONFIG', None, ('accounts', self.plugin.accounts)) self.plugin.send('CONFIG', None, ('accounts', self.plugin.accounts))
#update variables
self.plugin.windows[name] = {'infos': {}, 'chats': {}}
self.plugin.queues[name] = {}
self.plugin.connected[name] = 0
self.plugin.roster.groups[name] = {}
self.plugin.roster.contacts[name] = {}
#refresh accounts window #refresh accounts window
if self.plugin.windows.has_key('accounts'): if self.plugin.windows.has_key('accounts'):
self.plugin.windows['accounts'].init_accounts() self.plugin.windows['accounts'].init_accounts()
#refresh roster
self.plugin.roster.draw_roster()
widget.get_toplevel().destroy() widget.get_toplevel().destroy()
def on_edit_details_clicked(self, widget): def on_edit_details_clicked(self, widget):
@ -697,7 +717,13 @@ class accounts_Window:
(model, iter) = sel.get_selected() (model, iter) = sel.get_selected()
account = model.get_value(iter, 0) account = model.get_value(iter, 0)
del self.plugin.accounts[account] del self.plugin.accounts[account]
self.plugin.put('CONFIG', None, ('accounts', self.plugin.accounts)) self.plugin.send('CONFIG', None, ('accounts', self.plugin.accounts))
del self.plugin.windows[account]
del self.plugin.queues[account]
del self.plugin.connected[account]
del self.plugin.roster.groups[account]
del self.plugin.roster.contacts[account]
self.plugin.roster.draw_roster()
self.init_accounts() self.init_accounts()
def on_modify_clicked(self, widget): def on_modify_clicked(self, widget):
@ -796,6 +822,10 @@ class authorize_Window:
class agentRegistration_Window: class agentRegistration_Window:
"""Class for agent registration window : """Class for agent registration window :
window that appears when we want to subscribe to an agent""" window that appears when we want to subscribe to an agent"""
def on_cancel(self, widget):
"""When Cancel button is clicked"""
widget.get_toplevel().destroy()
def draw_table(self): def draw_table(self):
"""Draw the table in the window""" """Draw the table in the window"""
nbrow = 0 nbrow = 0
@ -832,7 +862,6 @@ class agentRegistration_Window:
self.xml.get_widget('label').set_text(infos['instructions']) self.xml.get_widget('label').set_text(infos['instructions'])
self.entries = {} self.entries = {}
self.draw_table() self.draw_table()
self.xml.signal_connect('gtk_widget_destroy', self.delete_event)
self.xml.signal_connect('on_cancel_clicked', self.on_cancel) self.xml.signal_connect('on_cancel_clicked', self.on_cancel)
self.xml.signal_connect('on_button_ok_clicked', self.on_ok) self.xml.signal_connect('on_button_ok_clicked', self.on_ok)
@ -841,7 +870,7 @@ class browseAgent_Window:
to know the agents on the selected server""" to know the agents on the selected server"""
def delete_event(self, widget): def delete_event(self, widget):
"""close window""" """close window"""
del self.plugin.windows['browser'] del self.plugin.windows[self.account]['browser']
def on_cancel(self, widget): def on_cancel(self, widget):
"""When Cancel button is clicked""" """When Cancel button is clicked"""
@ -879,7 +908,7 @@ class browseAgent_Window:
self.plugin.send('REQ_AGENT_INFO', self.account, service) self.plugin.send('REQ_AGENT_INFO', self.account, service)
widget.get_toplevel().destroy() widget.get_toplevel().destroy()
def __init__(self, plugin, roster): def __init__(self, plugin, account):
xml = gtk.glade.XML(GTKGUI_GLADE, 'browser') xml = gtk.glade.XML(GTKGUI_GLADE, 'browser')
self.treeview = xml.get_widget('treeview') self.treeview = xml.get_widget('treeview')
self.plugin = plugin self.plugin = plugin
@ -979,9 +1008,10 @@ class message_Window:
self.plugin = plugin self.plugin = plugin
self.account = account self.account = account
self.xml = gtk.glade.XML(GTKGUI_GLADE, 'Chat') self.xml = gtk.glade.XML(GTKGUI_GLADE, 'Chat')
self.window = self.xml.get_widget('Chat')
# hbox = xml.get_widget('hbox1') # hbox = xml.get_widget('hbox1')
# hbox.set_property('resize-mode', 2) # hbox.set_property('resize-mode', 2)
self.xml.get_widget('Chat').set_title('Chat with ' + user.name) self.window.set_title('Chat with ' + user.name)
self.img = self.xml.get_widget('image') self.img = self.xml.get_widget('image')
self.img.set_from_pixbuf(self.plugin.roster.pixbufs[user.show]) self.img.set_from_pixbuf(self.plugin.roster.pixbufs[user.show])
self.xml.get_widget('button_contact').set_label(user.name + ' <'\ self.xml.get_widget('button_contact').set_label(user.name + ' <'\
@ -994,7 +1024,7 @@ class message_Window:
end_iter = buffer.get_end_iter() end_iter = buffer.get_end_iter()
buffer.create_mark('end', end_iter, 0) buffer.create_mark('end', end_iter, 0)
self.xml.signal_connect('gtk_widget_destroy', self.delete_event) self.xml.signal_connect('gtk_widget_destroy', self.delete_event)
self.xml.signal_connect('on_clear_button_clicked', self.on_clear) self.xml.signal_connect('on_clear_clicked', self.on_clear)
self.xml.signal_connect('on_msg_key_press_event', \ self.xml.signal_connect('on_msg_key_press_event', \
self.on_msg_key_press_event) self.on_msg_key_press_event)
self.tagIn = buffer.create_tag("incoming") self.tagIn = buffer.create_tag("incoming")
@ -1122,8 +1152,35 @@ class roster_Window:
if model.iter_n_children(parent_i) == 0: if model.iter_n_children(parent_i) == 0:
model.remove(parent_i) model.remove(parent_i)
def mkmenu(self):
if len(self.plugin.accounts.keys()) > 1:
#add
menu_sub = gtk.Menu()
self.xml.get_widget('add').set_submenu(menu_sub)
for a in self.plugin.accounts.keys():
item = gtk.MenuItem(a)
menu_sub.append(item)
item.connect("activate", self.on_add, a)
menu_sub.show_all()
#agents
menu_sub = gtk.Menu()
self.xml.get_widget('browse_agents').set_submenu(menu_sub)
for a in self.plugin.accounts.keys():
item = gtk.MenuItem(a)
menu_sub.append(item)
item.connect("activate", self.on_browse, a)
menu_sub.show_all()
else:
#add
self.xml.get_widget('add').connect("activate", self.on_add, \
self.plugin.accounts.keys()[0])
#agents
self.xml.get_widget('browse_agents').connect("activate", \
self.on_browse, self.plugin.accounts.keys()[0])
def draw_roster(self): def draw_roster(self):
"""Clear and draw roster""" """Clear and draw roster"""
self.mkmenu()
self.tree.get_model().clear() self.tree.get_model().clear()
for acct in self.contacts.keys(): for acct in self.contacts.keys():
self.add_account_to_roster(acct) self.add_account_to_roster(acct)
@ -1170,7 +1227,7 @@ class roster_Window:
else: else:
model = self.tree.get_model() model = self.tree.get_model()
if show == 'offline' and not showOffline: if show == 'offline' and not showOffline:
self.remove_user(user) self.remove_user(user, account)
else: else:
for i in iters: for i in iters:
if self.pixbufs.has_key(show): if self.pixbufs.has_key(show):
@ -1346,7 +1403,7 @@ class roster_Window:
def on_message(self, jid, msg, account): def on_message(self, jid, msg, account):
"""when we receive a message""" """when we receive a message"""
if not self.contacts.has_key(jid): if not self.contacts[account].has_key(jid):
user1 = user(jid, jid, ['not in list'], \ user1 = user(jid, jid, ['not in list'], \
'not in list', 'not in list', 'none', '') 'not in list', 'not in list', 'none', '')
self.add_user_to_roster(user1, account) self.add_user_to_roster(user1, account)
@ -1364,7 +1421,7 @@ class roster_Window:
else: else:
if not self.plugin.windows[account]['chats'].has_key(jid): if not self.plugin.windows[account]['chats'].has_key(jid):
self.plugin.windows[account]['chats'][jid] = \ self.plugin.windows[account]['chats'][jid] = \
message_Window(self.contacts[account][jid], self) message_Window(self.contacts[account][jid], self.plugin, account)
self.plugin.windows[account]['chats'][jid].print_conversation(msg) self.plugin.windows[account]['chats'][jid].print_conversation(msg)
def on_prefs(self, widget): def on_prefs(self, widget):
@ -1406,7 +1463,7 @@ class roster_Window:
iter = model.get_iter(path) iter = model.get_iter(path)
type = model.get_value(iter, 2) type = model.get_value(iter, 2)
jid = model.get_value(iter, 3) jid = model.get_value(iter, 3)
if (type == 'group'): if (type == 'group') or (type == 'account'):
if (self.tree.row_expanded(path)): if (self.tree.row_expanded(path)):
self.tree.collapse_row(path) self.tree.collapse_row(path)
else: else:
@ -1453,11 +1510,11 @@ class roster_Window:
self.plugin.send('UPDUSER', account, (jid, new_text, \ self.plugin.send('UPDUSER', account, (jid, new_text, \
self.contacts[account][jid].groups)) self.contacts[account][jid].groups))
def on_browse(self, widget): def on_browse(self, widget, account):
"""When browse agent is selected : """When browse agent is selected :
Call browse class""" Call browse class"""
if not self.plugin.windows.has_key('browser'): if not self.plugin.windows[account].has_key('browser'):
self.plugin.windows['browser'] = browseAgent_Window(self) self.plugin.windows[account]['browser'] = browseAgent_Window(self.plugin, account)
def mkpixbufs(self): def mkpixbufs(self):
"""initialise pixbufs array""" """initialise pixbufs array"""
@ -1499,6 +1556,7 @@ class roster_Window:
self.contacts = {} self.contacts = {}
for a in self.plugin.accounts.keys(): for a in self.plugin.accounts.keys():
self.contacts[a] = {} self.contacts[a] = {}
self.groups[a] = {}
#(icon, name, type, jid, editable) #(icon, name, type, jid, editable)
model = gtk.TreeStore(gtk.gdk.Pixbuf, str, str, str, \ model = gtk.TreeStore(gtk.gdk.Pixbuf, str, str, str, \
gobject.TYPE_BOOLEAN) gobject.TYPE_BOOLEAN)
@ -1526,19 +1584,6 @@ class roster_Window:
showOffline = self.plugin.config['showoffline'] showOffline = self.plugin.config['showoffline']
self.xml.get_widget('show_offline').set_active(showOffline) self.xml.get_widget('show_offline').set_active(showOffline)
#Menu
if len(self.plugin.accounts.keys()):
menu_sub = gtk.Menu()
self.xml.get_widget('add').set_submenu(menu_sub)
for a in self.plugin.accounts.keys():
item = gtk.MenuItem(a)
menu_sub.append(item)
item.connect("activate", self.on_add, a)
menu_sub.show_all()
else:
self.xml.get_widget('add').connect("activate", self.on_add, \
self.plugin.accounts.keys()[0])
#columns #columns
col = gtk.TreeViewColumn() col = gtk.TreeViewColumn()
render_pixbuf = gtk.CellRendererPixbuf() render_pixbuf = gtk.CellRendererPixbuf()
@ -1561,7 +1606,6 @@ class roster_Window:
self.xml.signal_connect('gtk_main_quit', self.on_quit) self.xml.signal_connect('gtk_main_quit', self.on_quit)
self.xml.signal_connect('on_preferences_activate', self.on_prefs) self.xml.signal_connect('on_preferences_activate', self.on_prefs)
self.xml.signal_connect('on_accounts_activate', self.on_accounts) 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_show_offline_activate', self.on_show_off) self.xml.signal_connect('on_show_offline_activate', self.on_show_off)
self.xml.signal_connect('on_about_activate', self.on_about) self.xml.signal_connect('on_about_activate', self.on_about)
self.xml.signal_connect('on_quit_activate', self.on_quit) self.xml.signal_connect('on_quit_activate', self.on_quit)
@ -1708,12 +1752,17 @@ class plugin:
if not ev[2][1].has_key('instructions'): if not ev[2][1].has_key('instructions'):
warning_Window('error contacting %s' % ev[2][0]) warning_Window('error contacting %s' % ev[2][0])
else: else:
agentRegistration_Window(ev[2][0], ev[2][1], self.plugin, ev[1]) agentRegistration_Window(ev[2][0], ev[2][1], self, ev[1])
#('ACC_OK', account, (hostname, login, pasword, name, ressource)) #('ACC_OK', account, (hostname, login, pasword, name, ressource))
elif ev[0] == 'ACC_OK': elif ev[0] == 'ACC_OK':
self.accounts[ev[2][3]] = {'ressource': ev[2][4], \ self.accounts[ev[2][3]] = {'ressource': ev[2][4], \
'password': ev[2][2], 'hostname': ev[2][0], 'name': ev[2][1]} 'password': ev[2][2], 'hostname': ev[2][0], 'name': ev[2][1]}
self.send('CONFIG', None, ('accounts', self.accounts)) 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'): if self.windows.has_key('accounts'):
self.windows['accounts'].init_accounts() self.windows['accounts'].init_accounts()
elif ev[0] == 'QUIT': elif ev[0] == 'QUIT':