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/
--- 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"
@@ -176,7 +175,6 @@
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_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
- * 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)
- * 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
- * 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 "conversations.h"
-#include "purpleaccountmanager.h"
-#include "savedstatuses.h"
- PURPLE_IDLE_NOT_AWAY = 0,
- PURPLE_IDLE_AWAY_BUT_NOT_AUTO_AWAY
-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
-static GList *idled_accts = NULL;
-static guint idle_timer = 0;
-static time_t last_active_time = 0;
-set_account_idle(PurpleAccount *account, int time_idle)
- PurpleContactInfo *info = PURPLE_CONTACT_INFO(account);
- PurplePresence *presence;
- GDateTime *idle_since = NULL;
- presence = purple_account_get_presence(account);
- if(purple_presence_is_idle(presence)) {
- /* This account is already idle! */
- purple_debug_info("idle", "Setting %s idle %d seconds\n",
- purple_contact_info_get_username(info),
- 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);
-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! */
- 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
- * 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.
- const gchar *idle_reporting;
- gboolean report_idle = TRUE;
- gint idle_recheck_interval = 0;
- gint idle_poll_seconds = purple_prefs_get_int("/purple/away/mins_before_away") * 60;
- 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);
- /* Use system idle time (mouse or keyboard movement, etc.) */
- idle_recheck_interval = 1;
- if(!set && purple_strequal(idle_reporting, "purple")) {
- /* Use 'Purple idle' */
- time_idle = time(NULL) - last_active_time;
- idle_recheck_interval = 0;
- /* Don't report idle time */
- /* If we're not reporting idle, we can still do auto-away.
- * First try "system" and if that isn't possible, use "purple" */
- if(PURPLE_IS_IDLE_UI(idle_ui)) {
- time_t new_idle = purple_idle_ui_get_idle_time(idle_ui);
- idle_recheck_interval = 1;
- time_idle = time(NULL) - last_active_time;
- idle_recheck_interval = 0;
- purple_savedstatus_set_idleaway(FALSE);
- time_until_next_idle_event = 0;
- 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);
- 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
-check_idleness_timer(G_GNUC_UNUSED gpointer data) {
- if (time_until_next_idle_event == 0) {
- /* +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),
- return G_SOURCE_REMOVE;
-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 */
-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 */
-signing_off_cb(PurpleConnection *gc, G_GNUC_UNUSED gpointer data)
- PurpleAccount *account;
- account = purple_connection_get_account(gc);
- set_account_unidle(account);
-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);
- time(&last_active_time);
- g_clear_handle_id(&idle_timer, g_source_remove);
- check_idleness_timer(NULL);
-purple_idle_set(time_t time)
- last_active_time = time;
-purple_idle_set_ui(PurpleIdleUi *ui) {
- g_return_if_fail(ui == NULL || PURPLE_IS_IDLE_UI(ui));
- g_clear_object(&idle_ui);
-purple_idle_get_ui(void) {
-purple_idle_get_handle(void)
-_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),
- 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);
-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
- * 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)
- * 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
- * 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"
-#include <glib-object.h>
-#include "purpleidleui.h"
-#include "purpleversion.h"
-/**************************************************************************/
-/**************************************************************************/
- * Touch our idle tracker. This signifies that the user is
- * 'active'. The conversation code calls this when the
- * user sends an IM, for example.
-void purple_idle_touch(void);
- * @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.
-void purple_idle_set(time_t time);
-/**************************************************************************/
-/**************************************************************************/
- * @ui: (transfer full): An instance of [iface@IdleUi].
- * Sets the user interface idle reporter.
-void purple_idle_set_ui(PurpleIdleUi *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.
-PurpleIdleUi *purple_idle_get_ui(void);
- * Initializes the idle system.
-void purple_idle_init(void);
- * Uninitializes the idle system.
-void purple_idle_uninit(void);
-#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 @@
@@ -59,7 +58,6 @@
'purplehistoryadapter.c',
'purplehistorymanager.c',
'purpleimconversation.c',
@@ -139,7 +137,6 @@
@@ -179,7 +176,6 @@
'purplehistoryadapter.h',
'purplehistorymanager.h',
'purpleimconversation.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
- * 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)
- * 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
- * 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)
-purple_idle_ui_default_init(G_GNUC_UNUSED PurpleIdleUiInterface *iface) {
-/******************************************************************************
- *****************************************************************************/
-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);
--- 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
- * 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)
- * 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
- * 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"
-#ifndef PURPLE_IDLE_UI_H
-#define PURPLE_IDLE_UI_H
-#include <glib-object.h>
-#include "purpleversion.h"
-#define PURPLE_TYPE_IDLE_UI (purple_idle_ui_get_type())
-G_DECLARE_INTERFACE(PurpleIdleUi, purple_idle_ui, PURPLE, IDLE_UI, GObject)
- * @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
-struct _PurpleIdleUiInterface {
- time_t (*get_idle_time)(PurpleIdleUi *ui);
- * 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.
-time_t purple_idle_ui_get_idle_time(PurpleIdleUi *ui);
-#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 "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_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/media/backend-iface.c
@@ -57,7 +56,6 @@
libpurple/purplehistoryadapter.c
libpurple/purplehistorymanager.c
-libpurple/purpleidleui.c
libpurple/purpleimconversation.c
libpurple/purplekeyvaluepair.c