Merge branch 'plugins' of https://git.louiz.org/poezio into plugins

This commit is contained in:
Florent Le Coz 2011-11-07 14:57:13 +01:00
commit 41b5497330
2 changed files with 76 additions and 0 deletions

View file

@ -559,6 +559,7 @@ class Core(object):
tab = self.open_private_window(room_from, nick_from, False)
if not tab:
return
self.events.trigger('private_msg', message)
body = xhtml.get_body_from_message_stanza(message)
if not body:
return
@ -608,6 +609,7 @@ class Core(object):
When receiving "normal" messages (from someone in our roster)
"""
jid = message['from']
self.events.trigger('conversation_msg', message)
body = xhtml.get_body_from_message_stanza(message)
if not body:
if message['type'] == 'error':
@ -1048,6 +1050,7 @@ class Core(object):
if tab.get_user_by_name(nick_from) and\
tab.get_user_by_name(nick_from) in tab.ignores:
return
self.events.trigger('muc_mg', message)
body = xhtml.get_body_from_message_stanza(message)
if body:
date = date if delayed == True else None

73
src/events.py Normal file
View file

@ -0,0 +1,73 @@
#
# 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, first=True, last=False, position=None):
"""
Add a callback to a given event.
Note that if that event name doesnt exist, it just returns False.
If it was successfully added, it returns True
"""
if name not in self.events:
return False
if first:
self.events[name].insert(0, callback)
elif last:
self.events[name].append(callback)
elif position != None and isinstance(position, int):
self.events[name].insert(position, callback)
else:
self.events[name].insert(0, 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)