diff sat/plugins/plugin_xep_0277.py @ 3519:02eec2a5b5f9

plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`): Those methods recreate an item to given new ID, and if successful, delete the former one.
author Goffi <goffi@goffi.org>
date Sat, 01 May 2021 18:37:57 +0200
parents 753d151da886
children 13e7ef106589
line wrap: on
line diff
--- a/sat/plugins/plugin_xep_0277.py	Sat May 01 18:36:13 2021 +0200
+++ b/sat/plugins/plugin_xep_0277.py	Sat May 01 18:37:57 2021 +0200
@@ -124,6 +124,14 @@
             async_=True,
         )
         host.bridge.addMethod(
+            "mbRename",
+            ".plugin",
+            in_sign="sssss",
+            out_sign="",
+            method=self._mbRename,
+            async_=True,
+        )
+        host.bridge.addMethod(
             "mbSetAccess",
             ".plugin",
             in_sign="ss",
@@ -813,7 +821,14 @@
 
     def friendlyId(self, data):
         """Generate a user friendly id from title or content"""
-        id_base = regex.urlFriendlyText(data.get('title') or data.get('content', ''))
+        # TODO: rich content should be converted to plain text
+        id_base = regex.urlFriendlyText(
+            data.get('title')
+            or data.get('title_rich')
+            or data.get('content')
+            or data.get('content_rich')
+            or ''
+        )
         return f"{id_base}-{token_urlsafe(3)}"
 
     def _mbSend(self, service, node, data, profile_key):
@@ -954,6 +969,27 @@
             items_data, partial(self.item2mbdata, client, service=service, node=node))
         defer.returnValue(mb_data)
 
+    def _mbRename(self, service, node, item_id, new_id, profile_key):
+        return defer.ensureDeferred(self.mbRename(
+            self.host.getClient(profile_key),
+            jid.JID(service) if service else None,
+            node or None,
+            item_id,
+            new_id
+        ))
+
+    async def mbRename(
+        self,
+        client: SatXMPPEntity,
+        service: Optional[jid.JID],
+        node: Optional[str],
+        item_id: str,
+        new_id: str
+    ) -> None:
+        if not node:
+            node = NS_MICROBLOG
+        await self._p.renameItem(client, service, node, item_id, new_id)
+
     def parseCommentUrl(self, node_url):
         """Parse a XMPP URI