annotate src/plugins/plugin_xep_0048.py @ 983:c34e0b2bbf08

plugin XEP-0048: added /bookmark text command
author Goffi <goffi@goffi.org>
date Mon, 07 Apr 2014 16:22:35 +0200
parents 0e80ee1fe9af
children df8e1b557125
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
982
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/python
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
3
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # SAT plugin for Bookmarks (xep-0048)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jérôme Poisson (goffi@goffi.org)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
6
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
10 # (at your option) any later version.
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
11
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
16
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
19
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
20 from sat.core.i18n import _, D_
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
21 from sat.core import exceptions
983
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
22 from sat.core.constants import Const as C
982
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
23 from sat.memory.persistent import PersistentBinaryDict
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
24 from sat.tools import xml_tools
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
25 from logging import debug, info, warning, error
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
26 from twisted.words.xish import domish
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
27 from twisted.words.protocols.jabber import jid
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
28
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
29 from twisted.internet import defer
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
30
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
31 NS_BOOKMARKS = 'storage:bookmarks'
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
32
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
33 PLUGIN_INFO = {
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
34 "name": "Bookmarks",
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
35 "import_name": "XEP-0048",
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
36 "type": "XEP",
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
37 "protocols": ["XEP-0048"],
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
38 "dependencies": ["XEP-0045"],
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
39 "recommendations": ["XEP-0049"],
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
40 "main": "XEP_0048",
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
41 "handler": "no",
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
42 "description": _("""Implementation of bookmarks""")
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
43 }
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
44
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
45
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
46 class XEP_0048(object):
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
47 MUC_TYPE = 'muc'
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
48 URL_TYPE = 'url'
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
49 MUC_KEY = 'jid'
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
50 URL_KEY = 'url'
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
51 MUC_ATTRS = ('autojoin', 'name')
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
52 URL_ATTRS = ('name',)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
53
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
54 def __init__(self, host):
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
55 info(_("Bookmarks plugin initialization"))
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
56 self.host = host
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
57 # self.__menu_id = host.registerCallback(self._bookmarksMenu, with_data=True)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
58 self.__bm_save_id = host.registerCallback(self._bookmarksSaveCb, with_data=True)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
59 host.importMenu((D_("Communication"), D_("bookmarks")), self._bookmarksMenu, security_limit=0, help_string=D_("Use and manage bookmarks"))
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
60 try:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
61 self.private_plg = self.host.plugins["XEP-0049"]
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
62 except KeyError:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
63 self.private_plg = None
983
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
64 try:
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
65 self.host.plugins[C.TEXT_CMDS].registerTextCommands(self)
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
66 except KeyError:
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
67 info(_("Text commands not available"))
982
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
68
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
69 @defer.inlineCallbacks
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
70 def profileConnected(self, profile):
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
71 client = self.host.getClient(profile)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
72 local = client.bookmarks_local = PersistentBinaryDict(NS_BOOKMARKS, profile)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
73 yield local.load()
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
74 if not local:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
75 local[XEP_0048.MUC_TYPE] = dict()
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
76 local[XEP_0048.URL_TYPE] = dict()
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
77 private = yield self._getServerBookmarks('private', profile)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
78 pubsub = client.bookmarks_pubsub = None
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
79
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
80 for bookmarks in (local, private, pubsub):
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
81 if bookmarks is not None:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
82 for (room_jid, data) in bookmarks[XEP_0048.MUC_TYPE].items():
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
83 if data.get('autojoin', 'false') == 'true':
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
84 nick = data.get('nick', client.jid.user)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
85 self.host.plugins['XEP-0045'].join(room_jid, nick, {}, profile_key=client.profile)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
86
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
87 @defer.inlineCallbacks
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
88 def _getServerBookmarks(self, storage_type, profile):
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
89 """Get distants bookmarks
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
90
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
91 update also the client.bookmarks_[type] key, with None if service is not available
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
92 @param storage_type: storage type, can be:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
93 - 'private': XEP-0049 storage
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
94 - 'pubsub': XEP-0223 storage
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
95 @param profile: %(doc_profile)s
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
96 @return: data dictionary, or None if feature is not available
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
97
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
98 @raise: exception.FeatureNotFound
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
99 """
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
100 client = self.host.getClient(profile)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
101 if storage_type == 'private':
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
102 try:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
103 bookmarks_private_xml = yield self.private_plg.privateXMLGet('storage', NS_BOOKMARKS, profile)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
104 data = client.bookmarks_private = self._bookmarkElt2Dict(bookmarks_private_xml)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
105 except (exceptions.FeatureNotFound, AttributeError):
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
106 info(_("Private XML storage not available"))
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
107 data = client.bookmarks_private = None
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
108 elif storage_type == 'pubsub':
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
109 raise NotImplementedError
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
110 else:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
111 raise ValueError("storage_type must be 'private' or 'pubsub'")
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
112 defer.returnValue(data)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
113
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
114 @defer.inlineCallbacks
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
115 def _setServerBookmarks(self, storage_type, bookmarks_elt, profile):
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
116 """Save bookmarks on server
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
117
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
118 @param storage_type: storage type, can be:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
119 - 'private': XEP-0049 storage
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
120 - 'pubsub': XEP-0223 storage
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
121 @param bookmarks_elt (domish.Element): bookmarks XML
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
122 @param profile: %(doc_profile)s
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
123 """
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
124 if storage_type == 'private':
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
125 yield self.private_plg.privateXMLStore(bookmarks_elt, profile)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
126 elif storage_type == 'pubsub':
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
127 raise NotImplementedError
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
128 else:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
129 raise ValueError("storage_type must be 'private' or 'pubsub'")
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
130
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
131 def _bookmarkElt2Dict(self, storage_elt):
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
132 """Parse bookmarks to get dictionary
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
133 @param storage_elt (domish.Element): bookmarks storage
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
134 @return (dict): bookmark data (key: bookmark type, value: list) where key can be:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
135 - XEP_0048.MUC_TYPE
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
136 - XEP_0048.URL_TYPE
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
137 - value (dict): data as for addBookmark
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
138 """
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
139 conf_data = {}
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
140 url_data = {}
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
141
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
142 conference_elts = storage_elt.elements(NS_BOOKMARKS, 'conference')
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
143 for conference_elt in conference_elts:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
144 try:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
145 room_jid = jid.JID(conference_elt[XEP_0048.MUC_KEY])
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
146 except KeyError:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
147 warning ("invalid bookmark found, igoring it:\n%s" % conference_elt.toXml())
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
148 continue
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
149
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
150 data = conf_data[room_jid] = {}
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
151
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
152 for attr in XEP_0048.MUC_ATTRS:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
153 if conference_elt.hasAttribute(attr):
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
154 data[attr] = conference_elt[attr]
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
155 try:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
156 data['nick'] = unicode(conference_elt.elements(NS_BOOKMARKS, 'nick').next())
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
157 except StopIteration:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
158 pass
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
159 # TODO: manage password (need to be secured, see XEP-0049 §4)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
160
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
161 url_elts = storage_elt.elements(NS_BOOKMARKS, 'url')
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
162 for url_elt in url_elts:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
163 try:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
164 url = url_elt[XEP_0048.URL_KEY]
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
165 except KeyError:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
166 warning ("invalid bookmark found, igoring it:\n%s" % url_elt.toXml())
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
167 continue
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
168 data = url_data[url] = {}
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
169 for attr in XEP_0048.URL_ATTRS:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
170 if url_elt.hasAttribute(attr):
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
171 data[attr] = url_elt[attr]
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
172
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
173 return {XEP_0048.MUC_TYPE: conf_data, XEP_0048.URL_TYPE: url_data}
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
174
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
175 def _dict2BookmarkElt(self, type_, data):
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
176 """Construct a bookmark element from a data dict
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
177 @param data (dict): bookmark data (key: bookmark type, value: list) where key can be:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
178 - XEP_0048.MUC_TYPE
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
179 - XEP_0048.URL_TYPE
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
180 - value (dict): data as for addBookmark
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
181 @return (domish.Element): bookmark element
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
182 """
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
183 rooms_data = data.get(XEP_0048.MUC_TYPE, {})
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
184 urls_data = data.get(XEP_0048.URL_TYPE, {})
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
185 storage_elt = domish.Element((NS_BOOKMARKS, 'storage'))
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
186 for room_jid in rooms_data:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
187 conference_elt = storage_elt.addElement('conference')
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
188 conference_elt[XEP_0048.MUC_KEY] = room_jid.full()
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
189 for attr in XEP_0048.MUC_ATTRS:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
190 try:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
191 conference_elt[attr] = rooms_data[room_jid][attr]
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
192 except KeyError:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
193 pass
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
194 try:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
195 conference_elt.addElement('nick', content=rooms_data[room_jid]['nick'])
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
196 except KeyError:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
197 pass
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
198
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
199 for url in urls_data:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
200 url_elt = storage_elt.addElement('url')
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
201 url_elt[XEP_0048.URL_KEY] = url
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
202 for attr in XEP_0048.URL_ATTRS:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
203 try:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
204 url_elt[attr] = url[attr]
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
205 except KeyError:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
206 pass
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
207
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
208 return storage_elt
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
209
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
210 def _bookmarksMenu(self, data, profile):
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
211 """ XMLUI activated by menu: return Gateways UI
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
212 @param profile: %(doc_profile)s
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
213
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
214 """
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
215 client = self.host.getClient(profile)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
216 xmlui = xml_tools.XMLUI(title=_('Bookmarks manager'))
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
217 xmlui.addText(_("add a bookmark"))
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
218 xmlui.changeContainer("pairs")
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
219 xmlui.addLabel(_('Name'))
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
220 xmlui.addString('name')
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
221 xmlui.addLabel(_('jid'))
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
222 xmlui.addString('jid')
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
223 xmlui.addLabel(_('Nickname'))
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
224 xmlui.addString('nick', client.jid.user)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
225 xmlui.addLabel(_('Autojoin'))
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
226 xmlui.addBool('autojoin')
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
227 xmlui.changeContainer("vertical")
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
228 xmlui.addButton(self.__bm_save_id, _("Save"), ('name', 'jid', 'nick', 'autojoin'))
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
229 return {'xmlui': xmlui.toXml()}
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
230
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
231 def _bookmarksSaveCb(self, data, profile):
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
232 bm_data = xml_tools.XMLUIResult2DataFormResult(data)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
233 try:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
234 location = jid.JID(bm_data.pop('jid'))
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
235 except KeyError:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
236 raise exceptions.InternalError("Can't find mandatory key")
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
237 d = self.addBookmark(XEP_0048.MUC_TYPE, location, bm_data, profile_key=profile)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
238 d.addCallback(lambda dummy: {})
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
239 return d
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
240
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
241 @defer.inlineCallbacks
983
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
242 def addBookmark(self, type_, location, data, storage_type="auto", profile_key=C.PROF_KEY_NONE):
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
243 """Store a new bookmark
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
244
982
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
245 @param type_: bookmark type, one of:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
246 - XEP_0048.MUC_TYPE: Multi-User chat room
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
247 - XEP_0048.URL_TYPE: web page URL
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
248 @param location: dependeding on type_, can be a MUC room jid or an url
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
249 @param data (dict): depending on type_, can contains the following keys:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
250 - name: human readable name of the bookmark
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
251 - nick: user preferred room nick (default to user part of profile's jid)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
252 - autojoin: "true" if room must be automatically joined on connection
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
253 - password: unused yet TODO
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
254 @param storage_type: where the bookmark will be stored, can be:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
255 - "auto": find best available option: pubsub, private, local in that order
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
256 - "pubsub": PubSub private storage (XEP-0223)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
257 - "private": Private XML storage (XEP-0049)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
258 - "local": Store in SàT database
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
259 @param profile_key: %(doc_profile_key)s
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
260 """
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
261 assert storage_type in ('auto', 'pubsub', 'private', 'local')
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
262 client = self.host.getClient(profile_key)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
263 if storage_type == 'auto':
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
264 if client.bookmarks_pubsub is not None:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
265 storage_type = 'pubsub'
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
266 elif client.bookmarks_private is not None:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
267 storage_type = 'private'
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
268 else:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
269 storage_type = 'local'
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
270 warning(_("Bookmarks will be local only"))
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
271 info(_('Type selected for "auto" storage: %s') % storage_type)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
272
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
273 if storage_type == 'local':
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
274 client.bookmarks_local[type_][location] = data
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
275 yield client.bookmarks_local.force(type_)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
276 else:
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
277 bookmarks = yield self._getServerBookmarks(storage_type, client.profile)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
278 bookmarks[type_][location] = data
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
279 bookmark_elt = self._dict2BookmarkElt(type_, bookmarks)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
280 yield self._setServerBookmarks(storage_type, bookmark_elt, client.profile)
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
281
983
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
282 def cmd_bookmark(self, mess_data, profile):
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
283 """Bookmark a MUC room
982
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
284
983
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
285 @command (group): [autojoin]
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
286 - autojoin: join room automatically on connection
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
287 """
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
288 debug("Catched bookmark command")
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
289 client = self.host.getClient(profile)
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
290 txt_cmd = self.host.plugins[C.TEXT_CMDS]
982
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
291
983
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
292 if mess_data['type'] != "groupchat":
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
293 #/bookmark command does nothing if we are not on a group chat
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
294 info("Ignoring /bookmark command on a non groupchat message")
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
295 return True
982
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
296
983
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
297 options = mess_data["unparsed"].strip().split()
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
298 room_jid = mess_data["to"].userhostJID()
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
299 data = { "name": room_jid.user,
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
300 "nick": client.jid.user,
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
301 "autojoin": "true" if "autojoin" in options else "false",
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
302 }
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
303 self.addBookmark(XEP_0048.MUC_TYPE, room_jid, data, profile_key=profile)
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
304 txt_cmd.feedBack(_("Bookmark added"), mess_data, profile)
982
0e80ee1fe9af plugin XEP-0048: bookmarks (first draft)
Goffi <goffi@goffi.org>
parents:
diff changeset
305
983
c34e0b2bbf08 plugin XEP-0048: added /bookmark text command
Goffi <goffi@goffi.org>
parents: 982
diff changeset
306 return False