From 961cf5df8548ec0985f2755d21af933d8c023ee4 Mon Sep 17 00:00:00 2001 From: mathieui Date: Sun, 6 Nov 2011 23:46:00 +0100 Subject: New type of events to be used with the plugins --- src/core.py | 62 ++----------------------------------------------------------- 1 file changed, 2 insertions(+), 60 deletions(-) (limited to 'src/core.py') diff --git a/src/core.py b/src/core.py index 1f21e36d..8e85ce90 100644 --- a/src/core.py +++ b/src/core.py @@ -33,6 +33,7 @@ import multiuserchat as muc import tabs import xhtml +import events import pubsub import windows import connection @@ -81,12 +82,6 @@ class Core(object): User interface using ncurses """ - # dict containing the name of the internal events - # used with the plugins, the key is the name of the event - # and the value is the number of arguments the handler must take - internal_events = { - 'enter': 2, - } def __init__(self): # All uncaught exception are given to this callback, instead # of being displayed on the screen and exiting the program. @@ -94,6 +89,7 @@ class Core(object): self.status = Status(show=None, message='') sys.excepthook = self.on_exception self.running = True + self.events = events.EventHandler() self.xmpp = singleton.Singleton(connection.Connection) self.remote_fifo = None # a unique buffer used to store global informations @@ -180,7 +176,6 @@ class Core(object): self.timed_events = set() - self.connected_events = {} self.autoload_plugins() def autoload_plugins(self): @@ -213,58 +208,6 @@ class Core(object): 'Just press Ctrl-n.' \ )) self.refresh_window() - - def connect(self, event, handler): - """ - Connect an handler to an internal event of poezio - (eg "enter pressed in a chattab") - """ - # Fail if the method doesn’t take at least the good number of arguments - # or if the event is unknown - if not event in self.internal_events \ - or len(getargspec(handler).args) < self.internal_events[event]: - return False - - module_name = handler.__module__ - if not event in self.connected_events: - self.connected_events[event] = {} - if not module_name in self.connected_events[event]: - self.connected_events[event][module_name] = [] - - self.connected_events[event][module_name].append(handler) - return True - - def run_event(self, event, **kwargs): - """ - Call the handlers associated with an event - """ - if event in self.connected_events: - for module in self.connected_events[event]: - for handler in self.connected_events[event][module]: - try: - handler(**kwargs) - except: - import traceback - tp = traceback.format_exc() - module_name = handler.__name__ - log.debug('ERROR: in plugin %s, \n%s' % (module_name, tp)) - - def disconnect(self, event, handler): - """ - Disconnect a handler from an event - """ - if not event in self.internal_events: - return False - - module_name = getmodule(handler).__name__ - if not event in self.connected_events: - return False - if not module_name in self.connected_events[event]: - return False - - self.connected_events[event][module_name].remove(handler) - return True - def resize_global_information_win(self): """ Resize the global_information_win only once at each resize. @@ -272,7 +215,6 @@ class Core(object): self.information_win.resize(self.information_win_size, tabs.Tab.width, tabs.Tab.height - 2 - self.information_win_size, 0) - def resize_global_info_bar(self): """ Resize the GlobalInfoBar only once at each resize -- cgit v1.2.3