plugins can now unregister

new QUIT signal : we can or not close the core
This commit is contained in:
Yann Leboulanger 2004-07-28 18:31:31 +00:00
parent d9316e83a2
commit 19f1e79a66
5 changed files with 35 additions and 11 deletions

View File

@ -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):

View File

@ -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

View File

@ -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':

View File

@ -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()

View File

@ -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']))