Mercurial > libervia-backend
annotate sat/plugins/plugin_comp_file_sharing_management.py @ 3853:a56d5ad466b3
component AP gateway: fix wrong exception + use of mb_data["xml"] when it may be absent
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 14 Jul 2022 12:55:30 +0200 |
parents | 888109774673 |
children | 7af29260ecb8 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
3531
a8259a1f89b2
component file sharing (management): add values of `quota` and `used` size on result form
Goffi <goffi@goffi.org>
parents:
3529
diff
changeset
|
3 # Libervia plugin to manage file sharing component through ad-hoc commands |
3479 | 4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
5 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 # This program is free software: you can redistribute it and/or modify |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # it under the terms of the GNU Affero General Public License as published by |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # the Free Software Foundation, either version 3 of the License, or |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 # (at your option) any later version. |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 # This program is distributed in the hope that it will be useful, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 # GNU Affero General Public License for more details. |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 # You should have received a copy of the GNU Affero General Public License |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 import os.path |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 from functools import partial |
3531
a8259a1f89b2
component file sharing (management): add values of `quota` and `used` size on result form
Goffi <goffi@goffi.org>
parents:
3529
diff
changeset
|
21 from wokkel import data_form |
a8259a1f89b2
component file sharing (management): add values of `quota` and `used` size on result form
Goffi <goffi@goffi.org>
parents:
3529
diff
changeset
|
22 from twisted.internet import defer |
a8259a1f89b2
component file sharing (management): add values of `quota` and `used` size on result form
Goffi <goffi@goffi.org>
parents:
3529
diff
changeset
|
23 from twisted.words.protocols.jabber import jid |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
24 from sat.core.i18n import _, D_ |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
25 from sat.core import exceptions |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 from sat.core.constants import Const as C |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 from sat.core.log import getLogger |
3529
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
28 from sat.tools.common import utils |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 log = getLogger(__name__) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
33 PLUGIN_INFO = { |
3028 | 34 C.PI_NAME: "File Sharing Management", |
35 C.PI_IMPORT_NAME: "FILE_SHARING_MANAGEMENT", | |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 C.PI_MODES: [C.PLUG_MODE_COMPONENT], |
3028 | 37 C.PI_TYPE: "EXP", |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 C.PI_PROTOCOLS: [], |
3028 | 39 C.PI_DEPENDENCIES: ["XEP-0050", "XEP-0264"], |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 C.PI_RECOMMENDATIONS: [], |
3028 | 41 C.PI_MAIN: "FileSharingManagement", |
42 C.PI_HANDLER: "no", | |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 C.PI_DESCRIPTION: _( |
3028 | 44 "Experimental handling of file management for file sharing. This plugins allows " |
45 "to change permissions of stored files/directories or remove them." | |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
46 ), |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 } |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 |
3028 | 49 NS_FILE_MANAGEMENT = "https://salut-a-toi.org/protocol/file-management:0" |
50 NS_FILE_MANAGEMENT_PERM = "https://salut-a-toi.org/protocol/file-management:0#perm" | |
51 NS_FILE_MANAGEMENT_DELETE = "https://salut-a-toi.org/protocol/file-management:0#delete" | |
52 NS_FILE_MANAGEMENT_THUMB = "https://salut-a-toi.org/protocol/file-management:0#thumb" | |
3529
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
53 NS_FILE_MANAGEMENT_QUOTA = "https://salut-a-toi.org/protocol/file-management:0#quota" |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 class WorkflowError(Exception): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 """Raised when workflow can't be completed""" |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 def __init__(self, err_args): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
60 """ |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
61 @param err_args(tuple): arguments to return to finish the command workflow |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 """ |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
63 Exception.__init__(self) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
64 self.err_args = err_args |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
65 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
66 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
67 class FileSharingManagement(object): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
68 # This is a temporary way (Q&D) to handle stored files, a better way (using pubsub |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
69 # syntax?) should be elaborated and proposed as a standard. |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
70 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 def __init__(self, host): |
3028 | 72 log.info(_("File Sharing Management plugin initialization")) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
73 self.host = host |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
74 self._c = host.plugins["XEP-0050"] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
75 self._t = host.plugins["XEP-0264"] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
76 self.files_path = host.getLocalPath(None, C.FILES_DIR, profile=False) |
3305
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
77 host.bridge.addMethod( |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
78 "fileSharingDelete", |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
79 ".plugin", |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
80 in_sign="ssss", |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
81 out_sign="", |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
82 method=self._delete, |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
83 async_=True, |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
84 ) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
86 def profileConnected(self, client): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
87 self._c.addAdHocCommand( |
3028 | 88 client, self._onChangeFile, "Change Permissions of File(s)", |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
89 node=NS_FILE_MANAGEMENT_PERM, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
90 allowed_magics=C.ENTITY_ALL, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
91 ) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
92 self._c.addAdHocCommand( |
3028 | 93 client, self._onDeleteFile, "Delete File(s)", |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 node=NS_FILE_MANAGEMENT_DELETE, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
95 allowed_magics=C.ENTITY_ALL, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
96 ) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
97 self._c.addAdHocCommand( |
3028 | 98 client, self._onGenThumbnails, "Generate Thumbnails", |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
99 node=NS_FILE_MANAGEMENT_THUMB, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
100 allowed_magics=C.ENTITY_ALL, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
101 ) |
3529
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
102 self._c.addAdHocCommand( |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
103 client, self._onQuota, "Get Quota", |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
104 node=NS_FILE_MANAGEMENT_QUOTA, |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
105 allowed_magics=C.ENTITY_ALL, |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
106 ) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
107 |
3305
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
108 def _delete(self, service_jid_s, path, namespace, profile): |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
109 client = self.host.getClient(profile) |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
110 service_jid = jid.JID(service_jid_s) if service_jid_s else None |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
111 return defer.ensureDeferred(self._c.sequence( |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
112 client, |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
113 [{"path": path, "namespace": namespace}, {"confirm": True}], |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
114 NS_FILE_MANAGEMENT_DELETE, |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
115 service_jid, |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
116 )) |
04a7d77ed86f
plugin file sharing management: added a fileSharingDelete method
Goffi <goffi@goffi.org>
parents:
3298
diff
changeset
|
117 |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
118 def _err(self, reason): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
119 """Helper method to get argument to return for error |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
120 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
121 workflow will be interrupted with an error note |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
122 @param reason(unicode): reason of the error |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
123 @return (tuple): arguments to use in defer.returnValue |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
124 """ |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
125 status = self._c.STATUS.COMPLETED |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
126 payload = None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
127 note = (self._c.NOTE.ERROR, reason) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
128 return payload, status, None, note |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
129 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
130 def _getRootArgs(self): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
131 """Create the form to select the file to use |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
132 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
133 @return (tuple): arguments to use in defer.returnValue |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
134 """ |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
135 status = self._c.STATUS.EXECUTING |
3028 | 136 form = data_form.Form("form", title="File Management", |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
137 formNamespace=NS_FILE_MANAGEMENT) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
138 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
139 field = data_form.Field( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
140 "text-single", "path", required=True |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
141 ) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
142 form.addField(field) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
143 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
144 field = data_form.Field( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
145 "text-single", "namespace", required=False |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
146 ) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
147 form.addField(field) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
148 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
149 payload = form.toElement() |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
150 return payload, status, None, None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
151 |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
152 async def _getFileData(self, client, session_data, command_form): |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
153 """Retrieve field requested in root form |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
154 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
155 "found_file" will also be set in session_data |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
156 @param command_form(data_form.Form): response to root form |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
157 @return (D(dict)): found file data |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
158 @raise WorkflowError: something is wrong |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
159 """ |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
160 fields = command_form.fields |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
161 try: |
3028 | 162 path = fields['path'].value.strip() |
163 namespace = fields['namespace'].value or None | |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
164 except KeyError: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
165 self._c.adHocError(self._c.ERROR.BAD_PAYLOAD) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
166 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
167 if not path: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
168 self._c.adHocError(self._c.ERROR.BAD_PAYLOAD) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
169 |
3028 | 170 requestor = session_data['requestor'] |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
171 requestor_bare = requestor.userhostJID() |
3028 | 172 path = path.rstrip('/') |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
173 parent_path, basename = os.path.split(path) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
174 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
175 # TODO: if parent_path and basename are empty, we ask for root directory |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
176 # this must be managed |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
177 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
178 try: |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
179 found_files = await self.host.memory.getFiles( |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
180 client, requestor_bare, path=parent_path, name=basename, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
181 namespace=namespace) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
182 found_file = found_files[0] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
183 except (exceptions.NotFound, IndexError): |
3028 | 184 raise WorkflowError(self._err(_("file not found"))) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
185 except exceptions.PermissionError: |
3028 | 186 raise WorkflowError(self._err(_("forbidden"))) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
187 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
188 if found_file['owner'] != requestor_bare: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
189 # only owner can manage files |
3028 | 190 log.warning(_("Only owner can manage files")) |
191 raise WorkflowError(self._err(_("forbidden"))) | |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
192 |
3028 | 193 session_data['found_file'] = found_file |
194 session_data['namespace'] = namespace | |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
195 return found_file |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
196 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
197 def _updateReadPermission(self, access, allowed_jids): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
198 if not allowed_jids: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
199 if C.ACCESS_PERM_READ in access: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
200 del access[C.ACCESS_PERM_READ] |
3028 | 201 elif allowed_jids == 'PUBLIC': |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
202 access[C.ACCESS_PERM_READ] = { |
3028 | 203 "type": C.ACCESS_TYPE_PUBLIC |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
204 } |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
205 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
206 access[C.ACCESS_PERM_READ] = { |
3028 | 207 "type": C.ACCESS_TYPE_WHITELIST, |
208 "jids": [j.full() for j in allowed_jids] | |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
209 } |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
210 |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
211 async def _updateDir(self, client, requestor, namespace, file_data, allowed_jids): |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
212 """Recursively update permission of a directory and all subdirectories |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
213 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
214 @param file_data(dict): metadata of the file |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
215 @param allowed_jids(list[jid.JID]): list of entities allowed to read the file |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
216 """ |
3028 | 217 assert file_data['type'] == C.FILE_TYPE_DIRECTORY |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
218 files_data = await self.host.memory.getFiles( |
3028 | 219 client, requestor, parent=file_data['id'], namespace=namespace) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
220 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
221 for file_data in files_data: |
3028 | 222 if not file_data['access'].get(C.ACCESS_PERM_READ, {}): |
223 log.debug("setting {perm} read permission for {name}".format( | |
224 perm=allowed_jids, name=file_data['name'])) | |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
225 await self.host.memory.fileUpdate( |
3028 | 226 file_data['id'], 'access', |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
227 partial(self._updateReadPermission, allowed_jids=allowed_jids)) |
3028 | 228 if file_data['type'] == C.FILE_TYPE_DIRECTORY: |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
229 await self._updateDir(client, requestor, namespace, file_data, 'PUBLIC') |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
230 |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
231 async def _onChangeFile(self, client, command_elt, session_data, action, node): |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
232 try: |
3028 | 233 x_elt = next(command_elt.elements(data_form.NS_X_DATA, "x")) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
234 command_form = data_form.Form.fromElement(x_elt) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
235 except StopIteration: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
236 command_form = None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
237 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
238 found_file = session_data.get('found_file') |
3028 | 239 requestor = session_data['requestor'] |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
240 requestor_bare = requestor.userhostJID() |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
241 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
242 if command_form is None or len(command_form.fields) == 0: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
243 # root request |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
244 return self._getRootArgs() |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
245 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
246 elif found_file is None: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
247 # file selected, we retrieve it and ask for permissions |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
248 try: |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
249 found_file = await self._getFileData(client, session_data, command_form) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
250 except WorkflowError as e: |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
251 return e.err_args |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
252 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
253 # management request |
3028 | 254 if found_file['type'] == C.FILE_TYPE_DIRECTORY: |
255 instructions = D_("Please select permissions for this directory") | |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
256 else: |
3028 | 257 instructions = D_("Please select permissions for this file") |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
258 |
3028 | 259 form = data_form.Form("form", title="File Management", |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
260 instructions=[instructions], |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
261 formNamespace=NS_FILE_MANAGEMENT) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
262 field = data_form.Field( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
263 "text-multi", "read_allowed", required=False, |
3028 | 264 desc='list of jids allowed to read this file (beside yourself), or ' |
265 '"PUBLIC" to let a public access' | |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
266 ) |
3028 | 267 read_access = found_file["access"].get(C.ACCESS_PERM_READ, {}) |
268 access_type = read_access.get('type', C.ACCESS_TYPE_WHITELIST) | |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
269 if access_type == C.ACCESS_TYPE_PUBLIC: |
3028 | 270 field.values = ['PUBLIC'] |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
271 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
272 field.values = read_access.get('jids', []) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
273 form.addField(field) |
3028 | 274 if found_file['type'] == C.FILE_TYPE_DIRECTORY: |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
275 field = data_form.Field( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
276 "boolean", "recursive", value=False, required=False, |
3028 | 277 desc="Files under it will be made public to follow this dir " |
278 "permission (only if they don't have already a permission set)." | |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
279 ) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
280 form.addField(field) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
281 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
282 status = self._c.STATUS.EXECUTING |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
283 payload = form.toElement() |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
284 return (payload, status, None, None) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
285 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
286 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
287 # final phase, we'll do permission change here |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
288 try: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
289 read_allowed = command_form.fields['read_allowed'] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
290 except KeyError: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
291 self._c.adHocError(self._c.ERROR.BAD_PAYLOAD) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
292 |
3028 | 293 if read_allowed.value == 'PUBLIC': |
294 allowed_jids = 'PUBLIC' | |
295 elif read_allowed.value.strip() == '': | |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
296 allowed_jids = None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
297 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
298 try: |
2934
0bafdbda7f5f
plugin file sharing management: filter out empty values in allowed_jids
Goffi <goffi@goffi.org>
parents:
2929
diff
changeset
|
299 allowed_jids = [jid.JID(v.strip()) for v in read_allowed.values |
0bafdbda7f5f
plugin file sharing management: filter out empty values in allowed_jids
Goffi <goffi@goffi.org>
parents:
2929
diff
changeset
|
300 if v.strip()] |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
301 except RuntimeError as e: |
3028 | 302 log.warning(_("Can't use read_allowed values: {reason}").format( |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
303 reason=e)) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
304 self._c.adHocError(self._c.ERROR.BAD_PAYLOAD) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
305 |
3028 | 306 if found_file['type'] == C.FILE_TYPE_FILE: |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
307 await self.host.memory.fileUpdate( |
3028 | 308 found_file['id'], 'access', |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
309 partial(self._updateReadPermission, allowed_jids=allowed_jids)) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
310 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
311 try: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
312 recursive = command_form.fields['recursive'] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
313 except KeyError: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
314 self._c.adHocError(self._c.ERROR.BAD_PAYLOAD) |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
315 await self.host.memory.fileUpdate( |
3028 | 316 found_file['id'], 'access', |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
317 partial(self._updateReadPermission, allowed_jids=allowed_jids)) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
318 if recursive: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
319 # we set all file under the directory as public (if they haven't |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
320 # already a permission set), so allowed entities of root directory |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
321 # can read them. |
3028 | 322 namespace = session_data['namespace'] |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
323 await self._updateDir( |
3028 | 324 client, requestor_bare, namespace, found_file, 'PUBLIC') |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
325 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
326 # job done, we can end the session |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
327 status = self._c.STATUS.COMPLETED |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
328 payload = None |
3028 | 329 note = (self._c.NOTE.INFO, _("management session done")) |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
330 return (payload, status, None, note) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
331 |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
332 async def _onDeleteFile(self, client, command_elt, session_data, action, node): |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
333 try: |
3028 | 334 x_elt = next(command_elt.elements(data_form.NS_X_DATA, "x")) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
335 command_form = data_form.Form.fromElement(x_elt) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
336 except StopIteration: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
337 command_form = None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
338 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
339 found_file = session_data.get('found_file') |
3028 | 340 requestor = session_data['requestor'] |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
341 requestor_bare = requestor.userhostJID() |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
342 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
343 if command_form is None or len(command_form.fields) == 0: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
344 # root request |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
345 return self._getRootArgs() |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
346 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
347 elif found_file is None: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
348 # file selected, we need confirmation before actually deleting |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
349 try: |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
350 found_file = await self._getFileData(client, session_data, command_form) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
351 except WorkflowError as e: |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
352 return e.err_args |
3028 | 353 if found_file['type'] == C.FILE_TYPE_DIRECTORY: |
354 msg = D_("Are you sure to delete directory {name} and all files and " | |
355 "directories under it?").format(name=found_file['name']) | |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
356 else: |
3028 | 357 msg = D_("Are you sure to delete file {name}?" |
358 .format(name=found_file['name'])) | |
359 form = data_form.Form("form", title="File Management", | |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
360 instructions = [msg], |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
361 formNamespace=NS_FILE_MANAGEMENT) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
362 field = data_form.Field( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
363 "boolean", "confirm", value=False, required=True, |
3028 | 364 desc="check this box to confirm" |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
365 ) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
366 form.addField(field) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
367 status = self._c.STATUS.EXECUTING |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
368 payload = form.toElement() |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
369 return (payload, status, None, None) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
370 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
371 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
372 # final phase, we'll do deletion here |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
373 try: |
3298
d0e8b0a3ef9c
comp file sharing management: fixed confirmation check
Goffi <goffi@goffi.org>
parents:
3288
diff
changeset
|
374 confirmed = C.bool(command_form.fields['confirm'].value) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
375 except KeyError: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
376 self._c.adHocError(self._c.ERROR.BAD_PAYLOAD) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
377 if not confirmed: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
378 note = None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
379 else: |
3028 | 380 recursive = found_file['type'] == C.FILE_TYPE_DIRECTORY |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
381 await self.host.memory.fileDelete( |
3028 | 382 client, requestor_bare, found_file['id'], recursive) |
383 note = (self._c.NOTE.INFO, _("file deleted")) | |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
384 status = self._c.STATUS.COMPLETED |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
385 payload = None |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
386 return (payload, status, None, note) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
387 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
388 def _updateThumbs(self, extra, thumbnails): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
389 extra[C.KEY_THUMBNAILS] = thumbnails |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
390 |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
391 async def _genThumbs(self, client, requestor, namespace, file_data): |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
392 """Recursively generate thumbnails |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
393 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
394 @param file_data(dict): metadata of the file |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
395 """ |
3028 | 396 if file_data['type'] == C.FILE_TYPE_DIRECTORY: |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
397 sub_files_data = await self.host.memory.getFiles( |
3028 | 398 client, requestor, parent=file_data['id'], namespace=namespace) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
399 for sub_file_data in sub_files_data: |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
400 await self._genThumbs(client, requestor, namespace, sub_file_data) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
401 |
3028 | 402 elif file_data['type'] == C.FILE_TYPE_FILE: |
3288
780fb8dd07ef
core (memory/sqlite): new database schema (v9):
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
403 media_type = file_data['media_type'] |
3028 | 404 file_path = os.path.join(self.files_path, file_data['file_hash']) |
3288
780fb8dd07ef
core (memory/sqlite): new database schema (v9):
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
405 if media_type == 'image': |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
406 thumbnails = [] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
407 |
3329
15612c0fb421
plugin XEP-0264: updated size to get values closest to standard one:
Goffi <goffi@goffi.org>
parents:
3305
diff
changeset
|
408 for max_thumb_size in self._t.SIZES: |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
409 try: |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
410 thumb_size, thumb_id = await self._t.generateThumbnail( |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
411 file_path, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
412 max_thumb_size, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
413 # we keep thumbnails for 6 months |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
414 60 * 60 * 24 * 31 * 6, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
415 ) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
416 except Exception as e: |
3028 | 417 log.warning(_("Can't create thumbnail: {reason}") |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
418 .format(reason=e)) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
419 break |
3028 | 420 thumbnails.append({"id": thumb_id, "size": thumb_size}) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
421 |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
422 await self.host.memory.fileUpdate( |
3028 | 423 file_data['id'], 'extra', |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
424 partial(self._updateThumbs, thumbnails=thumbnails)) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
425 |
3028 | 426 log.info("thumbnails for [{file_name}] generated" |
427 .format(file_name=file_data['name'])) | |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
428 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
429 else: |
3028 | 430 log.warning("unmanaged file type: {type_}".format(type_=file_data['type'])) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
431 |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
432 async def _onGenThumbnails(self, client, command_elt, session_data, action, node): |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
433 try: |
3028 | 434 x_elt = next(command_elt.elements(data_form.NS_X_DATA, "x")) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
435 command_form = data_form.Form.fromElement(x_elt) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
436 except StopIteration: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
437 command_form = None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
438 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
439 found_file = session_data.get('found_file') |
3028 | 440 requestor = session_data['requestor'] |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
441 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
442 if command_form is None or len(command_form.fields) == 0: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
443 # root request |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
444 return self._getRootArgs() |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
445 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
446 elif found_file is None: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
447 # file selected, we retrieve it and ask for permissions |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
448 try: |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
449 found_file = await self._getFileData(client, session_data, command_form) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
450 except WorkflowError as e: |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
451 return e.err_args |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
452 |
3028 | 453 log.info("Generating thumbnails as requested") |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
454 await self._genThumbs(client, requestor, found_file['namespace'], found_file) |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
455 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
456 # job done, we can end the session |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
457 status = self._c.STATUS.COMPLETED |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
458 payload = None |
3028 | 459 note = (self._c.NOTE.INFO, _("thumbnails generated")) |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3531
diff
changeset
|
460 return (payload, status, None, note) |
3529
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
461 |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
462 async def _onQuota(self, client, command_elt, session_data, action, node): |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
463 requestor = session_data['requestor'] |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
464 quota = self.host.plugins["file_sharing"].getQuota(client, requestor) |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
465 try: |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
466 size_used = await self.host.memory.fileGetUsedSpace(client, requestor) |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
467 except exceptions.PermissionError: |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
468 raise WorkflowError(self._err(_("forbidden"))) |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
469 status = self._c.STATUS.COMPLETED |
3531
a8259a1f89b2
component file sharing (management): add values of `quota` and `used` size on result form
Goffi <goffi@goffi.org>
parents:
3529
diff
changeset
|
470 form = data_form.Form("result") |
a8259a1f89b2
component file sharing (management): add values of `quota` and `used` size on result form
Goffi <goffi@goffi.org>
parents:
3529
diff
changeset
|
471 form.makeFields({"quota": quota, "user": size_used}) |
a8259a1f89b2
component file sharing (management): add values of `quota` and `used` size on result form
Goffi <goffi@goffi.org>
parents:
3529
diff
changeset
|
472 payload = form.toElement() |
3529
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
473 note = ( |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
474 self._c.NOTE.INFO, |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
475 _("You are currently using {size_used} on {size_quota}").format( |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
476 size_used = utils.getHumanSize(size_used), |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
477 size_quota = ( |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
478 _("unlimited quota") if quota is None |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
479 else utils.getHumanSize(quota) |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
480 ) |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
481 ) |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
482 ) |
698579bedd6f
component file sharing (plugin management): new command to get available quota/used space.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
483 return (payload, status, None, note) |