From 88c4bf0e18d7d6f3f6013f1296f04d5d59493625 Mon Sep 17 00:00:00 2001 From: Yurei TZK Date: Sat, 30 Aug 2025 19:09:29 +0300 Subject: [PATCH] Add native bookmarks deletion --- src/headless/plugins/bookmarks/collection.js | 40 ++++++++++++++++++- .../types/plugins/bookmarks/collection.d.ts | 7 +++- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/headless/plugins/bookmarks/collection.js b/src/headless/plugins/bookmarks/collection.js index ddf6879051..b4adc6eca3 100644 --- a/src/headless/plugins/bookmarks/collection.js +++ b/src/headless/plugins/bookmarks/collection.js @@ -37,8 +37,14 @@ class Bookmarks extends Collection { this.on('change:autojoin', this.onAutoJoinChanged, this); this.on( 'remove', - /** @param {Bookmark} bookmark */ - (_, bookmark) => this.sendBookmarkStanza(bookmark), + /** @param {Bookmark} bookmarks */ + async (bookmark, bookmarks) => { + const bare_jid = _converse.session.get('bare_jid'); + const sourceBookmark = (await api.disco.supports(`${Strophe.NS.BOOKMARKS2}#compat`, bare_jid)) + ? bookmark + : bookmarks; + this.removeBookmarkStanza(sourceBookmark) + }, this ); @@ -127,6 +133,36 @@ class Bookmarks extends Collection { } } + /** + * @param {Bookmark} bookmark + * @returns {Promise} + */ + async removeBookmarkStanza (bookmark) { + const bare_jid = _converse.session.get('bare_jid'); + + const node = (await api.disco.supports(`${Strophe.NS.BOOKMARKS2}#compat`, bare_jid)) + ? Strophe.NS.BOOKMARKS2 + : Strophe.NS.BOOKMARKS; + + if (node === Strophe.NS.BOOKMARKS2) { + + const retractItem = stx` + + + `; + + return api.pubsub.publish( + null, + node, + retractItem, + { persist_items: true } + ); + + } + + return this.sendBookmarkStanza(bookmark); + } + /** * @param {'urn:xmpp:bookmarks:1'|'storage:bookmarks'} node * @param {Bookmark} bookmark diff --git a/src/headless/types/plugins/bookmarks/collection.d.ts b/src/headless/types/plugins/bookmarks/collection.d.ts index aed3f234b1..78d049d66f 100644 --- a/src/headless/types/plugins/bookmarks/collection.d.ts +++ b/src/headless/types/plugins/bookmarks/collection.d.ts @@ -24,6 +24,11 @@ declare class Bookmarks extends Collection { * @param {object} [options] */ setBookmark(attrs: import("./types").BookmarkAttrs, create?: boolean, options?: object): void; + /** + * @param {Bookmark} bookmark + * @returns {Promise} + */ + removeBookmarkStanza(bookmark: Bookmark): Promise; /** * @param {'urn:xmpp:bookmarks:1'|'storage:bookmarks'} node * @param {Bookmark} bookmark @@ -74,4 +79,4 @@ declare class Bookmarks extends Collection { import { Collection } from '@converse/skeletor'; import Bookmark from './model.js'; import { Stanza } from 'strophe.js'; -//# sourceMappingURL=collection.d.ts.map \ No newline at end of file +//# sourceMappingURL=collection.d.ts.map