libpurple/purpleidlemanager.h

Mon, 23 Oct 2023 22:08:37 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Mon, 23 Oct 2023 22:08:37 -0500
changeset 42383
e8302a55fddb
child 42387
d9350cda1556
permissions
-rw-r--r--

Create PurpleIdleManager for managing idle states

Testing Done:
Ran the unit tests

Bugs closed: PIDGIN-17818

Reviewed at https://reviews.imfreedom.org/r/2586/

42383
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Purple - Internet Messaging Library
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Purple is the legal property of its developers, whose names are too numerous
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * (at your option) any later version.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * GNU General Public License for more details.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION)
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24 # error "only <purple.h> may be included directly"
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 #endif
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 #ifndef PURPLE_IDLE_MANAGER_H
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28 #define PURPLE_IDLE_MANAGER_H
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 #include <glib.h>
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31 #include <glib-object.h>
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 #define PURPLE_TYPE_IDLE_MANAGER (purple_idle_manager_get_type())
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 G_DECLARE_FINAL_TYPE(PurpleIdleManager, purple_idle_manager, PURPLE,
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35 IDLE_MANAGER, GObject)
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 /**
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38 * PurpleIdleManager:
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 * The idle manager keeps track of multiple idle sources and aggregates them
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41 * to the oldest one to report a global idle state.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43 * Idle sources include application usage, device usage, or a manually set
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 * value, among other possibilities. User interfaces should allow users to
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 * determine what if any idle sources are tracked in the idle manager.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47 * The idle source with the oldest timestamp is used as the value for
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48 * [property@IdleManager:timestamp] as it is most likely what the user is
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49 * looking for based on the settings they would choose in the user interface.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 * Most users will only ever have a single idle source, but could add an
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52 * additional manual source to set a specific time that they went idle.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54 * If the user has chosen no idle reporting, which means no sources are ever
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 * added to [class@IdleManager], then [property@IdleManager:timestamp] will
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56 * always be %NULL.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58 * Most users will choose between application and device usage. The difference
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
59 * being that application usage is updated whenever you send a message whereas
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 * device usage is only updated when you haven't interacted with your device.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62 * However, there is also the ability to manually set an idle time via plugins.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 * Typically users will manually set their idle time to something exaggerated
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64 * like months or years.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66 * A manual idle source could also be created to replicate an existing idle
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67 * source like the application usage, so that the user can start using the
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 * application without resetting the idle time. This would in effect allow the
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69 * user to use the application in "stealth mode" by remaining idle.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71 * In both of these examples, the user wishes to remain idle while still using
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72 * the application. This is precisely why the oldest idle time is used as the
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 * aggregate.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
74 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75 * Since: 3.0.0
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76 */
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
77
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 G_BEGIN_DECLS
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
79
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80 /**
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81 * purple_idle_manager_get_default:
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83 * Gets the default idle manager that libpurple is using.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 * Returns: (transfer none): The default idle manager.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87 * Since: 3.0.0
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
88 */
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
89 PurpleIdleManager *purple_idle_manager_get_default(void);
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 /**
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92 * purple_idle_manager_set_source:
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93 * @manager: The instance.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94 * @source: The name of the source.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
95 * @timestamp: (nullable): The new timestamp for @source.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
96 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
97 * Sets the timestamp of when @source went idle to @timestamp. If @timestamp is
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98 * %NULL, @source will be removed from @manager.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
99 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
100 * Returns: %TRUE if [property@IdleManager:timestamp] has changed due to this
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101 * call.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103 * Since: 3.0.0
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104 */
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
105 gboolean purple_idle_manager_set_source(PurpleIdleManager *manager, const char *source, GDateTime *timestamp);
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107 /**
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
108 * purple_idle_manager_get_timestamp:
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
109 * @manager: The instance.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
110 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111 * Gets the oldest timestamp of all the sources that @manager knows about.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
112 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113 * Returns: (transfer none) (nullable): The oldest timestamp or %NULL if no
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
114 * sources are idle.
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
115 *
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
116 * Since: 3.0.0
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
117 */
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
118 GDateTime *purple_idle_manager_get_timestamp(PurpleIdleManager *manager);
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
119
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
120 G_END_DECLS
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
121
e8302a55fddb Create PurpleIdleManager for managing idle states
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
122 #endif /* PURPLE_IDLE_MANAGER_H */

mercurial