From 19f1e79a66ef9289a877ea4c9b53200d9c2db39d Mon Sep 17 00:00:00 2001 From: Yann Leboulanger Date: Wed, 28 Jul 2004 18:31:31 +0000 Subject: [PATCH] plugins can now unregister new QUIT signal : we can or not close the core --- common/hub.py | 22 ++++++++++++++++++++++ common/thread.py | 4 ++-- core/core.py | 16 +++++++++------- plugins/gtkgui/gtkgui.py | 2 +- plugins/sock/sock.py | 2 +- 5 files changed, 35 insertions(+), 11 deletions(-) diff --git a/common/hub.py b/common/hub.py index a6d2ef1f7..7f7a4e874 100644 --- a/common/hub.py +++ b/common/hub.py @@ -49,6 +49,8 @@ class GajimHub: def register(self, name, event): """ Records a plugin from an event """ + if not self.queues.has_key(name): + return qu = self.queues[name] if self.events.has_key(event) : if not qu in self.events[event]: @@ -57,6 +59,26 @@ class GajimHub: self.events[event] = [qu] # END register + def unregisterEvents(self, name, event): + """ Records a plugin from an event """ + if not self.queues.has_key(name): + return + qu = self.queues[name] + if self.events.has_key(event) : + if qu in self.events[event]: + self.events[event].remove(qu) + # END register + + def unregister(self, name): + if not self.queues.has_key(name): + return + qu = self.queues[name] + for event in self.events: + if qu in self.events[event]: + self.events[event].remove(qu) + del self.queues[name] + # END unregister + def sendPlugin(self, event, con, data): """ Sends an event to registered plugins""" if self.events.has_key(event): diff --git a/common/thread.py b/common/thread.py index bcf3fbe1b..9b5e5fb39 100644 --- a/common/thread.py +++ b/common/thread.py @@ -29,7 +29,7 @@ class GajimThread(threading.Thread): self.queueIn = queueIn self.queueOut = queueOut threading.Thread.__init__(self, target = self.run, \ - name = name, args = () ) + name = name) self.start() # END __init__ @@ -42,6 +42,6 @@ class GajimThread(threading.Thread): res = eval(mod) except: print _("plugin %s cannot be launched : ") % self.getName() + \ - sys.exc_info()[1][1] + sys.exc_info()[1][0] # END run # END GajimThread diff --git a/core/core.py b/core/core.py index 68953323b..02f9bc10e 100644 --- a/core/core.py +++ b/core/core.py @@ -352,14 +352,16 @@ class GajimCore: break else: con = None - #('QUIT', account, ()) + #('QUIT', None, (plugin, kill_core ?)) kill core : 0 or 1 if ev[0] == 'QUIT': - for con in self.connexions.keys(): - if self.connected[self.connexions[con]] == 1: - self.connected[self.connexions[con]] = 0 - con.disconnect() - self.hub.sendPlugin('QUIT', None, ()) - return 1 + self.hub.unregister(ev[2][0]) + if ev[2][1]: + for con in self.connexions.keys(): + if self.connected[self.connexions[con]] == 1: + self.connected[self.connexions[con]] = 0 + con.disconnect() + self.hub.sendPlugin('QUIT', None, ()) + return 1 #('ASK_CONFIG', account, (who_ask, section, default_config)) elif ev[0] == 'ASK_CONFIG': if ev[2][1] == 'accounts': diff --git a/plugins/gtkgui/gtkgui.py b/plugins/gtkgui/gtkgui.py index 3ac98618a..e7dd4924f 100644 --- a/plugins/gtkgui/gtkgui.py +++ b/plugins/gtkgui/gtkgui.py @@ -1103,7 +1103,7 @@ class roster_Window: tell that to the core and exit gtk""" self.plugin.config['hiddenlines'] = string.join(self.hidden_lines, '\t') self.plugin.send('CONFIG', None, ('GtkGui', self.plugin.config)) - self.plugin.send('QUIT', None, '') + self.plugin.send('QUIT', None, ('gtkgui', 0)) print _("plugin gtkgui stopped") gtk.mainquit() diff --git a/plugins/sock/sock.py b/plugins/sock/sock.py index 0859a0811..00dcea740 100644 --- a/plugins/sock/sock.py +++ b/plugins/sock/sock.py @@ -24,7 +24,6 @@ import Queue from common import i18n _ = i18n._ -HOST = socket.gethostbyname(socket.gethostname()) def XMLescape(txt): "Escape XML entities" @@ -141,6 +140,7 @@ class plugin: self.message_types = {} #create socket self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + HOST = socket.gethostbyname(socket.gethostname()) if self.config.has_key('host'): HOST = socket.gethostbyname(self.config['host']) self.socket.bind((HOST, self.config['port']))