Mercurial > libervia-backend
annotate sat/plugins/plugin_exp_list_of_interest.py @ 3316:5369ce5bcecf
core (xmpp): text can now be specified in `sendError`
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 01 Aug 2020 15:59:49 +0200 |
parents | 9a174abafdee |
children | 56ee491c0df6 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 # SAT plugin to detect language (experimental) |
3136 | 5 # Copyright (C) 2009-2020 Jérôme Poisson (goffi@goffi.org) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 # (at your option) any later version. |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 # GNU Affero General Public License for more details. |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 from sat.core.i18n import _ |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
21 from sat.core.constants import Const as C |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
22 from sat.core.log import getLogger |
3299
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
23 from sat.tools.common import data_format |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
24 from wokkel import disco, iwokkel, pubsub |
3028 | 25 from zope.interface import implementer |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 from twisted.internet import defer |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
27 from twisted.words.protocols.jabber import error as jabber_error, jid |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
28 from twisted.words.protocols.jabber.xmlstream import XMPPHandler |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 from twisted.words.xish import domish |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 log = getLogger(__name__) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
33 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 PLUGIN_INFO = { |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 C.PI_NAME: "List of Interest", |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 C.PI_IMPORT_NAME: "LIST_INTEREST", |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 C.PI_TYPE: "EXP", |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 C.PI_PROTOCOLS: [], |
3028 | 39 C.PI_DEPENDENCIES: ["XEP-0060", "XEP-0329"], |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 C.PI_RECOMMENDATIONS: [], |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 C.PI_MAIN: "ListInterest", |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 C.PI_HANDLER: "yes", |
3028 | 43 C.PI_DESCRIPTION: _("Experimental handling of interesting XMPP locations"), |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 } |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
45 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
46 NS_LIST_INTEREST = "https://salut-a-toi/protocol/list-interest:0" |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 class ListInterest(object): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 namespace = NS_LIST_INTEREST |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
52 def __init__(self, host): |
3028 | 53 log.info(_("List of Interest plugin initialization")) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 self.host = host |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 self._p = self.host.plugins["XEP-0060"] |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
56 host.bridge.addMethod( |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
57 "interestsList", |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
58 ".plugin", |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
59 in_sign="ssss", |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
60 out_sign="aa{ss}", |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
61 method=self._listInterests, |
3028 | 62 async_=True, |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
63 ) |
3299
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
64 host.bridge.addMethod( |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
65 "interestsRegisterFileSharing", |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
66 ".plugin", |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
67 in_sign="sssssss", |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
68 out_sign="", |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
69 method=self._registerFileSharing, |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
70 async_=True, |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
71 ) |
3303
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
72 host.bridge.addMethod( |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
73 "interestRetract", |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
74 ".plugin", |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
75 in_sign="sss", |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
76 out_sign="", |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
77 method=self._interestRetract, |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
78 async_=True, |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
79 ) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
80 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
81 def getHandler(self, client): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
82 return ListInterestHandler(self) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
83 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
84 @defer.inlineCallbacks |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 def createNode(self, client): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
86 try: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
87 # TODO: check auto-create, no need to create node first if available |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
88 options = {self._p.OPT_ACCESS_MODEL: self._p.ACCESS_WHITELIST} |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
89 yield self._p.createNode( |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
90 client, |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
91 client.jid.userhostJID(), |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
92 nodeIdentifier=NS_LIST_INTEREST, |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
93 options=options, |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 ) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
95 except jabber_error.StanzaError as e: |
3028 | 96 if e.condition == "conflict": |
97 log.debug(_("requested node already exists")) | |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
98 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
99 @defer.inlineCallbacks |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
100 def registerPubsub(self, client, namespace, service, node, item_id=None, |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
101 creator=False, name=None, element=None, extra=None): |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
102 """Register an interesting element in personal list |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
103 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
104 @param namespace(unicode): namespace of the interest |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
105 this is used as a cache, to avoid the need to retrieve the item only to get |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
106 its namespace |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
107 @param service(jid.JID): target pubsub service |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
108 @param node(unicode): target pubsub node |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
109 @param item_id(unicode, None): target pubsub id |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
110 @param creator(bool): True if client's profile is the creator of the node |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
111 This is used a cache, to avoid the need to retrieve affiliations |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
112 @param name(unicode, None): name of the interest |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
113 @param element(domish.Element, None): element to attach |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
114 may be used to cache some extra data |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
115 @param extra(dict, None): extra data, key can be: |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
116 - thumb_url: http(s) URL of a thumbnail |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
117 """ |
2940
ef554aca3eb1
plugin list interest: initialise extra with an empty dict if not set in registerPubsub
Goffi <goffi@goffi.org>
parents:
2936
diff
changeset
|
118 if extra is None: |
ef554aca3eb1
plugin list interest: initialise extra with an empty dict if not set in registerPubsub
Goffi <goffi@goffi.org>
parents:
2936
diff
changeset
|
119 extra = {} |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
120 yield self.createNode(client) |
3028 | 121 interest_elt = domish.Element((NS_LIST_INTEREST, "interest")) |
122 interest_elt["namespace"] = namespace | |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
123 if name is not None: |
3028 | 124 interest_elt['name'] = name |
125 thumb_url = extra.get('thumb_url') | |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
126 if thumb_url: |
3028 | 127 interest_elt['thumb_url'] = thumb_url |
128 pubsub_elt = interest_elt.addElement("pubsub") | |
129 pubsub_elt["service"] = service.full() | |
130 pubsub_elt["node"] = node | |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
131 if item_id is not None: |
3028 | 132 pubsub_elt["item"] = item_id |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
133 if creator: |
3028 | 134 pubsub_elt["creator"] = C.BOOL_TRUE |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
135 if element is not None: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
136 pubsub_elt.addChild(element) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
137 item_elt = pubsub.Item(payload=interest_elt) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
138 yield self._p.publish( |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
139 client, client.jid.userhostJID(), NS_LIST_INTEREST, items=[item_elt] |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
140 ) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
141 |
3299
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
142 def _registerFileSharing( |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
143 self, service, repos_type, namespace, path, name, extra_raw, |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
144 profile |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
145 ): |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
146 client = self.host.getClient(profile) |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
147 extra = data_format.deserialise(extra_raw) |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
148 |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
149 return defer.ensureDeferred(self.registerFileSharing( |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
150 client, jid.JID(service), repos_type or None, namespace or None, path or None, |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
151 name or None, extra |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
152 )) |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
153 |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
154 |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
155 async def registerFileSharing( |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
156 self, client, service, repos_type=None, namespace=None, path=None, name=None, |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
157 extra=None): |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
158 """Register an interesting file repository in personal list |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
159 |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
160 @param service(jid.JID): service of the file repository |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
161 @param repos_type(unicode): type of the repository |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
162 @param namespace(unicode, None): namespace of the repository |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
163 @param path(unicode, None): path of the repository |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
164 @param name(unicode, None): name of the repository |
3299
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
165 @param extra(dict, None): same as [registerPubsub] |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
166 """ |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
167 if extra is None: |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
168 extra = {} |
3299
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
169 await self.createNode(client) |
3028 | 170 interest_elt = domish.Element((NS_LIST_INTEREST, "interest")) |
171 interest_elt["namespace"] = self.host.getNamespace("fis") | |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
172 if name is not None: |
3028 | 173 interest_elt['name'] = name |
174 thumb_url = extra.get('thumb_url') | |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
175 if thumb_url: |
3028 | 176 interest_elt['thumb_url'] = thumb_url |
177 file_sharing_elt = interest_elt.addElement("file_sharing") | |
178 file_sharing_elt["service"] = service.full() | |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
179 if repos_type is not None: |
3028 | 180 file_sharing_elt["type"] = repos_type |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
181 if namespace is not None: |
3028 | 182 file_sharing_elt["namespace"] = namespace |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
183 if path is not None: |
3028 | 184 file_sharing_elt["path"] = path |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
185 item_elt = pubsub.Item(payload=interest_elt) |
3299
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
186 await self._p.publish( |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
187 client, client.jid.userhostJID(), NS_LIST_INTEREST, items=[item_elt] |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
188 ) |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
189 |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
190 def _listInterestsSerialise(self, interests_data): |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
191 interests = [] |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
192 for item_elt in interests_data[0]: |
3304
9a174abafdee
plugin list of interests: added `id` to data + fixed key conflict:
Goffi <goffi@goffi.org>
parents:
3303
diff
changeset
|
193 interest_data = {"id": item_elt['id']} |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
194 interest_elt = item_elt.interest |
3028 | 195 if interest_elt.hasAttribute('namespace'): |
196 interest_data['namespace'] = interest_elt.getAttribute('namespace') | |
197 if interest_elt.hasAttribute('name'): | |
198 interest_data['name'] = interest_elt.getAttribute('name') | |
199 if interest_elt.hasAttribute('thumb_url'): | |
200 interest_data['thumb_url'] = interest_elt.getAttribute('thumb_url') | |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
201 elt = interest_elt.firstChildElement() |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
202 if elt.uri != NS_LIST_INTEREST: |
3028 | 203 log.warning("unexpected child element, ignoring: {xml}".format( |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
204 xml = elt.toXml())) |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
205 continue |
3028 | 206 if elt.name == 'pubsub': |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
207 interest_data.update({ |
3028 | 208 "type": "pubsub", |
209 "service": elt['service'], | |
210 "node": elt['node'], | |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
211 }) |
3028 | 212 for attr in ('item', 'creator'): |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
213 if elt.hasAttribute(attr): |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
214 interest_data[attr] = elt[attr] |
3028 | 215 elif elt.name == 'file_sharing': |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
216 interest_data.update({ |
3028 | 217 "type": "file_sharing", |
218 "service": elt['service'], | |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
219 }) |
3028 | 220 if elt.hasAttribute('type'): |
221 interest_data['subtype'] = elt['type'] | |
3304
9a174abafdee
plugin list of interests: added `id` to data + fixed key conflict:
Goffi <goffi@goffi.org>
parents:
3303
diff
changeset
|
222 for attr in ('files_namespace', 'path'): |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
223 if elt.hasAttribute(attr): |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
224 interest_data[attr] = elt[attr] |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
225 else: |
3028 | 226 log.warning("unknown element, ignoring: {xml}".format(xml=elt.toXml())) |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
227 continue |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
228 interests.append(interest_data) |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
229 |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
230 return interests |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
231 |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
232 def _listInterests(self, service, node, namespace, profile): |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
233 service = jid.JID(service) if service else None |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
234 node = node or None |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
235 namespace = namespace or None |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
236 client = self.host.getClient(profile) |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
237 d = self.listInterests(client, service, node, namespace) |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
238 d.addCallback(self._listInterestsSerialise) |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
239 return d |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
240 |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
241 @defer.inlineCallbacks |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
242 def listInterests(self, client, service=None, node=None, namespace=None): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
243 """Retrieve list of interests |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
244 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
245 @param service(jid.JID, None): service to use |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
246 None to use own PEP |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
247 @param node(unicode, None): node to use |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
248 None to use default node |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
249 @param namespace(unicode, None): filter interests of this namespace |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
250 None to retrieve all interests |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
251 @return: same as [XEP_0060.getItems] |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
252 """ |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
253 # TODO: if a MAM filter were available, it would improve performances |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
254 if not node: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
255 node = NS_LIST_INTEREST |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
256 items, metadata = yield self._p.getItems(client, service, node) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
257 if namespace is not None: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
258 filtered_items = [] |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
259 for item in items: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
260 try: |
3028 | 261 interest_elt = next(item.elements(NS_LIST_INTEREST, "interest")) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
262 except StopIteration: |
3028 | 263 log.warning(_("Missing interest element: {xml}").format( |
3270
0c3b7ee2628f
plugin list of interest: fixed wrong variable used in a log
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
264 xml=item.toXml())) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
265 continue |
3028 | 266 if interest_elt.getAttribute("namespace") == namespace: |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
267 filtered_items.append(item) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
268 items = filtered_items |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
269 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
270 defer.returnValue((items, metadata)) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
271 |
3303
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
272 def _interestRetract(self, service_s, item_id, profile_key): |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
273 d = self._p._retractItem( |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
274 service_s, NS_LIST_INTEREST, item_id, True, profile_key) |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
275 d.addCallback(lambda __: None) |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
276 return d |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
277 |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
278 |
3028 | 279 @implementer(iwokkel.IDisco) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
280 class ListInterestHandler(XMPPHandler): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
281 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
282 def __init__(self, plugin_parent): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
283 self.plugin_parent = plugin_parent |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
284 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
285 def getDiscoInfo(self, requestor, target, nodeIdentifier=""): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
286 return [ |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
287 disco.DiscoFeature(NS_LIST_INTEREST), |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
288 ] |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
289 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
290 def getDiscoItems(self, requestor, target, nodeIdentifier=""): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
291 return [] |