Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_exp_invitation.py @ 4118:07370d2a9bde
plugin XEP-0167: keep media order when starting a call:
media content order is relevant when building Jingle contents/SDP notably for bundling.
This patch fixes the previous behaviour of always using the same order by keeping the
order of the data (i.e. order of original SDP offer). Previous behaviour could lead to
call failure.
rel 424
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 03 Oct 2023 15:15:24 +0200 |
parents | 4b842c1fb686 |
children | 0d7bb4df2343 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
3359
000b6722bd35
plugin XEP-0329: added `FISCreateDir` method:
Goffi <goffi@goffi.org>
parents:
3351
diff
changeset
|
3 # SàT plugin to manage invitations |
3479 | 4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
2231 | 5 |
6 # This program is free software: you can redistribute it and/or modify | |
7 # it under the terms of the GNU Affero General Public License as published by | |
8 # the Free Software Foundation, either version 3 of the License, or | |
9 # (at your option) any later version. | |
10 | |
11 # This program is distributed in the hope that it will be useful, | |
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 # GNU Affero General Public License for more details. | |
15 | |
16 # You should have received a copy of the GNU Affero General Public License | |
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
18 | |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
19 from typing import Optional |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
20 from zope.interface import implementer |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
21 from twisted.internet import defer |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
22 from twisted.words.protocols.jabber import jid |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
23 from twisted.words.protocols.jabber.xmlstream import XMPPHandler |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
24 from wokkel import disco, iwokkel |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
25 from libervia.backend.core.i18n import _ |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
26 from libervia.backend.core import exceptions |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
27 from libervia.backend.core.constants import Const as C |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
28 from libervia.backend.core.log import getLogger |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
29 from libervia.backend.core.xmpp import SatXMPPEntity |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
30 from libervia.backend.tools import utils |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
31 |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
32 log = getLogger(__name__) |
2231 | 33 |
34 | |
35 PLUGIN_INFO = { | |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
36 C.PI_NAME: "Invitation", |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
37 C.PI_IMPORT_NAME: "INVITATION", |
2231 | 38 C.PI_TYPE: "EXP", |
39 C.PI_PROTOCOLS: [], | |
3781
e2a1ac1afb38
plugin invitation: use `store` hint to be sure that the invitation is archived
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
40 C.PI_DEPENDENCIES: ["XEP-0060", "XEP-0329", "XEP-0334", "LIST_INTEREST"], |
3324
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
41 C.PI_RECOMMENDATIONS: ["EMAIL_INVITATION"], |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
42 C.PI_MAIN: "Invitation", |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
43 C.PI_HANDLER: "yes", |
3028 | 44 C.PI_DESCRIPTION: _("Experimental handling of invitations"), |
2231 | 45 } |
46 | |
3028 | 47 NS_INVITATION = "https://salut-a-toi/protocol/invitation:0" |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
48 INVITATION = '/message/invitation[@xmlns="{ns_invit}"]'.format( |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
49 ns_invit=NS_INVITATION |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
50 ) |
3028 | 51 NS_INVITATION_LIST = NS_INVITATION + "#list" |
2231 | 52 |
53 | |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
54 class Invitation(object): |
2231 | 55 |
56 def __init__(self, host): | |
3028 | 57 log.info(_("Invitation plugin initialization")) |
2231 | 58 self.host = host |
59 self._p = self.host.plugins["XEP-0060"] | |
3781
e2a1ac1afb38
plugin invitation: use `store` hint to be sure that the invitation is archived
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
60 self._h = self.host.plugins["XEP-0334"] |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
61 # map from namespace of the invitation to callback handling it |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
62 self._ns_cb = {} |
2231 | 63 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
64 def get_handler(self, client): |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
65 return PubsubInvitationHandler(self) |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
66 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
67 def register_namespace(self, namespace, callback): |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
68 """Register a callback for a namespace |
2243
5e12fc5ae52a
plugin events: separation of event node and invitees node
Goffi <goffi@goffi.org>
parents:
2231
diff
changeset
|
69 |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
70 @param namespace(unicode): namespace handled |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
71 @param callback(callbable): method handling the invitation |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
72 For pubsub invitation, it will be called with following arguments: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
73 - client |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
74 - name(unicode, None): name of the event |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
75 - extra(dict): extra data |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
76 - service(jid.JID): pubsub service jid |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
77 - node(unicode): pubsub node |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
78 - item_id(unicode, None): pubsub item id |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
79 - item_elt(domish.Element): item of the invitation |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
80 For file sharing invitation, it will be called with following arguments: |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
81 - client |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
82 - name(unicode, None): name of the repository |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
83 - extra(dict): extra data |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
84 - service(jid.JID): service jid 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
|
85 - repos_type(unicode): type of the repository, can be: |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
86 - files: generic file sharing |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
87 - photos: photos album |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
88 - 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
|
89 - path(unicode, None): path of the repository |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
90 @raise exceptions.ConflictError: this namespace is already registered |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
91 """ |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
92 if namespace in self._ns_cb: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
93 raise exceptions.ConflictError( |
3028 | 94 "invitation namespace {namespace} is already register with {callback}" |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
95 .format(namespace=namespace, callback=self._ns_cb[namespace])) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
96 self._ns_cb[namespace] = callback |
2231 | 97 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
98 def _generate_base_invitation(self, client, invitee_jid, name, extra): |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
99 """Generate common mess_data end invitation_elt |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
100 |
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
101 @param invitee_jid(jid.JID): entitee to send invitation to |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
102 @param name(unicode, None): name of the shared repository |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
103 @param extra(dict, None): extra data, where key can be: |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
104 - thumb_url: URL of a thumbnail |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
105 @return (tuple[dict, domish.Element): mess_data and invitation_elt |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
106 """ |
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
107 mess_data = { |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
108 "from": client.jid, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
109 "to": invitee_jid, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
110 "uid": "", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
111 "message": {}, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
112 "type": C.MESS_TYPE_CHAT, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
113 "subject": {}, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
114 "extra": {}, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
115 } |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
116 client.generate_message_xml(mess_data) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
117 self._h.add_hint_elements(mess_data["xml"], [self._h.HINT_STORE]) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
118 invitation_elt = mess_data["xml"].addElement("invitation", NS_INVITATION) |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
119 if name is not None: |
3028 | 120 invitation_elt["name"] = name |
121 thumb_url = extra.get('thumb_url') | |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
122 if thumb_url: |
3028 | 123 if not thumb_url.startswith('http'): |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
124 log.warning( |
3028 | 125 "only http URLs are allowed for thumbnails, got {url}, ignoring" |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
126 .format(url=thumb_url)) |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
127 else: |
3028 | 128 invitation_elt['thumb_url'] = thumb_url |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
129 return mess_data, invitation_elt |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
130 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
131 def send_pubsub_invitation( |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
132 self, |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
133 client: SatXMPPEntity, |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
134 invitee_jid: jid.JID, |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
135 service: jid.JID, |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
136 node: str, |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
137 item_id: Optional[str], |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
138 name: Optional[str], |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
139 extra: Optional[dict] |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
140 ) -> 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
|
141 """Send an pubsub invitation in a <message> stanza |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
142 |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
143 @param invitee_jid: entitee to send invitation to |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
144 @param service: pubsub service |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
145 @param node: pubsub node |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
146 @param item_id: pubsub id |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
147 None when the invitation is for a whole node |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
148 @param name: see [_generate_base_invitation] |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
149 @param extra: see [_generate_base_invitation] |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
150 """ |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
151 if extra is None: |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
152 extra = {} |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
153 mess_data, invitation_elt = self._generate_base_invitation( |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
154 client, invitee_jid, name, extra) |
3028 | 155 pubsub_elt = invitation_elt.addElement("pubsub") |
156 pubsub_elt["service"] = service.full() | |
157 pubsub_elt["node"] = node | |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
158 if item_id is None: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
159 try: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
160 namespace = extra.pop("namespace") |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
161 except KeyError: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
162 raise exceptions.DataError('"namespace" key is missing in "extra" data') |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
163 node_data_elt = pubsub_elt.addElement("node_data") |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
164 node_data_elt["namespace"] = namespace |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
165 try: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
166 node_data_elt.addChild(extra["element"]) |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
167 except KeyError: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
168 pass |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
169 else: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
170 pubsub_elt["item"] = item_id |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
171 if "element" in extra: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
172 invitation_elt.addChild(extra.pop("element")) |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
173 client.send(mess_data["xml"]) |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
174 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
175 async def send_file_sharing_invitation( |
3324
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
176 self, client, invitee_jid, service, repos_type=None, namespace=None, path=None, |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
177 name=None, extra=None |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
178 ): |
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 """Send a file sharing invitation in a <message> stanza |
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 invitee_jid(jid.JID): entitee to send invitation to |
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 service(jid.JID): file sharing service |
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 repos_type(unicode, None): type of files repository, can be: |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
184 - None, "files": files sharing |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
185 - "photos": photos album |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
186 @param namespace(unicode, None): namespace of the shared repository |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
187 @param path(unicode, None): path of the shared repository |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
188 @param name(unicode, None): see [_generate_base_invitation] |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
189 @param extra(dict, None): see [_generate_base_invitation] |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
190 """ |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
191 if extra is None: |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
192 extra = {} |
3350
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3324
diff
changeset
|
193 li_plg = self.host.plugins["LIST_INTEREST"] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
194 li_plg.normalise_file_sharing_service(client, service) |
3324
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
195 |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
196 # FIXME: not the best place to adapt permission, but it's necessary to check them |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
197 # for UX |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
198 try: |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
199 await self.host.plugins['XEP-0329'].affiliationsSet( |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
200 client, service, namespace, path, {invitee_jid: "member"} |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
201 ) |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
202 except Exception as e: |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
203 log.warning(f"Can't set affiliation: {e}") |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
204 |
3351
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
205 if "thumb_url" not in extra: |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
206 # we have no thumbnail, we check in our own list of interests if there is one |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
207 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
208 item_id = li_plg.get_file_sharing_id(service, namespace, path) |
3351
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
209 own_interest = await li_plg.get(client, item_id) |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
210 except exceptions.NotFound: |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
211 log.debug( |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
212 "no thumbnail found for file sharing interest at " |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
213 f"[{service}/{namespace}]{path}" |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
214 ) |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
215 else: |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
216 try: |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
217 extra['thumb_url'] = own_interest['thumb_url'] |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
218 except KeyError: |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
219 pass |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
220 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
221 mess_data, invitation_elt = self._generate_base_invitation( |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
222 client, invitee_jid, name, extra) |
3028 | 223 file_sharing_elt = invitation_elt.addElement("file_sharing") |
224 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
|
225 if repos_type is not None: |
3028 | 226 if repos_type not in ("files", "photos"): |
227 msg = "unknown repository type: {repos_type}".format( | |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
228 repos_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
|
229 log.warning(msg) |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
230 raise exceptions.DateError(msg) |
3028 | 231 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
|
232 if namespace is not None: |
3028 | 233 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
|
234 if path is not None: |
3028 | 235 file_sharing_elt["path"] = path |
3324
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
236 client.send(mess_data["xml"]) |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
237 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
238 async def _parse_pubsub_elt(self, client, pubsub_elt): |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
239 try: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
240 service = jid.JID(pubsub_elt["service"]) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
241 node = pubsub_elt["node"] |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
242 except (RuntimeError, KeyError): |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
243 raise exceptions.DataError("Bad invitation, ignoring") |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
244 |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
245 item_id = pubsub_elt.getAttribute("item") |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
246 |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
247 if item_id is not None: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
248 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
249 items, metadata = await self._p.get_items( |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
250 client, service, node, item_ids=[item_id] |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
251 ) |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
252 except Exception as e: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
253 log.warning(_("Can't get item linked with invitation: {reason}").format( |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
254 reason=e)) |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
255 try: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
256 item_elt = items[0] |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
257 except IndexError: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
258 log.warning(_("Invitation was linking to a non existing item")) |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
259 raise exceptions.DataError |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
260 |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
261 try: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
262 namespace = item_elt.firstChildElement().uri |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
263 except Exception as e: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
264 log.warning(_("Can't retrieve namespace of invitation: {reason}").format( |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
265 reason = e)) |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
266 raise exceptions.DataError |
2287
ea869f30f204
plugin events: added eventInvite command as a helper for the complex invitation workflow:
Goffi <goffi@goffi.org>
parents:
2272
diff
changeset
|
267 |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
268 args = [service, node, item_id, item_elt] |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
269 else: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
270 try: |
3859
3ef988734869
core: fix calls to `domish.Element.elements`:
Goffi <goffi@goffi.org>
parents:
3781
diff
changeset
|
271 node_data_elt = next(pubsub_elt.elements(NS_INVITATION, "node_data")) |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
272 except StopIteration: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
273 raise exceptions.DataError("Bad invitation, ignoring") |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
274 namespace = node_data_elt['namespace'] |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
275 args = [service, node, None, node_data_elt] |
2287
ea869f30f204
plugin events: added eventInvite command as a helper for the complex invitation workflow:
Goffi <goffi@goffi.org>
parents:
2272
diff
changeset
|
276 |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
277 return namespace, args |
2287
ea869f30f204
plugin events: added eventInvite command as a helper for the complex invitation workflow:
Goffi <goffi@goffi.org>
parents:
2272
diff
changeset
|
278 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
279 async def _parse_file_sharing_elt(self, client, file_sharing_elt): |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
280 try: |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
281 service = jid.JID(file_sharing_elt["service"]) |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
282 except (RuntimeError, KeyError): |
3028 | 283 log.warning(_("Bad invitation, ignoring")) |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
284 raise exceptions.DataError |
3028 | 285 repos_type = file_sharing_elt.getAttribute("type", "files") |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
286 sharing_ns = file_sharing_elt.getAttribute("namespace") |
3028 | 287 path = file_sharing_elt.getAttribute("path") |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
288 args = [service, repos_type, sharing_ns, path] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
289 ns_fis = self.host.get_namespace("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
|
290 return ns_fis, args |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
291 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
292 async def on_invitation(self, message_elt, client): |
3028 | 293 log.debug("invitation received [{profile}]".format(profile=client.profile)) |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
294 invitation_elt = message_elt.invitation |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
295 |
3028 | 296 name = invitation_elt.getAttribute("name") |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
297 extra = {} |
3028 | 298 if invitation_elt.hasAttribute("thumb_url"): |
299 extra['thumb_url'] = invitation_elt['thumb_url'] | |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
300 |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
301 for elt in invitation_elt.elements(): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
302 if elt.uri != NS_INVITATION: |
3028 | 303 log.warning("unexpected element: {xml}".format(xml=elt.toXml())) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
304 continue |
3028 | 305 if elt.name == "pubsub": |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
306 method = self._parse_pubsub_elt |
3028 | 307 elif elt.name == "file_sharing": |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
308 method = self._parse_file_sharing_elt |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
309 else: |
3028 | 310 log.warning("not implemented invitation element: {xml}".format( |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
311 xml = elt.toXml())) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
312 continue |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
313 try: |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
314 namespace, args = await method(client, elt) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
315 except exceptions.DataError: |
3028 | 316 log.warning("Can't parse invitation element: {xml}".format( |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
317 xml = elt.toXml())) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
318 continue |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
319 |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
320 try: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
321 cb = self._ns_cb[namespace] |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
322 except KeyError: |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
323 log.warning(_( |
3028 | 324 'No handler for namespace "{namespace}", invitation ignored') |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
325 .format(namespace=namespace)) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
326 else: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
327 await utils.as_deferred(cb, client, namespace, name, extra, *args) |
2287
ea869f30f204
plugin events: added eventInvite command as a helper for the complex invitation workflow:
Goffi <goffi@goffi.org>
parents:
2272
diff
changeset
|
328 |
ea869f30f204
plugin events: added eventInvite command as a helper for the complex invitation workflow:
Goffi <goffi@goffi.org>
parents:
2272
diff
changeset
|
329 |
3028 | 330 @implementer(iwokkel.IDisco) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
331 class PubsubInvitationHandler(XMPPHandler): |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
332 |
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
333 def __init__(self, plugin_parent): |
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
334 self.plugin_parent = plugin_parent |
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
335 |
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
336 def connectionInitialized(self): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
337 self.xmlstream.addObserver( |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
338 INVITATION, |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
339 lambda message_elt: defer.ensureDeferred( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3859
diff
changeset
|
340 self.plugin_parent.on_invitation(message_elt, client=self.parent) |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
341 ), |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
342 ) |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
343 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
344 def getDiscoInfo(self, requestor, target, nodeIdentifier=""): |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
345 return [ |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
346 disco.DiscoFeature(NS_INVITATION), |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
347 ] |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
348 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
349 def getDiscoItems(self, requestor, target, nodeIdentifier=""): |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
350 return [] |