diff options
author | Florent Le Coz <louiz@louiz.org> | 2011-11-09 01:23:35 +0100 |
---|---|---|
committer | Florent Le Coz <louiz@louiz.org> | 2011-11-09 01:23:35 +0100 |
commit | ad0b3b41ecc0003f3d5b4fdb9799b6e325127e1f (patch) | |
tree | 3f2bbf1be7f753f1c7495f0a60833f469e7f10a7 /src/events.py | |
parent | 7fadb35fe2e7932a0a4aa6a8184ab6b186669edc (diff) | |
parent | 03999f1ef08036b7ea25e2239cf7b6bcdb4d76cc (diff) | |
download | poezio-ad0b3b41ecc0003f3d5b4fdb9799b6e325127e1f.tar.gz poezio-ad0b3b41ecc0003f3d5b4fdb9799b6e325127e1f.tar.bz2 poezio-ad0b3b41ecc0003f3d5b4fdb9799b6e325127e1f.tar.xz poezio-ad0b3b41ecc0003f3d5b4fdb9799b6e325127e1f.zip |
Merge branch 'plugins'
Conflicts:
README
src/core.py
src/tabs.py
Diffstat (limited to 'src/events.py')
-rw-r--r-- | src/events.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/events.py b/src/events.py new file mode 100644 index 00000000..22d60ddf --- /dev/null +++ b/src/events.py @@ -0,0 +1,70 @@ +# +# This file is part of Poezio. +# +# Poezio is free software: you can redistribute it and/or modify +# it under the terms of the zlib license. See the COPYING file. + +""" +Defines the EventHandler class +""" + +import logging +log = logging.getLogger(__name__) + +class EventHandler(object): + """ + A class keeping a list of possible events that are triggered + by poezio. You (a plugin for example) can add an event handler + associated with an event name, and whenever that event is triggered, + the callback is called + """ + def __init__(self): + self.events = { + # when you are highlighted in a muc tab + 'highlight': [], + 'muc_say': [], + 'conversation_say': [], + 'private_say': [], + 'conversation_msg': [], + 'private_msg': [], + 'muc_msg': [], + } + + def add_event_handler(self, name, callback, position=0): + """ + Add a callback to a given event. + Note that if that event name doesn’t exist, it just returns False. + If it was successfully added, it returns True + position: 0 means insert a the beginning, -1 means end + """ + if name not in self.events: + return False + + if position >= 0: + self.events[name].insert(position, callback) + else: + self.events[name].append(callback) + + return True + + def trigger(self, name, *args, **kwargs): + """ + Call all the callbacks associated to the given event name + """ + callbacks = self.events[name] + for callback in callbacks: + callback(*args, **kwargs) + + def del_event_handler(self, name, callback): + """ + Remove the callback from the list of callbacks of the given event + """ + if not name: + for event in self.events: + while callback in self.events[event]: + self.events[event].remove(callback) + return True + else: + if callback in self.events[name]: + self.events[name].remove(callback) + |