Mon, 19 Aug 2024 21:17:49 -0500
Add a typing-state property to Purple.Conversation
This property tracks the typing state of the libpurple user in the
conversation. User interfaces are expected to set this property to typing
whenever the user's input could be considered part of the message.
When the state changes to typing, a timeout will be added to set the state to
paused. This timeout is reset each time the property is set to typing again.
If that timeout expires, a new timeout will be added to set the state to none.
When the conversation is created, the typing-state properties on the
Conversation and the ConversationMember of the libpurple user are bound so
user interfaces can treat that ConversationMember like any other.
The conversation properties unit test was updated to verify that the property
plumbing is in place. However, no other unit tests were created as the timeouts
would add too much time to the tests.
Testing Done:
Ran the unit tests and temporarily added some code to pidgin to set the typing state and verified the timeouts worked as intended.
Reviewed at https://reviews.imfreedom.org/r/3409/
|
38538
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
1 | #!/usr/bin/env python3 |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
2 | # |
|
42357
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
3 | # Purple - Internet Messaging Library |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
4 | # Copyright (C) Pidgin Developers <devel@pidgin.im> |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
5 | # |
|
38538
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
6 | # Purple is the legal property of its developers, whose names are too numerous |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
7 | # to list here. Please refer to the COPYRIGHT file distributed with this |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
8 | # source distribution. |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
9 | # |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
10 | # This program is free software; you can redistribute it and/or modify |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
11 | # it under the terms of the GNU General Public License as published by |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
12 | # the Free Software Foundation; either version 2 of the License, or |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
13 | # (at your option) any later version. |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
14 | # |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
15 | # This program is distributed in the hope that it will be useful, |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
16 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
17 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
18 | # GNU General Public License for more details. |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
19 | # |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
20 | # You should have received a copy of the GNU General Public License |
|
42357
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
21 | # along with this program; if not, see <https://www.gnu.org/licenses/>. |
|
38538
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
22 | |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
23 | """ |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
24 | Produce meson-config.h in a build directory. |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
25 | |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
26 | This should not really be run manually. It is used by Meson as a |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
27 | post-configuration script to create meson-config.h which for now simply |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
28 | contains information about the configuration used to create the build |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
29 | directory. |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
30 | """ |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
31 | |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
32 | import html |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
33 | import json |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
34 | import os |
|
38653
f5810607660c
Split MESONINTROSPECT input before executing subprocess.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
38538
diff
changeset
|
35 | import shlex |
|
38538
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
36 | import subprocess |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
37 | import sys |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
38 | |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
39 | |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
40 | try: |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
41 | introspect = os.environ['MESONINTROSPECT'] |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
42 | except KeyError: |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
43 | print('Meson is too old; ' |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
44 | 'it does not set MESONINTROSPECT for postconf scripts.') |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
45 | sys.exit(1) |
|
38653
f5810607660c
Split MESONINTROSPECT input before executing subprocess.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
38538
diff
changeset
|
46 | else: |
|
f5810607660c
Split MESONINTROSPECT input before executing subprocess.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
38538
diff
changeset
|
47 | introspect = shlex.split(introspect) |
|
38538
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
48 | |
|
42357
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
49 | # This is the top-most Meson build root. |
|
38538
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
50 | try: |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
51 | build_root = os.environ['MESON_BUILD_ROOT'] |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
52 | except KeyError: |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
53 | print('Meson is too old; ' |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
54 | 'it does not set MESON_BUILD_ROOT for postconf scripts.') |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
55 | sys.exit(1) |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
56 | |
|
42357
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
57 | # This is the build root for the Pidgin project itself, which may be different |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
58 | # if it's used as a subproject. |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
59 | project_build_root = sys.argv[1] |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
60 | |
|
38538
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
61 | |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
62 | def tostr(obj): |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
63 | if isinstance(obj, str): |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
64 | return html.escape(repr(obj)) |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
65 | else: |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
66 | return repr(obj) |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
67 | |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
68 | |
|
42357
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
69 | def normalize_pidgin_option(option): |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
70 | """Promote Pidgin-as-subproject options to global options.""" |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
71 | name = option['name'] |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
72 | # Option names for subprojects are determined by the wrap file name + the |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
73 | # subproject option. Unfortunately, the wrap file name is determined by the |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
74 | # superproject, so we can't know what it is. Just assume it is something |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
75 | # semi-standard. |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
76 | if ':' in name and name.startswith('pidgin'): |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
77 | option['name'] = name.split(':')[1] |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
78 | return option |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
79 | |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
80 | |
|
38653
f5810607660c
Split MESONINTROSPECT input before executing subprocess.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
38538
diff
changeset
|
81 | conf = subprocess.check_output(introspect + ['--buildoptions', build_root], |
|
38538
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
82 | universal_newlines=True) |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
83 | conf = json.loads(conf) |
|
b542a6787116
Add meson arguments to About dialog.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff
changeset
|
84 | |
|
42357
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
85 | # Skip all subproject options, or else the config string explodes. |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
86 | conf = [normalize_pidgin_option(option) for option in conf] |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
87 | conf = [option for option in conf if ':' not in option['name']] |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
88 | |
|
0073491e35ff
Fix postconf script when used as a subproject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
38653
diff
changeset
|
89 | with open(os.path.join(project_build_root, 'meson-config.h'), 'w') as f: |
|
42457
d9c2194dbc2b
Fix build information when config uses lists
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42357
diff
changeset
|
90 | f.write('#include <purple.h>\n') |
|
d9c2194dbc2b
Fix build information when config uses lists
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42357
diff
changeset
|
91 | f.write('const PurpleKeyValuePair MESON_ARGS[] = {\n') |
|
d9c2194dbc2b
Fix build information when config uses lists
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42357
diff
changeset
|
92 | for option in sorted(conf, key=lambda x: x['name']): |
|
d9c2194dbc2b
Fix build information when config uses lists
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42357
diff
changeset
|
93 | f.write('{ .key= "' + option['name'] + '",' + |
|
d9c2194dbc2b
Fix build information when config uses lists
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42357
diff
changeset
|
94 | ' .value="' + tostr(option['value']) + '" },\n') |
|
d9c2194dbc2b
Fix build information when config uses lists
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42357
diff
changeset
|
95 | f.write('{ .key=NULL, .value=NULL },\n') |
|
d9c2194dbc2b
Fix build information when config uses lists
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42357
diff
changeset
|
96 | f.write('};\n') |