Merge branch 'plugins' of https://git.louiz.org/poezio into plugins
This commit is contained in:
commit
41b5497330
2 changed files with 76 additions and 0 deletions
|
@ -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
73
src/events.py
Normal 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 doesn’t 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)
|
||||
|
Loading…
Reference in a new issue