diff options
author | mathieui <mathieui@mathieui.net> | 2021-03-09 21:20:14 +0100 |
---|---|---|
committer | mathieui <mathieui@mathieui.net> | 2021-03-09 21:20:14 +0100 |
commit | 7c86c43fc74dd4786ff741386484b58d1c396e8b (patch) | |
tree | 3f6be757fedc9cd515b635643a50e9afd8b20b77 /slixmpp/plugins/xep_0441/stanza.py | |
parent | 8a1f9bec561466008553e3d2e67ad9391f519a0c (diff) | |
parent | 0115feaa31ef998b59da98c99c523ad34ed92651 (diff) | |
download | slixmpp-7c86c43fc74dd4786ff741386484b58d1c396e8b.tar.gz slixmpp-7c86c43fc74dd4786ff741386484b58d1c396e8b.tar.bz2 slixmpp-7c86c43fc74dd4786ff741386484b58d1c396e8b.tar.xz slixmpp-7c86c43fc74dd4786ff741386484b58d1c396e8b.zip |
Merge branch 'mam-update' into 'master'
MAM Update
See merge request poezio/slixmpp!149
Diffstat (limited to 'slixmpp/plugins/xep_0441/stanza.py')
-rw-r--r-- | slixmpp/plugins/xep_0441/stanza.py | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/slixmpp/plugins/xep_0441/stanza.py b/slixmpp/plugins/xep_0441/stanza.py new file mode 100644 index 00000000..99dbe802 --- /dev/null +++ b/slixmpp/plugins/xep_0441/stanza.py @@ -0,0 +1,91 @@ +# Slixmpp: The Slick XMPP Library +# Copyright (C) 2021 Mathieu Pasquet +# This file is part of Slixmpp. +# See the file LICENSE for copying permissio +from typing import ( + Iterable, + Set, +) + +from slixmpp.jid import JID +from slixmpp.xmlstream import ElementBase, ET + + +class Preferences(ElementBase): + """MAM Preferences payload. + + .. code-block:: xml + + <iq type='set' id='juliet3'> + <prefs xmlns='urn:xmpp:mam:2' default='roster'> + <always> + <jid>romeo@montague.lit</jid> + </always> + <never> + <jid>montague@montague.lit</jid> + </never> + </prefs> + </iq> + + """ + name = 'prefs' + namespace = 'urn:xmpp:mam:2' + plugin_attrib = 'mam_prefs' + #: Available interfaces: + #: + #: - ``default``: Default MAM policy (must be one of 'roster', 'always', + #: 'never' + #: - ``always`` (``List[JID]``): list of JIDs to always store + #: conversations with. + #: - ``never`` (``List[JID]``): list of JIDs to never store + #: conversations with. + interfaces = {'default', 'always', 'never'} + sub_interfaces = {'always', 'never'} + + def get_always(self) -> Set[JID]: + results = set() + + jids = self.xml.findall('{%s}always/{%s}jid' % ( + self.namespace, self.namespace)) + + for jid in jids: + results.add(JID(jid.text)) + + return results + + def set_always(self, value: Iterable[JID]): + self._set_sub_text('always', '', keep=True) + always = self.xml.find('{%s}always' % self.namespace) + always.clear() + + if not isinstance(value, (list, set)): + value = [value] + + for jid in value: + jid_xml = ET.Element('{%s}jid' % self.namespace) + jid_xml.text = str(jid) + always.append(jid_xml) + + def get_never(self) -> Set[JID]: + results = set() + + jids = self.xml.findall('{%s}never/{%s}jid' % ( + self.namespace, self.namespace)) + + for jid in jids: + results.add(JID(jid.text)) + + return results + + def set_never(self, value: Iterable[JID]): + self._set_sub_text('never', '', keep=True) + never = self.xml.find('{%s}never' % self.namespace) + never.clear() + + if not isinstance(value, (list, set)): + value = [value] + + for jid in value: + jid_xml = ET.Element('{%s}jid' % self.namespace) + jid_xml.text = str(jid) + never.append(jid_xml) |