annotate cagou/plugins/plugin_transfer_android_photo.py @ 412:7c6149c249c1

chat: attachment sending: - files to send are not sent directly anymore, but added to attachment, and linked to the message when it is sent, this is more user friendly and avoid the accidental sending of wrong file - user can remove the attachment before sending the message, using the "close" symbol - new "Chat.addAtachment" method - upload progress is shown on the AttachmentItem thanks to the "progress" property - AttachmentItem stays in the attachments layout until uploaded or an error happens. Messages can still be sent while the item is being uploaded.
author Goffi <goffi@goffi.org>
date Sun, 23 Feb 2020 15:39:03 +0100
parents 1da3c379205b
children 3c9ba4a694ef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
379
1da3c379205b fixed shebangs
Goffi <goffi@goffi.org>
parents: 378
diff changeset
1 #!/usr/bin/env python3
1da3c379205b fixed shebangs
Goffi <goffi@goffi.org>
parents: 378
diff changeset
2
93
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
3
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # Cagou: desktop/mobile frontend for Salut à Toi XMPP client
378
4d660b252487 dates update
Goffi <goffi@goffi.org>
parents: 312
diff changeset
5 # Copyright (C) 2016-2020 Jérôme Poisson (goffi@goffi.org)
93
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
6
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
10 # (at your option) any later version.
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
11
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
16
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
19
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
20
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
21 from sat.core import log as logging
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
22 log = logging.getLogger(__name__)
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
23 from sat.core.i18n import _
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
24 import sys
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
25 import os
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
26 import os.path
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
27 import time
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
28 if sys.platform == "android":
95
3e3c097b07b7 upload: added voice plugin (for Android)
Goffi <goffi@goffi.org>
parents: 93
diff changeset
29 from plyer import camera
93
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
30 from jnius import autoclass
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
31 Environment = autoclass('android.os.Environment')
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
32 else:
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
33 import tempfile
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
34
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
35
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
36 PLUGIN_INFO = {
312
772c170b47a9 Python3 port:
Goffi <goffi@goffi.org>
parents: 282
diff changeset
37 "name": _("take photo"),
93
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
38 "main": "AndroidPhoto",
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
39 "platforms": ('android',),
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
40 "external": True,
312
772c170b47a9 Python3 port:
Goffi <goffi@goffi.org>
parents: 282
diff changeset
41 "description": _("upload a photo from photo application"),
772c170b47a9 Python3 port:
Goffi <goffi@goffi.org>
parents: 282
diff changeset
42 "icon_medium": "{media}/icons/muchoslava/png/camera_off_50.png",
93
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
43 }
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
44
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
45
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
46 class AndroidPhoto(object):
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
47
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
48 def __init__(self, callback, cancel_cb):
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
49 self.callback = callback
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
50 self.cancel_cb = cancel_cb
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
51 filename = time.strftime("%Y-%m-%d_%H:%M:%S.jpg", time.gmtime())
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
52 tmp_dir = self.getTmpDir()
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
53 tmp_file = os.path.join(tmp_dir, filename)
312
772c170b47a9 Python3 port:
Goffi <goffi@goffi.org>
parents: 282
diff changeset
54 log.debug("Picture will be saved to {}".format(tmp_file))
93
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
55 camera.take_picture(tmp_file, self.callback)
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
56 # we don't delete the file, as it is nice to keep it locally
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
57
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
58 def getTmpDir(self):
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
59 if sys.platform == "android":
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
60 dcim_path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath()
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
61 return dcim_path
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
62 else:
58a52bd299d8 upload: added android photo app plugin
Goffi <goffi@goffi.org>
parents:
diff changeset
63 return tempfile.mkdtemp()