diff options
Diffstat (limited to 'slixmpp/plugins/xep_0437/stanza.py')
-rw-r--r-- | slixmpp/plugins/xep_0437/stanza.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/slixmpp/plugins/xep_0437/stanza.py b/slixmpp/plugins/xep_0437/stanza.py new file mode 100644 index 00000000..cd3a2c84 --- /dev/null +++ b/slixmpp/plugins/xep_0437/stanza.py @@ -0,0 +1,47 @@ +""" + Slixmpp: The Slick XMPP Library + Copyright (C) 2020 Mathieu Pasquet + This file is part of Slixmpp. + + See the file LICENSE for copying permission. +""" + +from typing import Iterable +from slixmpp import JID, Presence +from slixmpp.xmlstream import ( + ElementBase, + register_stanza_plugin, +) + +NS = 'urn:xmpp:rai:0' + +class RAI(ElementBase): + name = 'rai' + plugin_attrib = 'rai' + namespace = NS + interfaces = {'activities'} + + def get_activities(self) -> Iterable[JID]: + return [JID(el.xml.text) for el in self if isinstance(el, Activity)] + + def del_activities(self): + for el in self.xml.findall('{%s}activity' % NS): + self.xml.remove(el) + + def set_activities(self, activities: Iterable[JID]): + self.del_activities() + for jid in activities: + act = Activity() + act.xml.text = str(jid) + self.append(act) + + +class Activity(ElementBase): + name = 'activity' + plugin_attrib = 'activity' + namespace = NS + + +def register_plugins(): + register_stanza_plugin(RAI, Activity, iterable=True) + register_stanza_plugin(Presence, RAI) |