changeset 3901:43024e50b701

plugin XEP-0470: add `create_attachments_node` method: this method create the attachments node if it doesn't already exists, and use same access model as target item, and an `open` publish model. rel 372
author Goffi <goffi@goffi.org>
date Wed, 21 Sep 2022 22:36:30 +0200 (2022-09-21)
parents 6c93a18b6250
children 32b38dd3ac18
files sat/plugins/plugin_xep_0470.py
diffstat 1 files changed, 18 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/sat/plugins/plugin_xep_0470.py	Wed Sep 21 22:33:59 2022 +0200
+++ b/sat/plugins/plugin_xep_0470.py	Wed Sep 21 22:36:30 2022 +0200
@@ -164,16 +164,31 @@
         data: dict
     ) -> bool:
         """trigger to create attachment node on each publication"""
+        await self.create_attachments_node(client, service, node, item["id"])
+        return True
+
+    async def create_attachments_node(
+        self,
+        client: SatXMPPEntity,
+        service: jid.JID,
+        node: str,
+        item_id: str
+    ):
+        """Create node for attachements if necessary"""
         node_config = await self._p.getConfiguration(client, service, node)
-        attachment_node = self.getAttachmentNodeName(service, node, item["id"])
+        try:
+            # FIXME: check if this is the best publish_model option
+            node_config.fields["pubsub#publish_model"].value = "open"
+        except KeyError:
+            log.warning("pubsub#publish_model field is missing")
+        attachment_node = self.getAttachmentNodeName(service, node, item_id)
         # we use the same options as target node
         try:
             await self._p.createIfNewNode(
                 client, service, attachment_node, options=dict(node_config)
             )
         except Exception as e:
-            log.warning(f"Can't create attachment node {attachment_node}: {e}]")
-        return True
+            log.warning(f"Can't create attachment node {attachment_node}: {e}")
 
     def items2attachmentData(
         self,