Fri, 12 Apr 2024 01:23:26 -0500
Remove the old idle API
We have the new PurpleIdleManager API and nothing uses the old anymore, so out
it goes with the bath water.
Testing Done:
Checked in with splinter
Reviewed at https://reviews.imfreedom.org/r/3100/
| libpurple/core.c | file | annotate | diff | comparison | revisions | |
| libpurple/idle.c | file | annotate | diff | comparison | revisions | |
| libpurple/idle.h | file | annotate | diff | comparison | revisions | |
| libpurple/meson.build | file | annotate | diff | comparison | revisions | |
| libpurple/purpleidleui.c | file | annotate | diff | comparison | revisions | |
| libpurple/purpleidleui.h | file | annotate | diff | comparison | revisions | |
| libpurple/savedstatuses.c | file | annotate | diff | comparison | revisions | |
| po/POTFILES.in | file | annotate | diff | comparison | revisions |
--- a/libpurple/core.c Fri Apr 12 01:10:49 2024 -0500 +++ b/libpurple/core.c Fri Apr 12 01:23:26 2024 -0500 @@ -31,7 +31,6 @@ #include "conversations.h" #include "core.h" #include "debug.h" -#include "idle.h" #include "network.h" #include "notify.h" #include "plugins.h" @@ -176,7 +175,6 @@ purple_network_init(); purple_proxy_init(); - purple_idle_init(); purple_idle_manager_startup(); /* @@ -234,7 +232,6 @@ purple_history_manager_set_active(history_manager, NULL, NULL); /* Save .xml files, remove signals, etc. */ - purple_idle_uninit(); purple_idle_manager_shutdown(); purple_whiteboard_manager_shutdown(); purple_conversation_manager_shutdown();
--- a/libpurple/idle.c Fri Apr 12 01:10:49 2024 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,373 +0,0 @@ -/* - * Purple - Internet Messaging Library - * Copyright (C) Pidgin Developers <devel@pidgin.im> - * - * Purple is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this library; if not, see <https://www.gnu.org/licenses/>. - */ - -#include "idle.h" - -#include "connection.h" -#include "conversations.h" -#include "debug.h" -#include "prefs.h" -#include "purpleaccountmanager.h" -#include "savedstatuses.h" -#include "signals.h" - -typedef enum -{ - PURPLE_IDLE_NOT_AWAY = 0, - PURPLE_IDLE_AUTO_AWAY, - PURPLE_IDLE_AWAY_BUT_NOT_AUTO_AWAY - -} PurpleAutoAwayState; - -static PurpleIdleUi *idle_ui = NULL; - -/* - * This is needed for the I'dle Mak'er plugin to work correctly. We - * use it to determine if we're the ones who set our accounts idle - * or if someone else did it (the I'dle Mak'er plugin, for example). - * Basically we just keep track of which accounts were set idle by us, - * and then we'll only set these specific accounts unidle when the - * user returns. - */ -static GList *idled_accts = NULL; - -static guint idle_timer = 0; - -static time_t last_active_time = 0; - -static void -set_account_idle(PurpleAccount *account, int time_idle) -{ - PurpleContactInfo *info = PURPLE_CONTACT_INFO(account); - PurplePresence *presence; - GDateTime *idle_since = NULL; - GDateTime *now = NULL; - - presence = purple_account_get_presence(account); - - if(purple_presence_is_idle(presence)) { - /* This account is already idle! */ - return; - } - - purple_debug_info("idle", "Setting %s idle %d seconds\n", - purple_contact_info_get_username(info), - time_idle); - - now = g_date_time_new_now_local(); - idle_since = g_date_time_add_seconds(now, -1 * time_idle); - g_date_time_unref(now); - - purple_presence_set_idle(presence, TRUE, idle_since); - g_date_time_unref(idle_since); - - idled_accts = g_list_prepend(idled_accts, account); -} - -static void -set_account_unidle(PurpleAccount *account) -{ - PurpleContactInfo *info = PURPLE_CONTACT_INFO(account); - PurplePresence *presence; - - presence = purple_account_get_presence(account); - - idled_accts = g_list_remove(idled_accts, account); - - if(!purple_presence_is_idle(presence)) { - /* This account is already unidle! */ - return; - } - - purple_debug_info("idle", "Setting %s unidle\n", - purple_contact_info_get_username(info)); - purple_presence_set_idle(presence, FALSE, 0); -} - - -static gboolean no_away = FALSE; -static gint time_until_next_idle_event; -/* - * This function should be called when you think your idle state - * may have changed. Maybe you're over the 10-minute mark and - * Purple should start reporting idle time to the server. Maybe - * you've returned from being idle. Maybe your auto-away message - * should be set. - * - * There is no harm to calling this many many times, other than - * it will be kinda slow. This is called by a timer set when - * Purple starts. It is also called when you send an IM, a chat, etc. - * - * This function has 3 sections. - * 1. Get your idle time. It will query XScreenSaver or Windows - * or use the Purple idle time. Whatever. - * 2. Set or unset your auto-away message. - * 3. Report your current idle time to the IM server. - */ - -static void -check_idleness(void) -{ - time_t time_idle = 0; - gboolean auto_away; - const gchar *idle_reporting; - gboolean report_idle = TRUE; - gint away_seconds = 0; - gint idle_recheck_interval = 0; - gint idle_poll_seconds = purple_prefs_get_int("/purple/away/mins_before_away") * 60; - gboolean set = FALSE; - - purple_signal_emit(purple_blist_get_handle(), "update-idle"); - - idle_reporting = purple_prefs_get_string("/purple/away/idle_reporting"); - auto_away = purple_prefs_get_bool("/purple/away/away_when_idle"); - - if (purple_strequal(idle_reporting, "system") && - PURPLE_IS_IDLE_UI(idle_ui)) - { - time_t new_idle = purple_idle_ui_get_idle_time(idle_ui); - - if(new_idle > 0) { - /* Use system idle time (mouse or keyboard movement, etc.) */ - time_idle = new_idle; - idle_recheck_interval = 1; - set = TRUE; - } - } - - if(!set && purple_strequal(idle_reporting, "purple")) { - /* Use 'Purple idle' */ - time_idle = time(NULL) - last_active_time; - idle_recheck_interval = 0; - } else { - /* Don't report idle time */ - report_idle = FALSE; - - /* If we're not reporting idle, we can still do auto-away. - * First try "system" and if that isn't possible, use "purple" */ - if(auto_away) { - if(PURPLE_IS_IDLE_UI(idle_ui)) { - time_t new_idle = purple_idle_ui_get_idle_time(idle_ui); - - if(new_idle > 0) { - time_idle = new_idle; - idle_recheck_interval = 1; - - set = TRUE; - } - } - - if(!set) { - time_idle = time(NULL) - last_active_time; - idle_recheck_interval = 0; - } - } else { - if(!no_away) { - no_away = TRUE; - purple_savedstatus_set_idleaway(FALSE); - } - time_until_next_idle_event = 0; - return; - } - } - - time_until_next_idle_event = idle_poll_seconds - time_idle; - if (time_until_next_idle_event < 0) - { - /* If we're already idle, check again as appropriate. */ - time_until_next_idle_event = idle_recheck_interval; - } - - if (auto_away || !no_away) - away_seconds = 60 * purple_prefs_get_int("/purple/away/mins_before_away"); - - if (auto_away && time_idle > away_seconds) - { - purple_savedstatus_set_idleaway(TRUE); - no_away = FALSE; - } - else if (purple_savedstatus_is_idleaway() && time_idle < away_seconds) - { - purple_savedstatus_set_idleaway(FALSE); - if (time_until_next_idle_event == 0 || (away_seconds - time_idle) < time_until_next_idle_event) - time_until_next_idle_event = away_seconds - time_idle; - } - - /* Idle reporting stuff */ - if(report_idle && (time_idle >= idle_poll_seconds)) { - PurpleAccountManager *manager = NULL; - GList *accounts = NULL; - - manager = purple_account_manager_get_default(); - accounts = purple_account_manager_get_connected(manager); - while(accounts != NULL) { - set_account_idle(accounts->data, time_idle); - - accounts = g_list_delete_link(accounts, accounts); - } - } - else if (!report_idle || (time_idle < idle_poll_seconds )) - { - while (idled_accts != NULL) - set_account_unidle(idled_accts->data); - } -} - -/* - * Check idle and set the timer to fire at the next idle-worth event - */ -static gboolean -check_idleness_timer(G_GNUC_UNUSED gpointer data) { - check_idleness(); - if (time_until_next_idle_event == 0) { - idle_timer = 0; - } else { - /* +1 for the boundary, - * +1 more for g_timeout_add_seconds rounding. */ - idle_timer = g_timeout_add_seconds(time_until_next_idle_event + 2, - G_SOURCE_FUNC(check_idleness_timer), - NULL); - } - return G_SOURCE_REMOVE; -} - -static void -im_msg_sent_cb(G_GNUC_UNUSED PurpleAccount *account, - G_GNUC_UNUSED PurpleMessage *msg, G_GNUC_UNUSED gpointer data) -{ - /* Check our idle time after an IM is sent */ - check_idleness(); -} - -static void -signing_on_cb(G_GNUC_UNUSED PurpleConnection *connection, - G_GNUC_UNUSED gpointer data) -{ - /* When signing on a new account, check if the account should be idle */ - check_idleness(); -} - -static void -signing_off_cb(PurpleConnection *gc, G_GNUC_UNUSED gpointer data) -{ - PurpleAccount *account; - - account = purple_connection_get_account(gc); - set_account_unidle(account); -} - -static void -idle_reporting_cb(G_GNUC_UNUSED const char *name, - G_GNUC_UNUSED PurplePrefType type, - G_GNUC_UNUSED gconstpointer val, G_GNUC_UNUSED gpointer data) -{ - g_clear_handle_id(&idle_timer, g_source_remove); - check_idleness_timer(NULL); -} - -void -purple_idle_touch(void) -{ - time(&last_active_time); - if (!no_away) - { - g_clear_handle_id(&idle_timer, g_source_remove); - check_idleness_timer(NULL); - } -} - -void -purple_idle_set(time_t time) -{ - last_active_time = time; -} - -void -purple_idle_set_ui(PurpleIdleUi *ui) { - g_return_if_fail(ui == NULL || PURPLE_IS_IDLE_UI(ui)); - - g_clear_object(&idle_ui); - idle_ui = ui; -} - -PurpleIdleUi * -purple_idle_get_ui(void) { - return idle_ui; -} - -static void * -purple_idle_get_handle(void) -{ - static int handle; - - return &handle; -} - -static gboolean -_do_purple_idle_touch_cb(G_GNUC_UNUSED gpointer data) -{ - int idle_poll_minutes = purple_prefs_get_int("/purple/away/mins_before_away"); - - /* +1 more for g_timeout_add_seconds rounding. */ - idle_timer = g_timeout_add_seconds((idle_poll_minutes * 60) + 2, - G_SOURCE_FUNC(check_idleness_timer), - NULL); - - purple_idle_touch(); - - return FALSE; -} - - -void -purple_idle_init(void) -{ - purple_signal_connect(purple_conversations_get_handle(), "sent-im-msg", - purple_idle_get_handle(), - G_CALLBACK(im_msg_sent_cb), NULL); - purple_signal_connect(purple_connections_get_handle(), "signing-on", - purple_idle_get_handle(), - G_CALLBACK(signing_on_cb), NULL); - purple_signal_connect(purple_connections_get_handle(), "signing-off", - purple_idle_get_handle(), - G_CALLBACK(signing_off_cb), NULL); - - purple_prefs_connect_callback(purple_idle_get_handle(), "/purple/away/idle_reporting", - idle_reporting_cb, NULL); - - /* Initialize the idleness asynchronously so it doesn't check idleness, - * and potentially try to change the status before the UI is initialized */ - g_timeout_add(0, _do_purple_idle_touch_cb, NULL); - -} - -void -purple_idle_uninit(void) -{ - purple_signals_disconnect_by_handle(purple_idle_get_handle()); - purple_prefs_disconnect_by_handle(purple_idle_get_handle()); - - /* Remove the idle timer */ - g_clear_handle_id(&idle_timer, g_source_remove); - - g_clear_object(&idle_ui); -}
--- a/libpurple/idle.h Fri Apr 12 01:10:49 2024 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -/* - * Purple - Internet Messaging Library - * Copyright (C) Pidgin Developers <devel@pidgin.im> - * - * Purple is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this library; if not, see <https://www.gnu.org/licenses/>. - */ - -#if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION) -# error "only <purple.h> may be included directly" -#endif - -#ifndef PURPLE_IDLE_H -#define PURPLE_IDLE_H - -#include <time.h> -#include <glib-object.h> - -#include "purpleidleui.h" -#include "purpleversion.h" - -G_BEGIN_DECLS - -/**************************************************************************/ -/* Idle API */ -/**************************************************************************/ - -/** - * purple_idle_touch: - * - * Touch our idle tracker. This signifies that the user is - * 'active'. The conversation code calls this when the - * user sends an IM, for example. - * - * Since: 2.0 - */ -PURPLE_AVAILABLE_IN_ALL -void purple_idle_touch(void); - -/** - * purple_idle_set: - * @time: The time to set the idle time to. - * - * Fake our idle time by setting the time at which our - * accounts purportedly became idle. This is used by - * the I'dle Mak'er plugin. - * - * Since: 2.0 - */ -PURPLE_AVAILABLE_IN_ALL -void purple_idle_set(time_t time); - -/**************************************************************************/ -/* Idle Subsystem */ -/**************************************************************************/ - -/** - * purple_idle_set_ui: - * @ui: (transfer full): An instance of [iface@IdleUi]. - * - * Sets the user interface idle reporter. - * - * Since: 3.0 - */ -PURPLE_AVAILABLE_IN_3_0 -void purple_idle_set_ui(PurpleIdleUi *ui); - -/** - * purple_idle_get_ui: - * - * Gets the current idle reporter. - * - * Returns: (transfer none): The [iface@IdleUi] that is currently in use or - * %NULL if no idle reporter is available. - * - * Since: 3.0 - */ -PURPLE_AVAILABLE_IN_3_0 -PurpleIdleUi *purple_idle_get_ui(void); - -/** - * purple_idle_init: - * - * Initializes the idle system. - * - * Since: 2.0 - */ -PURPLE_AVAILABLE_IN_ALL -void purple_idle_init(void); - -/** - * purple_idle_uninit: - * - * Uninitializes the idle system. - * - * Since: 2.0 - */ -PURPLE_AVAILABLE_IN_ALL -void purple_idle_uninit(void); - -G_END_DECLS - -#endif /* PURPLE_IDLE_H */
--- a/libpurple/meson.build Fri Apr 12 01:10:49 2024 -0500 +++ b/libpurple/meson.build Fri Apr 12 01:23:26 2024 -0500 @@ -15,7 +15,6 @@ 'countingnode.c', 'debug.c', 'group.c', - 'idle.c', 'image.c', 'media/backend-iface.c', 'media/candidate.c', @@ -59,7 +58,6 @@ 'purplehistoryadapter.c', 'purplehistorymanager.c', 'purpleidlemanager.c', - 'purpleidleui.c', 'purpleimconversation.c', 'purplekeyvaluepair.c', 'purplemarkup.c', @@ -139,7 +137,6 @@ 'countingnode.h', 'debug.h', 'group.h', - 'idle.h', 'image.h', 'media.h', 'media-gst.h', @@ -179,7 +176,6 @@ 'purplehistoryadapter.h', 'purplehistorymanager.h', 'purpleidlemanager.h', - 'purpleidleui.h', 'purpleimconversation.h', 'purpleattachment.h', 'purplekeyvaluepair.h',
--- a/libpurple/purpleidleui.c Fri Apr 12 01:10:49 2024 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* - * Purple - Internet Messaging Library - * Copyright (C) Pidgin Developers <devel@pidgin.im> - * - * Purple is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this library; if not, see <https://www.gnu.org/licenses/>. - */ - -#include "purpleidleui.h" - -/****************************************************************************** - * GInterface Implementation - *****************************************************************************/ -G_DEFINE_INTERFACE(PurpleIdleUi, purple_idle_ui, G_TYPE_INVALID) - -static void -purple_idle_ui_default_init(G_GNUC_UNUSED PurpleIdleUiInterface *iface) { -} - -/****************************************************************************** - * Public API - *****************************************************************************/ -time_t -purple_idle_ui_get_idle_time(PurpleIdleUi *ui) { - PurpleIdleUiInterface *iface = NULL; - - g_return_val_if_fail(PURPLE_IS_IDLE_UI(ui), 0); - - iface = PURPLE_IDLE_UI_GET_IFACE(ui); - if(iface != NULL && iface->get_idle_time != NULL) { - return iface->get_idle_time(ui); - } - - return 0; -}
--- a/libpurple/purpleidleui.h Fri Apr 12 01:10:49 2024 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/* - * Purple - Internet Messaging Library - * Copyright (C) Pidgin Developers <devel@pidgin.im> - * - * Purple is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this library; if not, see <https://www.gnu.org/licenses/>. - */ - -#if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION) -# error "only <purple.h> may be included directly" -#endif - -#ifndef PURPLE_IDLE_UI_H -#define PURPLE_IDLE_UI_H - -#include <glib.h> -#include <glib-object.h> - -#include <time.h> - -#include "purpleversion.h" - -G_BEGIN_DECLS - -#define PURPLE_TYPE_IDLE_UI (purple_idle_ui_get_type()) - -PURPLE_AVAILABLE_IN_3_0 -G_DECLARE_INTERFACE(PurpleIdleUi, purple_idle_ui, PURPLE, IDLE_UI, GObject) - -/** - * PurpleIdleUi: - * @get_idle_time: vfunc to get the time that the user interface has been idle. - * - * An interface that a user interface can implement to let the core determine - * idle times. - * - * Since: 3.0 - */ -struct _PurpleIdleUiInterface { - /*< private >*/ - GTypeInterface parent; - - /*< public >*/ - time_t (*get_idle_time)(PurpleIdleUi *ui); - - /*< private >*/ - gpointer reserved[4]; -}; - -/** - * purple_idle_ui_get_idle_time: - * @ui: The idle ui instance. - * - * Gets the idle time from the user interface. - * - * Returns: The time that the user interface went idle. - * - * Since: 3.0 - */ -PURPLE_AVAILABLE_IN_3_0 -time_t purple_idle_ui_get_idle_time(PurpleIdleUi *ui); - -G_END_DECLS - -#endif /* PURPLE_IDLE_UI_H */
--- a/libpurple/savedstatuses.c Fri Apr 12 01:10:49 2024 -0500 +++ b/libpurple/savedstatuses.c Fri Apr 12 01:23:26 2024 -0500 @@ -24,7 +24,6 @@ #include "accounts.h" #include "debug.h" -#include "idle.h" #include "notify.h" #include "prefs.h" #include "purpleaccountmanager.h" @@ -873,11 +872,6 @@ : purple_savedstatus_get_default(); purple_prefs_set_bool("/purple/savedstatus/isidleaway", idleaway); - /* Changing our status makes us un-idle */ - if(!idleaway) { - purple_idle_touch(); - } - if(idleaway && (purple_savedstatus_get_primitive_type(old) != PURPLE_STATUS_AVAILABLE)) { /* Our global status is already "away," so don't change anything */
--- a/po/POTFILES.in Fri Apr 12 01:10:49 2024 -0500 +++ b/po/POTFILES.in Fri Apr 12 01:23:26 2024 -0500 @@ -14,7 +14,6 @@ libpurple/countingnode.c libpurple/debug.c libpurple/group.c -libpurple/idle.c libpurple/image.c libpurple/media/backend-iface.c libpurple/media.c @@ -57,7 +56,6 @@ libpurple/purplegio.c libpurple/purplehistoryadapter.c libpurple/purplehistorymanager.c -libpurple/purpleidleui.c libpurple/purpleimconversation.c libpurple/purplekeyvaluepair.c libpurple/purplemarkup.c