annotate sat_frontends/tools/misc.py @ 3330:7b47f48d31f3

plugin XEP-0264: fix orientation of thumbnails: Rotation of thumbnailis is now modified according to EXIF orientation data. Original image is not modified as user may want to keep it, and orientation transformation can modify encoding parameters. Update `pillow` minimum version to the first one with `exif_transpose` implementation.
author Goffi <goffi@goffi.org>
date Thu, 13 Aug 2020 23:46:18 +0200
parents 559a625a236b
children 80815f2f12cf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1 #!/usr/bin/env python3
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
2
671
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
3
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
4 # SAT helpers methods for plugins
1766
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
5 # Copyright (C) 2013-2016 Adrien Cossa (souliane@mailoo.org)
671
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
6
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
10 # (at your option) any later version.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
11
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
16
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
19
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
20
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
21 class InputHistory(object):
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
22 def _updateInputHistory(self, text=None, step=None, callback=None, mode=""):
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
23 """Update the lists of previously sent messages. Several lists can be
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
24 handled as they are stored in a dictionary, the argument "mode" being
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
25 used as the entry key. There's also a temporary list to allow you play
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
26 with previous entries before sending a new message. Parameters values
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
27 can be combined: text is None and step is None to initialize a main
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
28 list and the temporary one, step is None to update a list and
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
29 reinitialize the temporary one, step is not None to update
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
30 the temporary list between two messages.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
31 @param text: text to be saved.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
32 @param step: step to move the temporary index.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
33 @param callback: method to display temporary entries.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
34 @param mode: the dictionary key for main lists.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
35 """
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
36 if not hasattr(self, "input_histories"):
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
37 self.input_histories = {}
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
38 history = self.input_histories.setdefault(mode, [])
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
39 if step is None and text is not None:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
40 # update the main list
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
41 if text in history:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
42 history.remove(text)
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
43 history.append(text)
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
44 length = len(history)
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
45 if step is None or length == 0:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
46 # prepare the temporary list and index
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
47 self.input_history_tmp = history[:]
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
48 self.input_history_tmp.append("")
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
49 self.input_history_index = length
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
50 if step is None:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
51 return
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
52 # update the temporary list
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
53 if text is not None:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
54 # save the current entry
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
55 self.input_history_tmp[self.input_history_index] = text
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
56 # move to another entry if possible
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
57 index_tmp = self.input_history_index + step
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
58 if index_tmp >= 0 and index_tmp < len(self.input_history_tmp):
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
59 if callback is not None:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
60 callback(self.input_history_tmp[index_tmp])
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
61 self.input_history_index = index_tmp
2531
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
62
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
63
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
64 class FlagsHandler(object):
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
65 """Small class to handle easily option flags
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
66
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
67 the instance is initialized with an iterable
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
68 then attribute return True if flag is set, False else.
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
69 """
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
70
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
71 def __init__(self, flags):
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
72 self.flags = set(flags or [])
2615
b4ecbcc2fd08 tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
73 self._used_flags = set()
2531
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
74
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
75 def __getattr__(self, flag):
2615
b4ecbcc2fd08 tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
76 self._used_flags.add(flag)
b4ecbcc2fd08 tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
77 return flag in self.flags
2531
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
78
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
79 def __len__(self):
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
80 return len(self.flags)
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
81
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
82 def __iter__(self):
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
83 return self.flags.__iter__()
2615
b4ecbcc2fd08 tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
84
b4ecbcc2fd08 tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
85 @property
b4ecbcc2fd08 tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
86 def all_used(self):
b4ecbcc2fd08 tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
87 """Return True if all flags have been used"""
b4ecbcc2fd08 tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
88 return self._used_flags.issuperset(self.flags)
b4ecbcc2fd08 tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
89
b4ecbcc2fd08 tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
90 @property
b4ecbcc2fd08 tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
91 def unused(self):
b4ecbcc2fd08 tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
92 """Return flags which has not been used yet"""
b4ecbcc2fd08 tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
93 return self.flags.difference(self._used_flags)