Mercurial > libervia-backend
annotate sat/plugins/plugin_exp_list_of_interest.py @ 3527:bbf92ef05f38
plugin XEP-0166, XEP-0234: better management of `terminate`:
- new `text` argument to specify human readable reason of termination
- handling of `FirstError` (used when a error happens in a DeferredList)
- handling of `StanzaError`
- (XEP-0234): show human readable text of the reason if present
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 05 May 2021 15:37:33 +0200 |
parents | be6d91572633 |
children | edc79cefe968 |
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) |
3479 | 5 # Copyright (C) 2009-2021 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 |
3350
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
22 from sat.core.xmpp import SatXMPPEntity |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
23 from sat.core import exceptions |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
24 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
|
25 from sat.tools.common import data_format |
3322
56ee491c0df6
plugin list for interest: build ID using URI or file path metadata:
Goffi <goffi@goffi.org>
parents:
3304
diff
changeset
|
26 from sat.tools.common import uri |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 from wokkel import disco, iwokkel, pubsub |
3028 | 28 from zope.interface import implementer |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 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
|
30 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
|
31 from twisted.words.protocols.jabber.xmlstream import XMPPHandler |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 from twisted.words.xish import domish |
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 log = getLogger(__name__) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 PLUGIN_INFO = { |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 C.PI_NAME: "List of Interest", |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 C.PI_IMPORT_NAME: "LIST_INTEREST", |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 C.PI_TYPE: "EXP", |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 C.PI_PROTOCOLS: [], |
3350
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
42 C.PI_DEPENDENCIES: ["XEP-0060", "XEP-0329", "XEP-0106"], |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 C.PI_RECOMMENDATIONS: [], |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 C.PI_MAIN: "ListInterest", |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
45 C.PI_HANDLER: "yes", |
3028 | 46 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
|
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 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
|
50 |
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 class ListInterest(object): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 namespace = NS_LIST_INTEREST |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 def __init__(self, host): |
3028 | 56 log.info(_("List of Interest plugin initialization")) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 self.host = host |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 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
|
59 host.bridge.addMethod( |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
60 "interestsList", |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
61 ".plugin", |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
62 in_sign="ssss", |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
63 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
|
64 method=self._listInterests, |
3028 | 65 async_=True, |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
66 ) |
3299
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
67 host.bridge.addMethod( |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
68 "interestsRegisterFileSharing", |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
69 ".plugin", |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
70 in_sign="sssssss", |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
71 out_sign="", |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
72 method=self._registerFileSharing, |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
73 async_=True, |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
74 ) |
3303
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
75 host.bridge.addMethod( |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
76 "interestRetract", |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
77 ".plugin", |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
78 in_sign="sss", |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
79 out_sign="", |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
80 method=self._interestRetract, |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
81 async_=True, |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
82 ) |
2912
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 def getHandler(self, client): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 return ListInterestHandler(self) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
86 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
87 @defer.inlineCallbacks |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
88 def createNode(self, client): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
89 try: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
90 # 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
|
91 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
|
92 yield self._p.createNode( |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
93 client, |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 client.jid.userhostJID(), |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
95 nodeIdentifier=NS_LIST_INTEREST, |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
96 options=options, |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
97 ) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
98 except jabber_error.StanzaError as e: |
3028 | 99 if e.condition == "conflict": |
100 log.debug(_("requested node already exists")) | |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
101 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
102 @defer.inlineCallbacks |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
103 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
|
104 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
|
105 """Register an interesting element in personal list |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
106 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
107 @param namespace(unicode): namespace of the interest |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
108 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
|
109 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
|
110 @param service(jid.JID): target pubsub service |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
111 @param node(unicode): target pubsub node |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
112 @param item_id(unicode, None): target pubsub id |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
113 @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
|
114 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
|
115 @param name(unicode, None): name of the interest |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
116 @param element(domish.Element, None): element to attach |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
117 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
|
118 @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
|
119 - 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
|
120 """ |
2940
ef554aca3eb1
plugin list interest: initialise extra with an empty dict if not set in registerPubsub
Goffi <goffi@goffi.org>
parents:
2936
diff
changeset
|
121 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
|
122 extra = {} |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
123 yield self.createNode(client) |
3028 | 124 interest_elt = domish.Element((NS_LIST_INTEREST, "interest")) |
125 interest_elt["namespace"] = namespace | |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
126 if name is not None: |
3028 | 127 interest_elt['name'] = name |
128 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
|
129 if thumb_url: |
3028 | 130 interest_elt['thumb_url'] = thumb_url |
131 pubsub_elt = interest_elt.addElement("pubsub") | |
132 pubsub_elt["service"] = service.full() | |
133 pubsub_elt["node"] = node | |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
134 if item_id is not None: |
3028 | 135 pubsub_elt["item"] = item_id |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
136 if creator: |
3028 | 137 pubsub_elt["creator"] = C.BOOL_TRUE |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
138 if element is not None: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
139 pubsub_elt.addChild(element) |
3322
56ee491c0df6
plugin list for interest: build ID using URI or file path metadata:
Goffi <goffi@goffi.org>
parents:
3304
diff
changeset
|
140 uri_kwargs = { |
3344
7515e1878004
plugin list of interest: fixed registerPubsub
Goffi <goffi@goffi.org>
parents:
3322
diff
changeset
|
141 "path": service.full(), |
3322
56ee491c0df6
plugin list for interest: build ID using URI or file path metadata:
Goffi <goffi@goffi.org>
parents:
3304
diff
changeset
|
142 "node": node |
56ee491c0df6
plugin list for interest: build ID using URI or file path metadata:
Goffi <goffi@goffi.org>
parents:
3304
diff
changeset
|
143 } |
56ee491c0df6
plugin list for interest: build ID using URI or file path metadata:
Goffi <goffi@goffi.org>
parents:
3304
diff
changeset
|
144 if item_id: |
56ee491c0df6
plugin list for interest: build ID using URI or file path metadata:
Goffi <goffi@goffi.org>
parents:
3304
diff
changeset
|
145 uri_kwargs['id'] = item_id |
56ee491c0df6
plugin list for interest: build ID using URI or file path metadata:
Goffi <goffi@goffi.org>
parents:
3304
diff
changeset
|
146 interest_uri = uri.buildXMPPUri("pubsub", **uri_kwargs) |
56ee491c0df6
plugin list for interest: build ID using URI or file path metadata:
Goffi <goffi@goffi.org>
parents:
3304
diff
changeset
|
147 # we use URI of the interest as item id to avoid duplicates |
56ee491c0df6
plugin list for interest: build ID using URI or file path metadata:
Goffi <goffi@goffi.org>
parents:
3304
diff
changeset
|
148 item_elt = pubsub.Item(interest_uri, payload=interest_elt) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
149 yield self._p.publish( |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
150 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
|
151 ) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
152 |
3299
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
153 def _registerFileSharing( |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
154 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
|
155 profile |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
156 ): |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
157 client = self.host.getClient(profile) |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
158 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
|
159 |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
160 return defer.ensureDeferred(self.registerFileSharing( |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
161 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
|
162 name or None, extra |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
163 )) |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
164 |
3350
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
165 def normaliseFileSharingService(self, client, service): |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
166 # FIXME: Q&D fix as the bare file sharing service JID will lead to user own |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
167 # repository, which thus would not be the same for the host and the guest. |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
168 # By specifying the user part, we for the use of the host repository. |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
169 # A cleaner way should be implemented |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
170 if service.user is None: |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
171 service.user = self.host.plugins['XEP-0106'].escape(client.jid.user) |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
172 |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
173 def getFileSharingId(self, service, namespace, path): |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
174 return f"{service}_{namespace or ''}_{path or ''}" |
3299
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
175 |
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
176 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
|
177 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
|
178 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
|
179 """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
|
180 |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
181 @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
|
182 @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
|
183 @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
|
184 @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
|
185 @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
|
186 @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
|
187 """ |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
188 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
|
189 extra = {} |
3350
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
190 self.normaliseFileSharingService(client, service) |
3299
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
191 await self.createNode(client) |
3350
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
192 item_id = self.getFileSharingId(service, namespace, path) |
3028 | 193 interest_elt = domish.Element((NS_LIST_INTEREST, "interest")) |
194 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
|
195 if name is not None: |
3028 | 196 interest_elt['name'] = name |
197 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
|
198 if thumb_url: |
3028 | 199 interest_elt['thumb_url'] = thumb_url |
3350
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
200 |
3028 | 201 file_sharing_elt = interest_elt.addElement("file_sharing") |
202 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
|
203 if repos_type is not None: |
3028 | 204 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
|
205 if namespace is not None: |
3028 | 206 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
|
207 if path is not None: |
3028 | 208 file_sharing_elt["path"] = path |
3322
56ee491c0df6
plugin list for interest: build ID using URI or file path metadata:
Goffi <goffi@goffi.org>
parents:
3304
diff
changeset
|
209 item_elt = pubsub.Item(item_id, payload=interest_elt) |
3299
83795ff8a633
plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents:
3270
diff
changeset
|
210 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
|
211 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
|
212 ) |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
213 |
2933
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
214 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
|
215 interests = [] |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
216 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
|
217 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
|
218 interest_elt = item_elt.interest |
3028 | 219 if interest_elt.hasAttribute('namespace'): |
220 interest_data['namespace'] = interest_elt.getAttribute('namespace') | |
221 if interest_elt.hasAttribute('name'): | |
222 interest_data['name'] = interest_elt.getAttribute('name') | |
223 if interest_elt.hasAttribute('thumb_url'): | |
224 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
|
225 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
|
226 if elt.uri != NS_LIST_INTEREST: |
3028 | 227 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
|
228 xml = elt.toXml())) |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
229 continue |
3028 | 230 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
|
231 interest_data.update({ |
3028 | 232 "type": "pubsub", |
233 "service": elt['service'], | |
234 "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
|
235 }) |
3028 | 236 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
|
237 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
|
238 interest_data[attr] = elt[attr] |
3028 | 239 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
|
240 interest_data.update({ |
3028 | 241 "type": "file_sharing", |
242 "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
|
243 }) |
3028 | 244 if elt.hasAttribute('type'): |
245 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
|
246 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
|
247 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
|
248 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
|
249 else: |
3028 | 250 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
|
251 continue |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
252 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
|
253 |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
254 return interests |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
255 |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
256 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
|
257 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
|
258 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
|
259 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
|
260 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
|
261 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
|
262 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
|
263 return d |
47df940738a7
plugin list of interest: added an interestsList bridge method + handle thumb_url
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
264 |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
265 @defer.inlineCallbacks |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
266 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
|
267 """Retrieve list of interests |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
268 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
269 @param service(jid.JID, None): service to use |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
270 None to use own PEP |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
271 @param node(unicode, None): node to use |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
272 None to use default node |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
273 @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
|
274 None to retrieve all interests |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
275 @return: same as [XEP_0060.getItems] |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
276 """ |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
277 # 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
|
278 if not node: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
279 node = NS_LIST_INTEREST |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
280 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
|
281 if namespace is not None: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
282 filtered_items = [] |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
283 for item in items: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
284 try: |
3028 | 285 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
|
286 except StopIteration: |
3028 | 287 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
|
288 xml=item.toXml())) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
289 continue |
3028 | 290 if interest_elt.getAttribute("namespace") == namespace: |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
291 filtered_items.append(item) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
292 items = filtered_items |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
293 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
294 defer.returnValue((items, metadata)) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
295 |
3303
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
296 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
|
297 d = self._p._retractItem( |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
298 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
|
299 d.addCallback(lambda __: None) |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
300 return d |
f17379123571
plugin list of interest: new "interestRetract" method
Goffi <goffi@goffi.org>
parents:
3299
diff
changeset
|
301 |
3350
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
302 async def get(self, client: SatXMPPEntity, item_id: str) -> dict: |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
303 """Retrieve a specific interest in profile's list""" |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
304 items_data = await self._p.getItems(client, None, NS_LIST_INTEREST, item_ids=[item_id]) |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
305 try: |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
306 return self._listInterestsSerialise(items_data)[0] |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
307 except IndexError: |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
308 raise exceptions.NotFound |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3344
diff
changeset
|
309 |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
310 |
3028 | 311 @implementer(iwokkel.IDisco) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
312 class ListInterestHandler(XMPPHandler): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
313 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
314 def __init__(self, plugin_parent): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
315 self.plugin_parent = plugin_parent |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
316 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
317 def getDiscoInfo(self, requestor, target, nodeIdentifier=""): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
318 return [ |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
319 disco.DiscoFeature(NS_LIST_INTEREST), |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
320 ] |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
321 |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
322 def getDiscoItems(self, requestor, target, nodeIdentifier=""): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
323 return [] |