Mercurial > libervia-backend
annotate sat/plugins/plugin_comp_file_sharing_management.py @ 3000:d603550d5e99
jp (blog/preview): fixed watch restoring when file is moved/deleted:
with some editors (e.g. vim), when file is written it is actually replaced with a buffered
one. In this case, jp replace the watch to check the new file, but it was not working
anymore with latest version of inotify module. This patch fixes it by removing the old watch
before adding a new one.
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 12 Jul 2019 11:29:05 +0200 |
parents | 0bafdbda7f5f |
children | ab2696e34d29 |
rev | line source |
---|---|
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/usr/bin/env python2 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 # SAT plugin to detect language (experimental) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
5 # Copyright (C) 2009-2019 Jérôme Poisson (goffi@goffi.org) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # 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
|
8 # 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
|
9 # 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
|
10 # (at your option) any later version. |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # 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
|
13 # 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
|
14 # 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
|
15 # 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
|
16 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 # 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
|
18 # 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
|
19 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 import os.path |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
21 from functools import partial |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
22 from sat.core.i18n import _, D_ |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
23 from sat.core import exceptions |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
24 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
|
25 from sat.core.log import getLogger |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 from wokkel import data_form |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 from twisted.internet import defer |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
28 from twisted.words.protocols.jabber import jid |
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 = { |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 C.PI_NAME: u"File Sharing Management", |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 C.PI_IMPORT_NAME: u"FILE_SHARING_MANAGEMENT", |
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], |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 C.PI_TYPE: u"EXP", |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 C.PI_PROTOCOLS: [], |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 C.PI_DEPENDENCIES: [u"XEP-0050", u"XEP-0264"], |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 C.PI_RECOMMENDATIONS: [], |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 C.PI_MAIN: u"FileSharingManagement", |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 C.PI_HANDLER: u"no", |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 C.PI_DESCRIPTION: _( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 u"Experimental handling of file management for file sharing. This plugins allows " |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
45 u"to change permissions of stored files/directories or remove them." |
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 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 NS_FILE_MANAGEMENT = u"https://salut-a-toi.org/protocol/file-management:0" |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 NS_FILE_MANAGEMENT_PERM = u"https://salut-a-toi.org/protocol/file-management:0#perm" |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 NS_FILE_MANAGEMENT_DELETE = u"https://salut-a-toi.org/protocol/file-management:0#delete" |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
52 NS_FILE_MANAGEMENT_THUMB = u"https://salut-a-toi.org/protocol/file-management:0#thumb" |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 |
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 class WorkflowError(Exception): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 """Raised when workflow can't be completed""" |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 def __init__(self, err_args): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 """ |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
60 @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
|
61 """ |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 Exception.__init__(self) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
63 self.err_args = err_args |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
64 |
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 class FileSharingManagement(object): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
67 # 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
|
68 # 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
|
69 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
70 def __init__(self, host): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 log.info(_(u"File Sharing Management plugin initialization")) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
72 self.host = host |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
73 self._c = host.plugins["XEP-0050"] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
74 self._t = host.plugins["XEP-0264"] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
75 self.files_path = host.getLocalPath(None, C.FILES_DIR, profile=False) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
76 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
77 def profileConnected(self, client): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
78 self._c.addAdHocCommand( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
79 client, self._onChangeFile, u"Change Permissions of File(s)", |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
80 node=NS_FILE_MANAGEMENT_PERM, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
81 allowed_magics=C.ENTITY_ALL, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
82 ) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
83 self._c.addAdHocCommand( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
84 client, self._onDeleteFile, u"Delete File(s)", |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 node=NS_FILE_MANAGEMENT_DELETE, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
86 allowed_magics=C.ENTITY_ALL, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
87 ) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
88 self._c.addAdHocCommand( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
89 client, self._onGenThumbnails, u"Generate Thumbnails", |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
90 node=NS_FILE_MANAGEMENT_THUMB, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
91 allowed_magics=C.ENTITY_ALL, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
92 ) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
93 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 def _err(self, reason): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
95 """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
|
96 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
97 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
|
98 @param reason(unicode): reason of the error |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
99 @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
|
100 """ |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
101 status = self._c.STATUS.COMPLETED |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
102 payload = None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
103 note = (self._c.NOTE.ERROR, reason) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
104 return payload, status, None, note |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
105 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
106 def _getRootArgs(self): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
107 """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
|
108 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
109 @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
|
110 """ |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
111 status = self._c.STATUS.EXECUTING |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
112 form = data_form.Form("form", title=u"File Management", |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
113 formNamespace=NS_FILE_MANAGEMENT) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
114 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
115 field = data_form.Field( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
116 "text-single", "path", required=True |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
117 ) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
118 form.addField(field) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
119 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
120 field = data_form.Field( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
121 "text-single", "namespace", required=False |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
122 ) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
123 form.addField(field) |
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 payload = form.toElement() |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
126 return payload, status, None, None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
127 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
128 @defer.inlineCallbacks |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
129 def _getFileData(self, client, session_data, command_form): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
130 """Retrieve field requested in root form |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
131 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
132 "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
|
133 @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
|
134 @return (D(dict)): found file data |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
135 @raise WorkflowError: something is wrong |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
136 """ |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
137 fields = command_form.fields |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
138 try: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
139 path = fields[u'path'].value.strip() |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
140 namespace = fields[u'namespace'].value or None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
141 except KeyError: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
142 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
|
143 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
144 if not path: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
145 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
|
146 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
147 requestor = session_data[u'requestor'] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
148 requestor_bare = requestor.userhostJID() |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
149 path = path.rstrip(u'/') |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
150 parent_path, basename = os.path.split(path) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
151 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
152 # 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
|
153 # this must be managed |
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 try: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
156 found_files = yield self.host.memory.getFiles( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
157 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
|
158 namespace=namespace) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
159 found_file = found_files[0] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
160 except (exceptions.NotFound, IndexError): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
161 raise WorkflowError(self._err(_(u"file not found"))) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
162 except exceptions.PermissionError: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
163 raise WorkflowError(self._err(_(u"forbidden"))) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
164 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
165 if found_file['owner'] != requestor_bare: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
166 # only owner can manage files |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
167 log.warning(_(u"Only owner can manage files")) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
168 raise WorkflowError(self._err(_(u"forbidden"))) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
169 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
170 session_data[u'found_file'] = found_file |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
171 session_data[u'namespace'] = namespace |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
172 defer.returnValue(found_file) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
173 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
174 def _updateReadPermission(self, access, allowed_jids): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
175 if not allowed_jids: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
176 if C.ACCESS_PERM_READ in access: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
177 del access[C.ACCESS_PERM_READ] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
178 elif allowed_jids == u'PUBLIC': |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
179 access[C.ACCESS_PERM_READ] = { |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
180 u"type": C.ACCESS_TYPE_PUBLIC |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
181 } |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
182 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
183 access[C.ACCESS_PERM_READ] = { |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
184 u"type": C.ACCESS_TYPE_WHITELIST, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
185 u"jids": [j.full() for j in allowed_jids] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
186 } |
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 @defer.inlineCallbacks |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
189 def _updateDir(self, client, requestor, namespace, file_data, allowed_jids): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
190 """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
|
191 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
192 @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
|
193 @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
|
194 """ |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
195 assert file_data[u'type'] == C.FILE_TYPE_DIRECTORY |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
196 files_data = yield self.host.memory.getFiles( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
197 client, requestor, parent=file_data[u'id'], namespace=namespace) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
198 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
199 for file_data in files_data: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
200 if not file_data[u'access'].get(C.ACCESS_PERM_READ, {}): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
201 log.debug(u"setting {perm} read permission for {name}".format( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
202 perm=allowed_jids, name=file_data[u'name'])) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
203 yield self.host.memory.fileUpdate( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
204 file_data[u'id'], u'access', |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
205 partial(self._updateReadPermission, allowed_jids=allowed_jids)) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
206 if file_data[u'type'] == C.FILE_TYPE_DIRECTORY: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
207 yield self._updateDir(client, requestor, namespace, file_data, u'PUBLIC') |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
208 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
209 @defer.inlineCallbacks |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
210 def _onChangeFile(self, client, command_elt, session_data, action, node): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
211 try: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
212 x_elt = command_elt.elements(data_form.NS_X_DATA, "x").next() |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
213 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
|
214 except StopIteration: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
215 command_form = None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
216 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
217 found_file = session_data.get('found_file') |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
218 requestor = session_data[u'requestor'] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
219 requestor_bare = requestor.userhostJID() |
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 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
|
222 # root request |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
223 defer.returnValue(self._getRootArgs()) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
224 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
225 elif found_file is None: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
226 # 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
|
227 try: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
228 found_file = yield self._getFileData(client, session_data, command_form) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
229 except WorkflowError as e: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
230 defer.returnValue(e.err_args) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
231 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
232 # management request |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
233 if found_file[u'type'] == C.FILE_TYPE_DIRECTORY: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
234 instructions = D_(u"Please select permissions for this directory") |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
235 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
236 instructions = D_(u"Please select permissions for this file") |
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 form = data_form.Form("form", title=u"File Management", |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
239 instructions=[instructions], |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
240 formNamespace=NS_FILE_MANAGEMENT) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
241 field = data_form.Field( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
242 "text-multi", "read_allowed", required=False, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
243 desc=u'list of jids allowed to read this file (beside yourself), or ' |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
244 u'"PUBLIC" to let a public access' |
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 read_access = found_file[u"access"].get(C.ACCESS_PERM_READ, {}) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
247 access_type = read_access.get(u'type', C.ACCESS_TYPE_WHITELIST) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
248 if access_type == C.ACCESS_TYPE_PUBLIC: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
249 field.values = [u'PUBLIC'] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
250 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
251 field.values = read_access.get('jids', []) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
252 form.addField(field) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
253 if found_file[u'type'] == C.FILE_TYPE_DIRECTORY: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
254 field = data_form.Field( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
255 "boolean", "recursive", value=False, required=False, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
256 desc=u"Files under it will be made public to follow this dir " |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
257 u"permission (only if they don't have already a permission set)." |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
258 ) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
259 form.addField(field) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
260 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
261 status = self._c.STATUS.EXECUTING |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
262 payload = form.toElement() |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
263 defer.returnValue((payload, status, None, None)) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
264 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
265 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
266 # 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
|
267 try: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
268 read_allowed = command_form.fields['read_allowed'] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
269 except KeyError: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
270 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
|
271 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
272 if read_allowed.value == u'PUBLIC': |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
273 allowed_jids = u'PUBLIC' |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
274 elif read_allowed.value.strip() == u'': |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
275 allowed_jids = None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
276 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
277 try: |
2934
0bafdbda7f5f
plugin file sharing management: filter out empty values in allowed_jids
Goffi <goffi@goffi.org>
parents:
2929
diff
changeset
|
278 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
|
279 if v.strip()] |
2929
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
280 except RuntimeError as e: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
281 log.warning(_(u"Can't use read_allowed values: {reason}").format( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
282 reason=e)) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
283 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
|
284 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
285 if found_file[u'type'] == C.FILE_TYPE_FILE: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
286 yield self.host.memory.fileUpdate( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
287 found_file[u'id'], u'access', |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
288 partial(self._updateReadPermission, allowed_jids=allowed_jids)) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
289 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
290 try: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
291 recursive = command_form.fields['recursive'] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
292 except KeyError: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
293 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
|
294 yield self.host.memory.fileUpdate( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
295 found_file[u'id'], u'access', |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
296 partial(self._updateReadPermission, allowed_jids=allowed_jids)) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
297 if recursive: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
298 # 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
|
299 # 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
|
300 # can read them. |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
301 namespace = session_data[u'namespace'] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
302 yield self._updateDir( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
303 client, requestor_bare, namespace, found_file, u'PUBLIC') |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
304 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
305 # job done, we can end the session |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
306 status = self._c.STATUS.COMPLETED |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
307 payload = None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
308 note = (self._c.NOTE.INFO, _(u"management session done")) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
309 defer.returnValue((payload, status, None, note)) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
310 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
311 @defer.inlineCallbacks |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
312 def _onDeleteFile(self, client, command_elt, session_data, action, node): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
313 try: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
314 x_elt = command_elt.elements(data_form.NS_X_DATA, "x").next() |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
315 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
|
316 except StopIteration: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
317 command_form = None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
318 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
319 found_file = session_data.get('found_file') |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
320 requestor = session_data[u'requestor'] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
321 requestor_bare = requestor.userhostJID() |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
322 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
323 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
|
324 # root request |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
325 defer.returnValue(self._getRootArgs()) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
326 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
327 elif found_file is None: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
328 # 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
|
329 try: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
330 found_file = yield self._getFileData(client, session_data, command_form) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
331 except WorkflowError as e: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
332 defer.returnValue(e.err_args) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
333 if found_file[u'type'] == C.FILE_TYPE_DIRECTORY: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
334 msg = D_(u"Are you sure to delete directory {name} and all files and " |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
335 u"directories under it?").format(name=found_file[u'name']) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
336 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
337 msg = D_(u"Are you sure to delete file {name}?" |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
338 .format(name=found_file[u'name'])) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
339 form = data_form.Form("form", title=u"File Management", |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
340 instructions = [msg], |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
341 formNamespace=NS_FILE_MANAGEMENT) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
342 field = data_form.Field( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
343 "boolean", "confirm", value=False, required=True, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
344 desc=u"check this box to confirm" |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
345 ) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
346 form.addField(field) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
347 status = self._c.STATUS.EXECUTING |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
348 payload = form.toElement() |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
349 defer.returnValue((payload, status, None, None)) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
350 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
351 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
352 # final phase, we'll do deletion here |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
353 try: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
354 confirmed = command_form.fields['confirm'] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
355 except KeyError: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
356 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
|
357 if not confirmed: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
358 note = None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
359 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
360 recursive = found_file[u'type'] == C.FILE_TYPE_DIRECTORY |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
361 yield self.host.memory.fileDelete( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
362 client, requestor_bare, found_file[u'id'], recursive) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
363 note = (self._c.NOTE.INFO, _(u"file deleted")) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
364 status = self._c.STATUS.COMPLETED |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
365 payload = None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
366 defer.returnValue((payload, status, None, note)) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
367 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
368 def _updateThumbs(self, extra, thumbnails): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
369 extra[C.KEY_THUMBNAILS] = thumbnails |
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 @defer.inlineCallbacks |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
372 def _genThumbs(self, client, requestor, namespace, file_data): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
373 """Recursively generate thumbnails |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
374 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
375 @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
|
376 """ |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
377 if file_data[u'type'] == C.FILE_TYPE_DIRECTORY: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
378 sub_files_data = yield self.host.memory.getFiles( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
379 client, requestor, parent=file_data[u'id'], namespace=namespace) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
380 for sub_file_data in sub_files_data: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
381 yield self._genThumbs(client, requestor, namespace, sub_file_data) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
382 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
383 elif file_data[u'type'] == C.FILE_TYPE_FILE: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
384 mime_type = file_data[u'mime_type'] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
385 file_path = os.path.join(self.files_path, file_data[u'file_hash']) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
386 if mime_type is not None and mime_type.startswith(u"image"): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
387 thumbnails = [] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
388 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
389 for max_thumb_size in (self._t.SIZE_SMALL, self._t.SIZE_MEDIUM): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
390 try: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
391 thumb_size, thumb_id = yield self._t.generateThumbnail( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
392 file_path, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
393 max_thumb_size, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
394 # we keep thumbnails for 6 months |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
395 60 * 60 * 24 * 31 * 6, |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
396 ) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
397 except Exception as e: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
398 log.warning(_(u"Can't create thumbnail: {reason}") |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
399 .format(reason=e)) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
400 break |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
401 thumbnails.append({u"id": thumb_id, u"size": thumb_size}) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
402 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
403 yield self.host.memory.fileUpdate( |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
404 file_data[u'id'], u'extra', |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
405 partial(self._updateThumbs, thumbnails=thumbnails)) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
406 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
407 log.info(u"thumbnails for [{file_name}] generated" |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
408 .format(file_name=file_data[u'name'])) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
409 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
410 else: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
411 log.warning(u"unmanaged file type: {type_}".format(type_=file_data[u'type'])) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
412 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
413 @defer.inlineCallbacks |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
414 def _onGenThumbnails(self, client, command_elt, session_data, action, node): |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
415 try: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
416 x_elt = command_elt.elements(data_form.NS_X_DATA, "x").next() |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
417 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
|
418 except StopIteration: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
419 command_form = None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
420 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
421 found_file = session_data.get('found_file') |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
422 requestor = session_data[u'requestor'] |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
423 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
424 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
|
425 # root request |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
426 defer.returnValue(self._getRootArgs()) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
427 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
428 elif found_file is None: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
429 # 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
|
430 try: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
431 found_file = yield self._getFileData(client, session_data, command_form) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
432 except WorkflowError as e: |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
433 defer.returnValue(e.err_args) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
434 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
435 log.info(u"Generating thumbnails as requested") |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
436 yield self._genThumbs(client, requestor, found_file[u'namespace'], found_file) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
437 |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
438 # job done, we can end the session |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
439 status = self._c.STATUS.COMPLETED |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
440 payload = None |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
441 note = (self._c.NOTE.INFO, _(u"thumbnails generated")) |
e0429ff7f6b6
plugin comp file sharing: file sharing management first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
442 defer.returnValue((payload, status, None, note)) |