annotate libervia/cli/constants.py @ 4231:e11b13418ba6

plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation: Implement XEP-0343: Signaling WebRTC Data Channels in Jingle. The current version of the XEP (0.3.1) has no implementation and contains some flaws. After discussing this on xsf@, Daniel (from Conversations) mentioned that they had a sprint with Larma (from Dino) to work on another version and provided me with this link: https://gist.github.com/iNPUTmice/6c56f3e948cca517c5fb129016d99e74 . I have used it for my implementation. This implementation reuses work done on Jingle A/V call (notably XEP-0176 and XEP-0167 plugins), with adaptations. When used, XEP-0234 will not handle the file itself as it normally does. This is because WebRTC has several implementations (browser for web interface, GStreamer for others), and file/data must be handled directly by the frontend. This is particularly important for web frontends, as the file is not sent from the backend but from the end-user's browser device. Among the changes, there are: - XEP-0343 implementation. - `file_send` bridge method now use serialised dict as output. - New `BaseTransportHandler.is_usable` method which get content data and returns a boolean (default to `True`) to tell if this transport can actually be used in this context (when we are initiator). Used in webRTC case to see if call data are available. - Support of `application` media type, and everything necessary to handle data channels. - Better confirmation message, with file name, size and description when available. - When file is accepted in preflight, it is specified in following `action_new` signal for actual file transfer. This way, frontend can avoid the display or 2 confirmation messages. - XEP-0166: when not specified, default `content` name is now its index number instead of a UUID. This follows the behaviour of browsers. - XEP-0353: better handling of events such as call taken by another device. - various other updates. rel 441
author Goffi <goffi@goffi.org>
date Sat, 06 Apr 2024 12:57:23 +0200
parents 0f8ea0768a3b
children 0d7bb4df2343
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1 #!/usr/bin/env python3
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
2
970
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
3
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # Primitivus: a SAT frontend
3479
be6d91572633 date update
Goffi <goffi@goffi.org>
parents: 3406
diff changeset
5 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
970
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
6
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
10 # (at your option) any later version.
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
11
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
16
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
19
4074
26b7ed2817da refactoring: rename `sat_frontends` to `libervia.frontends`
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
20 from libervia.frontends.quick_frontend import constants
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 3661
diff changeset
21 from libervia.backend.tools.common.ansi import ANSI as A
4129
51744ad00a42 cli: `rich` initial integration
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
22 from rich.theme import Theme
970
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
23
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
24
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
25 class Const(constants.Const):
2e052998c7eb jp: using C.APP_URL for application url
Goffi <goffi@goffi.org>
parents:
diff changeset
26
3555
53fec6309fa3 cli: update constants to use new name
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
27 APP_NAME = "Libervia CLI"
53fec6309fa3 cli: update constants to use new name
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
28 APP_COMPONENT = "CLI"
53fec6309fa3 cli: update constants to use new name
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
29 APP_NAME_ALT = "jp"
53fec6309fa3 cli: update constants to use new name
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
30 APP_NAME_FILE = "libervia_cli"
53fec6309fa3 cli: update constants to use new name
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
31 CONFIG_SECTION = APP_COMPONENT.lower()
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
32 PLUGIN_CMD = "commands"
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
33 PLUGIN_OUTPUT = "outputs"
4206
0f8ea0768a3b cli (call): implement GUI output:
Goffi <goffi@goffi.org>
parents: 4143
diff changeset
34 #: All outputs are managed directly by the command, ``extra_outputs`` must be
0f8ea0768a3b cli (call): implement GUI output:
Goffi <goffi@goffi.org>
parents: 4143
diff changeset
35 #: specified.
0f8ea0768a3b cli (call): implement GUI output:
Goffi <goffi@goffi.org>
parents: 4143
diff changeset
36 OUTPUT_CUSTOM = "custom"
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
37 OUTPUT_TEXT = "text" # blob of unicode text
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
38 OUTPUT_DICT = "dict" # simple key/value dictionary
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
39 OUTPUT_LIST = "list"
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
40 OUTPUT_LIST_DICT = "list_dict" # list of dictionaries
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
41 OUTPUT_DICT_DICT = "dict_dict" # dict of nested dictionaries
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
42 OUTPUT_MESS = "mess" # messages (chat)
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
43 OUTPUT_COMPLEX = "complex" # complex data (e.g. multi-level dictionary)
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
44 OUTPUT_XML = "xml" # XML node (as unicode string)
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
45 OUTPUT_LIST_XML = "list_xml" # list of XML nodes (as unicode strings)
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
46 OUTPUT_XMLUI = "xmlui" # XMLUI as unicode string
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
47 OUTPUT_LIST_XMLUI = "list_xmlui" # list of XMLUI (as unicode strings)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2601
diff changeset
48 OUTPUT_TYPES = (
4206
0f8ea0768a3b cli (call): implement GUI output:
Goffi <goffi@goffi.org>
parents: 4143
diff changeset
49 OUTPUT_CUSTOM,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2601
diff changeset
50 OUTPUT_TEXT,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2601
diff changeset
51 OUTPUT_DICT,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2601
diff changeset
52 OUTPUT_LIST,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2601
diff changeset
53 OUTPUT_LIST_DICT,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2601
diff changeset
54 OUTPUT_DICT_DICT,
2707
b156b78b8f9a jp (output): new OUTPUT_MESS output to handle data containing chat messages
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
55 OUTPUT_MESS,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2601
diff changeset
56 OUTPUT_COMPLEX,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2601
diff changeset
57 OUTPUT_XML,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2601
diff changeset
58 OUTPUT_LIST_XML,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2601
diff changeset
59 OUTPUT_XMLUI,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2601
diff changeset
60 OUTPUT_LIST_XMLUI,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2601
diff changeset
61 )
3640
f4c02bdb2d91 CLI: use global constants for output names
Goffi <goffi@goffi.org>
parents: 3555
diff changeset
62 OUTPUT_NAME_SIMPLE = "simple"
f4c02bdb2d91 CLI: use global constants for output names
Goffi <goffi@goffi.org>
parents: 3555
diff changeset
63 OUTPUT_NAME_XML = "xml"
f4c02bdb2d91 CLI: use global constants for output names
Goffi <goffi@goffi.org>
parents: 3555
diff changeset
64 OUTPUT_NAME_XML_RAW = "xml-raw"
f4c02bdb2d91 CLI: use global constants for output names
Goffi <goffi@goffi.org>
parents: 3555
diff changeset
65 OUTPUT_NAME_JSON = "json"
f4c02bdb2d91 CLI: use global constants for output names
Goffi <goffi@goffi.org>
parents: 3555
diff changeset
66 OUTPUT_NAME_JSON_RAW = "json-raw"
1951
ac89f455fcbf jp: added consts for exit codes, not used yet
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
67
2532
772447ec070f jp: pubsub options refactoring:
Goffi <goffi@goffi.org>
parents: 2505
diff changeset
68 # Pubsub options flags
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
69 SERVICE = "service" # service required
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
70 NODE = "node" # node required
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
71 ITEM = "item" # item required
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
72 SINGLE_ITEM = "single_item" # only one item is allowed
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
73 MULTI_ITEMS = "multi_items" # multiple items are allowed
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2777
diff changeset
74 NO_MAX = "no_max" # don't add --max option for multi items
3600
1709f0a78f50 jp (base): add flag for `use_pubsub` to add cache skipping option
Goffi <goffi@goffi.org>
parents: 3555
diff changeset
75 CACHE = "cache" # add cache control flag
2532
772447ec070f jp: pubsub options refactoring:
Goffi <goffi@goffi.org>
parents: 2505
diff changeset
76
2232
4f389486667d jp: added constant to handle ANSI code for header and subheaders
Goffi <goffi@goffi.org>
parents: 2190
diff changeset
77 # ANSI
4f389486667d jp: added constant to handle ANSI code for header and subheaders
Goffi <goffi@goffi.org>
parents: 2190
diff changeset
78 A_HEADER = A.BOLD + A.FG_YELLOW
4f389486667d jp: added constant to handle ANSI code for header and subheaders
Goffi <goffi@goffi.org>
parents: 2190
diff changeset
79 A_SUBHEADER = A.BOLD + A.FG_RED
2485
512c443a58ba jp (forums): forums handling commands, first draft
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
80 # A_LEVEL_COLORS may be used to cycle on colors according to depth of data
512c443a58ba jp (forums): forums handling commands, first draft
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
81 A_LEVEL_COLORS = (A_HEADER, A.BOLD + A.FG_BLUE, A.FG_MAGENTA, A.FG_CYAN)
2278
489efbda377c jp (input): input command first draft:
Goffi <goffi@goffi.org>
parents: 2268
diff changeset
82 A_SUCCESS = A.BOLD + A.FG_GREEN
489efbda377c jp (input): input command first draft:
Goffi <goffi@goffi.org>
parents: 2268
diff changeset
83 A_FAILURE = A.BOLD + A.FG_RED
3040
fee60f17ebac jp: jp asyncio port:
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
84 A_WARNING = A.BOLD + A.FG_RED
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2601
diff changeset
85 #  A_PROMPT_* is for shell
2355
0fed4a1c033a jp (shell): changed prompt colour
Goffi <goffi@goffi.org>
parents: 2309
diff changeset
86 A_PROMPT_PATH = A.BOLD + A.FG_CYAN
2309
c7a72b75232b jp (shell): shell command (REPL mode), first draft:
Goffi <goffi@goffi.org>
parents: 2295
diff changeset
87 A_PROMPT_SUF = A.BOLD
2505
8e770ac05b0c jp (file): file sharing + improvments:
Goffi <goffi@goffi.org>
parents: 2485
diff changeset
88 # Files
8e770ac05b0c jp (file): file sharing + improvments:
Goffi <goffi@goffi.org>
parents: 2485
diff changeset
89 A_DIRECTORY = A.BOLD + A.FG_CYAN
8e770ac05b0c jp (file): file sharing + improvments:
Goffi <goffi@goffi.org>
parents: 2485
diff changeset
90 A_FILE = A.FG_WHITE
4129
51744ad00a42 cli: `rich` initial integration
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
91
51744ad00a42 cli: `rich` initial integration
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
92 # rich
51744ad00a42 cli: `rich` initial integration
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
93 THEME_DEFAULT = Theme({
51744ad00a42 cli: `rich` initial integration
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
94 "priority_low": "green",
51744ad00a42 cli: `rich` initial integration
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
95 "priority_medium": "yellow",
51744ad00a42 cli: `rich` initial integration
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
96 "priority_high": "bold magenta",
51744ad00a42 cli: `rich` initial integration
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
97 "priority_urgent": "bold red",
51744ad00a42 cli: `rich` initial integration
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
98 "notif_title": "bold",
4143
849721e1563b cli: `call` command:
Goffi <goffi@goffi.org>
parents: 4129
diff changeset
99 "shortcut": "bold underline"
4129
51744ad00a42 cli: `rich` initial integration
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
100 })