annotate sat_frontends/jp/cmd_message.py @ 2716:06160b529da6

core (memory/sqlite): changed history constraint /!\ Database schema change /!\ History was using a unique constraint on `profile_id, timestamp, source, dest, source_res, dest_res`, which can cause trouble because several messages send quickly by the same person can have a common timestamp (specially with delayed messages where precision is second), resulting in message loss. The new constraint use `profile_id, stanza_id, source, dest` where `stanza_id` is XEP-0359 stanza_id, so it's unique by definition, and no message should be lost anymore. Because sqlite doesn't support altering table with a constraint change, we have to create new tables and copy old data to new one, which can be pretty long. Sqlite update mechanism with "specifics" has been fixed when several updates are applied (e.g. moving from v5 to v7) and a specific is in the workflow.
author Goffi <goffi@goffi.org>
date Sun, 09 Dec 2018 14:07:26 +0100
parents 0b5deb9a35fd
children 45189c8bd165
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1960
3e168cde7a7d jp: fixed shebang python call
Goffi <goffi@goffi.org>
parents: 1864
diff changeset
1 #!/usr/bin/env python2
815
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
2 # -*- coding: utf-8 -*-
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
3
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
4 # jp: a SAT command line tool
2483
0046283a285d dates update
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
5 # Copyright (C) 2009-2018 Jérôme Poisson (goffi@goffi.org)
815
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
6
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
7 # This program is free software: you can redistribute it and/or modify
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
10 # (at your option) any later version.
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
11
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
12 # This program is distributed in the hope that it will be useful,
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
15 # GNU Affero General Public License for more details.
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
16
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
f8d534ed1d1e jp: added missing license headers
Goffi <goffi@goffi.org>
parents: 814
diff changeset
19
2708
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
20 import sys
817
c39117d00f35 jp: refactoring:
Goffi <goffi@goffi.org>
parents: 815
diff changeset
21 from sat_frontends.jp import base
2663
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
22 from sat_frontends.jp.constants import Const as C
2708
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
23 from sat_frontends.tools import jid
771
bfabeedbf32e core: i18n refactoring:
Goffi <goffi@goffi.org>
parents: 721
diff changeset
24 from sat.core.i18n import _
817
c39117d00f35 jp: refactoring:
Goffi <goffi@goffi.org>
parents: 815
diff changeset
25 from sat.tools.utils import clean_ustr
2708
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
26 from sat.tools.common import data_format
2663
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
27 from functools import partial
0
goffi@necton2
parents:
diff changeset
28
817
c39117d00f35 jp: refactoring:
Goffi <goffi@goffi.org>
parents: 815
diff changeset
29 __commands__ = ["Message"]
393
393b35aa86d2 jp: added --connect option
Goffi <goffi@goffi.org>
parents: 391
diff changeset
30
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
31
1828
cb4be663a4a7 jp (message): message is now a subcommand, and the sending command is moved to message/send
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
32 class Send(base.CommandBase):
817
c39117d00f35 jp: refactoring:
Goffi <goffi@goffi.org>
parents: 815
diff changeset
33 def __init__(self, host):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
34 super(Send, self).__init__(host, "send", help=_("send a message to a contact"))
817
c39117d00f35 jp: refactoring:
Goffi <goffi@goffi.org>
parents: 815
diff changeset
35
c39117d00f35 jp: refactoring:
Goffi <goffi@goffi.org>
parents: 815
diff changeset
36 def add_parser_options(self):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
37 self.parser.add_argument(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
38 "-l", "--lang", type=str, default="", help=_(u"language of the message")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
39 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
40 self.parser.add_argument(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
41 "-s",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
42 "--separate",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
43 action="store_true",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
44 help=_(
2663
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
45 u"separate xmpp messages: send one message per line instead of one "
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
46 u"message alone."
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
47 ),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
48 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
49 self.parser.add_argument(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
50 "-n",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
51 "--new-line",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
52 action="store_true",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
53 help=_(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
54 u"add a new line at the beginning of the input (usefull for ascii art ;))"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
55 ),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
56 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
57 self.parser.add_argument(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
58 "-S",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
59 "--subject",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
60 type=base.unicode_decoder,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
61 help=_(u"subject of the message"),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
62 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
63 self.parser.add_argument(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
64 "-L", "--subject_lang", type=str, default="", help=_(u"language of subject")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
65 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
66 self.parser.add_argument(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
67 "-t",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
68 "--type",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
69 choices=C.MESS_TYPE_STANDARD + (C.MESS_TYPE_AUTO,),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
70 default=C.MESS_TYPE_AUTO,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
71 help=_("type of the message"),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
72 )
2081
2265d9df4cfb jp (message/send): message/send can now send XHTML (-x) or rich (-r) messages
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
73 syntax = self.parser.add_mutually_exclusive_group()
2265d9df4cfb jp (message/send): message/send can now send XHTML (-x) or rich (-r) messages
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
74 syntax.add_argument("-x", "--xhtml", action="store_true", help=_(u"XHTML body"))
2265d9df4cfb jp (message/send): message/send can now send XHTML (-x) or rich (-r) messages
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
75 syntax.add_argument("-r", "--rich", action="store_true", help=_(u"rich body"))
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
76 self.parser.add_argument(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
77 "jid", type=base.unicode_decoder, help=_(u"the destination jid")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
78 )
401
b2caa2615c4c jp roster name manegement + Pipe transfer
Goffi <goffi@goffi.org>
parents: 393
diff changeset
79
1864
96ba685162f6 jp: all commands now use the new start method and set need_loop in __init__ when needed
Goffi <goffi@goffi.org>
parents: 1828
diff changeset
80 def start(self):
2081
2265d9df4cfb jp (message/send): message/send can now send XHTML (-x) or rich (-r) messages
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
81 if self.args.xhtml and self.args.separate:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
82 self.disp(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
83 u"argument -s/--separate is not compatible yet with argument -x/--xhtml",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
84 error=True,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
85 )
2081
2265d9df4cfb jp (message/send): message/send can now send XHTML (-x) or rich (-r) messages
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
86 self.host.quit(2)
2265d9df4cfb jp (message/send): message/send can now send XHTML (-x) or rich (-r) messages
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
87
817
c39117d00f35 jp: refactoring:
Goffi <goffi@goffi.org>
parents: 815
diff changeset
88 jids = self.host.check_jids([self.args.jid])
c39117d00f35 jp: refactoring:
Goffi <goffi@goffi.org>
parents: 815
diff changeset
89 jid = jids[0]
1828
cb4be663a4a7 jp (message): message is now a subcommand, and the sending command is moved to message/send
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
90 self.sendStdin(jid)
817
c39117d00f35 jp: refactoring:
Goffi <goffi@goffi.org>
parents: 815
diff changeset
91
1828
cb4be663a4a7 jp (message): message is now a subcommand, and the sending command is moved to message/send
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
92 def sendStdin(self, dest_jid):
817
c39117d00f35 jp: refactoring:
Goffi <goffi@goffi.org>
parents: 815
diff changeset
93 """Send incomming data on stdin to jabber contact
1828
cb4be663a4a7 jp (message): message is now a subcommand, and the sending command is moved to message/send
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
94
cb4be663a4a7 jp (message): message is now a subcommand, and the sending command is moved to message/send
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
95 @param dest_jid: destination jid
cb4be663a4a7 jp (message): message is now a subcommand, and the sending command is moved to message/send
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
96 """
817
c39117d00f35 jp: refactoring:
Goffi <goffi@goffi.org>
parents: 815
diff changeset
97 header = "\n" if self.args.new_line else ""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
98 stdin_lines = [
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
99 stream.decode("utf-8", "ignore") for stream in sys.stdin.readlines()
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
100 ]
2081
2265d9df4cfb jp (message/send): message/send can now send XHTML (-x) or rich (-r) messages
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
101 extra = {}
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1960
diff changeset
102 if self.args.subject is None:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1960
diff changeset
103 subject = {}
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1960
diff changeset
104 else:
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1960
diff changeset
105 subject = {self.args.subject_lang: self.args.subject}
817
c39117d00f35 jp: refactoring:
Goffi <goffi@goffi.org>
parents: 815
diff changeset
106
2081
2265d9df4cfb jp (message/send): message/send can now send XHTML (-x) or rich (-r) messages
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
107 if self.args.xhtml or self.args.rich:
2265d9df4cfb jp (message/send): message/send can now send XHTML (-x) or rich (-r) messages
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
108 key = u"xhtml" if self.args.xhtml else u"rich"
2265d9df4cfb jp (message/send): message/send can now send XHTML (-x) or rich (-r) messages
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
109 if self.args.lang:
2265d9df4cfb jp (message/send): message/send can now send XHTML (-x) or rich (-r) messages
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
110 key = u"{}_{}".format(key, self.args.lang)
2265d9df4cfb jp (message/send): message/send can now send XHTML (-x) or rich (-r) messages
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
111 extra[key] = clean_ustr(u"".join(stdin_lines))
2265d9df4cfb jp (message/send): message/send can now send XHTML (-x) or rich (-r) messages
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
112 stdin_lines = []
2265d9df4cfb jp (message/send): message/send can now send XHTML (-x) or rich (-r) messages
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
113
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
114 if self.args.separate: # we send stdin in several messages
0
goffi@necton2
parents:
diff changeset
115 if header:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
116 self.host.bridge.messageSend(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
117 dest_jid,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
118 {self.args.lang: header},
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
119 subject,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
120 self.args.type,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
121 profile_key=self.profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
122 callback=lambda: None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
123 errback=lambda ignore: ignore,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
124 )
817
c39117d00f35 jp: refactoring:
Goffi <goffi@goffi.org>
parents: 815
diff changeset
125
2081
2265d9df4cfb jp (message/send): message/send can now send XHTML (-x) or rich (-r) messages
Goffi <goffi@goffi.org>
parents: 1963
diff changeset
126 for line in stdin_lines:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
127 self.host.bridge.messageSend(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
128 dest_jid,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
129 {self.args.lang: line.replace("\n", "")},
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
130 subject,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
131 self.args.type,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
132 extra,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
133 profile_key=self.host.profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
134 callback=lambda: None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
135 errback=lambda ignore: ignore,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
136 )
0
goffi@necton2
parents:
diff changeset
137
817
c39117d00f35 jp: refactoring:
Goffi <goffi@goffi.org>
parents: 815
diff changeset
138 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
139 msg = (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
140 {self.args.lang: header + clean_ustr(u"".join(stdin_lines))}
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
141 if not (self.args.xhtml or self.args.rich)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
142 else {}
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
143 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
144 self.host.bridge.messageSend(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
145 dest_jid,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
146 msg,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
147 subject,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
148 self.args.type,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
149 extra,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
150 profile_key=self.host.profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
151 callback=lambda: None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
152 errback=lambda ignore: ignore,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
153 )
1828
cb4be663a4a7 jp (message): message is now a subcommand, and the sending command is moved to message/send
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
154
cb4be663a4a7 jp (message): message is now a subcommand, and the sending command is moved to message/send
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
155
2708
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
156 class MAM(base.CommandBase):
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
157
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
158 def __init__(self, host):
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
159 super(MAM, self).__init__(
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
160 host, "mam", use_output=C.OUTPUT_MESS, help=_(u"query archives using MAM"))
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
161 self.need_loop=True
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
162
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
163 def add_parser_options(self):
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
164 self.parser.add_argument(
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
165 "-s", "--service", type=base.unicode_decoder, default=u"",
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
166 help=_(u"jid of the service (default: profile's server"))
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
167 self.parser.add_argument(
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
168 "-S", "--start", dest="mam_start", type=base.date_decoder,
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
169 help=_(u"start fetching archive from this date (default: 1 day ago)"))
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
170 self.parser.add_argument(
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
171 "-E", "--end", dest="mam_end", type=base.date_decoder,
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
172 help=_(u"end fetching archive after this date (default: no limit)"))
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
173 self.parser.add_argument(
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
174 "-W", "--with", dest="mam_with", type=base.unicode_decoder,
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
175 help=_(u"retrieve only archives with this jid"))
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
176 self.parser.add_argument(
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
177 "-M", "--max", dest="rsm_max", type=int, default=20,
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
178 help=_(u"maximum number of items to retrieve, using RSM (default: 20))"))
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
179
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
180 def _sessionInfosGetCb(self, session_info, data):
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
181 self.host.own_jid = jid.JID(session_info[u"jid"])
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
182 self.output(data)
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
183 self.host.quit()
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
184
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
185 def _MAMGetCb(self, result):
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
186 data, profile = result
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
187 self.host.bridge.sessionInfosGet(self.profile,
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
188 callback=partial(self._sessionInfosGetCb, data=data), errback=self.errback)
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
189
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
190 def start(self):
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
191 if self.args.mam_start is None:
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
192 self.args.mam_start = base.date_decoder(u"-1 day")
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
193 extra = {
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
194 u"mam_start": float(self.args.mam_start),
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
195 }
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
196 if self.args.mam_end is not None:
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
197 extra[u"mam_end"] = float(self.args.mam_end)
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
198 if self.args.mam_with is not None:
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
199 extra[u"mam_with"] = self.args.mam_with
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
200 if self.args.rsm_max is not None:
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
201 extra[u"rsm_max"] = self.args.rsm_max
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
202 self.host.bridge.MAMGet(
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
203 self.args.service, data_format.serialise(extra), self.profile,
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
204 callback=self._MAMGetCb, errback=self.errback)
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
205
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
206
2663
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
207 class EncryptionAlgorithms(base.CommandBase):
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
208
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
209 def __init__(self, host):
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
210 extra_outputs = {"default": self.default_output}
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
211 super(EncryptionAlgorithms, self).__init__(
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
212 host, "algorithms",
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
213 use_output=C.OUTPUT_LIST_DICT,
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
214 extra_outputs=extra_outputs,
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
215 use_profile=False,
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
216 help=_("show available encryption algorithms"))
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
217 self.need_loop = True
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
218
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
219 def add_parser_options(self):
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
220 pass
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
221
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
222 def encryptionPluginsGetCb(self, plugins):
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
223 self.output(plugins)
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
224 self.host.quit()
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
225
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
226 def default_output(self, plugins):
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
227 if not plugins:
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
228 self.disp(_(u"No encryption plugin registered!"))
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
229 self.host.quit(C.EXIT_NOT_FOUND)
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
230 else:
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
231 self.disp(_(u"Following encryption algorithms are available: {algos}").format(
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
232 algos=', '.join([p['name'] for p in plugins])))
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
233 self.host.quit()
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
234
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
235 def start(self):
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
236 self.host.bridge.encryptionPluginsGet(
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
237 callback=self.encryptionPluginsGetCb,
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
238 errback=partial(
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
239 self.errback,
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
240 msg=_(u"can't retrieve plugins: {}"),
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
241 exit_code=C.EXIT_BRIDGE_ERRBACK,
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
242 ),
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
243 )
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
244
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
245
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
246 class Encryption(base.CommandBase):
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
247 subcommands = (EncryptionAlgorithms,)
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
248
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
249 def __init__(self, host):
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
250 super(Encryption, self).__init__(
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
251 host, "encryption", use_profile=False, help=_("encryption sessions handling")
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
252 )
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
253
32b5f68a23b4 jp (message): new encryption/algorithms command to retrieve available encryptions algorithms.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
254
1828
cb4be663a4a7 jp (message): message is now a subcommand, and the sending command is moved to message/send
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
255 class Message(base.CommandBase):
2708
0b5deb9a35fd jp (message): new mam subcommand:
Goffi <goffi@goffi.org>
parents: 2663
diff changeset
256 subcommands = (Send, MAM, Encryption)
1828
cb4be663a4a7 jp (message): message is now a subcommand, and the sending command is moved to message/send
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
257
cb4be663a4a7 jp (message): message is now a subcommand, and the sending command is moved to message/send
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
258 def __init__(self, host):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
259 super(Message, self).__init__(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
260 host, "message", use_profile=False, help=_("messages handling")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
261 )