# HG changeset patch # User Goffi # Date 1396880669 -7200 # Node ID 9ebdba4ab907b496ccf0b34ee7a236deb69153f5 # Parent df8e1b557125af1d76a73a3ccff8f2b020b90f4e plugin XEP-0048: bookmarks deletion + added "delete" option for /bookmark command diff -r df8e1b557125 -r 9ebdba4ab907 src/plugins/plugin_xep_0048.py --- a/src/plugins/plugin_xep_0048.py Mon Apr 07 16:24:28 2014 +0200 +++ b/src/plugins/plugin_xep_0048.py Mon Apr 07 16:24:29 2014 +0200 @@ -311,10 +311,47 @@ bookmark_elt = self._dict2BookmarkElt(type_, bookmarks) yield self._setServerBookmarks(storage_type, bookmark_elt, client.profile) + @defer.inlineCallbacks + def removeBookmark(self, type_, location, storage_type="all", profile_key=C.PROF_KEY_NONE): + """Remove a stored bookmark + + @param type_: bookmark type, one of: + - XEP_0048.MUC_TYPE: Multi-User chat room + - XEP_0048.URL_TYPE: web page URL + @param location: dependeding on type_, can be a MUC room jid or an url + @param storage_type: where the bookmark is stored, can be: + - "all": remove from everywhere + - "pubsub": PubSub private storage (XEP-0223) + - "private": Private XML storage (XEP-0049) + - "local": Store in SàT database + @param profile_key: %(doc_profile_key)s + """ + assert storage_type in ('all', 'pubsub', 'private', 'local') + client = self.host.getClient(profile_key) + + if storage_type in ('all', 'local'): + try: + del client.bookmarks_local[type_][location] + yield client.bookmarks_local.force(type_) + except KeyError: + debug("Bookmark is not present in local storage") + + if storage_type in ('all', 'private'): + bookmarks = yield self._getServerBookmarks('private', client.profile) + try: + del bookmarks[type_][location] + bookmark_elt = self._dict2BookmarkElt(type_, bookmarks) + yield self._setServerBookmarks('private', bookmark_elt, client.profile) + except KeyError: + debug("Bookmark is not present in private storage") + + if storage_type == 'pubsub': + raise NotImplementedError + def cmd_bookmark(self, mess_data, profile): - """Bookmark a MUC room + """(Un)bookmark a MUC room - @command (group): [autojoin] + @command (group): [autojoin | remove] - autojoin: join room automatically on connection """ debug("Catched bookmark command") @@ -327,7 +364,17 @@ return True options = mess_data["unparsed"].strip().split() + if options and options[0] not in ('autojoin', 'remove'): + txt_cmd.feedBack(_("Bad arguments"), mess_data, profile) + return False + room_jid = mess_data["to"].userhostJID() + + if "remove" in options: + self.removeBookmark(XEP_0048.MUC_TYPE, room_jid, profile_key = profile) + txt_cmd.feedBack(_("All [%s] bookmarks are being removed") % room_jid.full(), mess_data, profile) + return False + data = { "name": room_jid.user, "nick": client.jid.user, "autojoin": "true" if "autojoin" in options else "false",