--- a/libpurple/prefs.c Fri Sep 30 03:11:02 2022 -0500
+++ b/libpurple/prefs.c Fri Sep 30 03:12:09 2022 -0500
@@ -1454,31 +1454,6 @@
purple_prefs_add_bool("/purple/away/away_when_idle", TRUE);
purple_prefs_add_int("/purple/away/mins_before_away", 5);
- /* Away -> Auto-Reply */
- if (!purple_prefs_exists("/purple/away/auto_response/enabled") ||
- !purple_prefs_exists("/purple/away/auto_response/idle_only"))
- purple_prefs_add_string("/purple/away/auto_reply", "awayidle");
- if (!purple_prefs_get_bool("/purple/away/auto_response/enabled"))
- purple_prefs_add_string("/purple/away/auto_reply", "never");
- if (purple_prefs_get_bool("/purple/away/auto_response/idle_only"))
- purple_prefs_add_string("/purple/away/auto_reply", "awayidle");
- purple_prefs_add_string("/purple/away/auto_reply", "away");
purple_prefs_add_none("/purple/buddies");
--- a/libpurple/server.c Fri Sep 30 03:11:02 2022 -0500
+++ b/libpurple/server.c Fri Sep 30 03:12:09 2022 -0500
@@ -44,9 +44,6 @@
-#define SECS_BEFORE_RESENDING_AUTORESPONSE 600
-#define SEX_BEFORE_RESENDING_AUTORESPONSE "Only after you're married"
purple_serv_send_typing(PurpleConnection *gc, const char *name, PurpleIMTypingState state)
@@ -60,74 +57,13 @@
-static GSList *last_auto_responses = NULL;
-struct last_auto_response {
-expire_last_auto_responses(gpointer data)
- struct last_auto_response *lar;
- tmp = last_auto_responses;
- lar = (struct last_auto_response *)cur->data;
- if ((time(NULL) - lar->sent) > SECS_BEFORE_RESENDING_AUTORESPONSE) {
- last_auto_responses = g_slist_delete_link(last_auto_responses, cur);
- return FALSE; /* do not run again */
-static struct last_auto_response *
-get_last_auto_response(PurpleConnection *gc, const char *name)
- struct last_auto_response *lar;
- /* because we're modifying or creating a lar, schedule the
- * function to expire them as the pref dictates */
- g_timeout_add_seconds((SECS_BEFORE_RESENDING_AUTORESPONSE + 1), expire_last_auto_responses, NULL);
- tmp = last_auto_responses;
- lar = (struct last_auto_response *)tmp->data;
- if (gc == lar->gc && !strncmp(name, lar->name, sizeof(lar->name)))
- lar = g_new0(struct last_auto_response, 1);
- g_snprintf(lar->name, sizeof(lar->name), "%s", name);
- last_auto_responses = g_slist_prepend(last_auto_responses, lar);
int purple_serv_send_im(PurpleConnection *gc, PurpleMessage *msg)
PurpleAccount *account = NULL;
PurpleConversation *im = NULL;
PurpleConversationManager *manager = NULL;
- PurplePresence *presence = NULL;
PurpleProtocol *protocol = NULL;
- const gchar *auto_reply_pref = NULL;
g_return_val_if_fail(gc != NULL, val);
@@ -139,7 +75,6 @@
g_return_val_if_fail(PURPLE_IS_PROTOCOL_IM(protocol), val);
account = purple_connection_get_account(gc);
- presence = purple_account_get_presence(account);
recipient = purple_message_get_recipient(msg);
manager = purple_conversation_manager_get_default();
@@ -155,20 +90,6 @@
val = purple_protocol_im_send(pim, gc, msg);
- * XXX - If "only auto-reply when away & idle" is set, then shouldn't
- * this only reset lar->sent if we're away AND idle?
- auto_reply_pref = purple_prefs_get_string("/purple/away/auto_reply");
- if((purple_connection_get_flags(gc) & PURPLE_CONNECTION_FLAG_AUTO_RESP) &&
- !purple_presence_is_available(presence) &&
- !purple_strequal(auto_reply_pref, "never")) {
- struct last_auto_response *lar;
- lar = get_last_auto_response(gc, recipient);
- lar->sent = time(NULL);
if(im && purple_im_conversation_get_send_typed_timeout(PURPLE_IM_CONVERSATION(im)))
purple_im_conversation_stop_send_typed_timeout(PURPLE_IM_CONVERSATION(im));
@@ -561,85 +482,6 @@
g_object_unref(G_OBJECT(pmsg));
- * Don't autorespond if:
- * - it's not supported on this connection
- * - or we're not idle and the 'only auto respond if idle' pref
- if (purple_connection_get_flags(gc) & PURPLE_CONNECTION_FLAG_AUTO_RESP)
- PurplePresence *presence;
- PurpleStatusType *status_type;
- PurpleStatusPrimitive primitive;
- const gchar *auto_reply_pref;
- const char *away_msg = NULL;
- gboolean mobile = FALSE;
- auto_reply_pref = purple_prefs_get_string("/purple/away/auto_reply");
- presence = purple_account_get_presence(account);
- status = purple_presence_get_active_status(presence);
- status_type = purple_status_get_status_type(status);
- primitive = purple_status_type_get_primitive(status_type);
- mobile = purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_MOBILE);
- if ((primitive == PURPLE_STATUS_AVAILABLE) ||
- (primitive == PURPLE_STATUS_INVISIBLE) ||
- purple_strequal(auto_reply_pref, "never") ||
- (!purple_presence_is_idle(presence) && purple_strequal(auto_reply_pref, "awayidle")))
- away_msg = g_value_get_string(
- purple_status_get_attr_value(status, "message"));
- if ((away_msg != NULL) && (*away_msg != '\0')) {
- struct last_auto_response *lar;
- time_t now = time(NULL);
- * This used to be based on the conversation window. But um, if
- * you went away, and someone sent you a message and got your
- * auto-response, and then you closed the window, and then they
- * sent you another one, they'd get the auto-response back too
- * soon. Besides that, we need to keep track of this even if we've
- * got a queue. So the rest of this block is just the auto-response,
- lar = get_last_auto_response(gc, name);
- if ((now - lar->sent) >= SECS_BEFORE_RESENDING_AUTORESPONSE)
- * We don't want to send an autoresponse in response to the other user's
- * autoresponse. We do, however, not want to then send one in response to the
- * _next_ message, so we still set lar->sent to now.
- if (!(flags & PURPLE_MESSAGE_AUTO_RESP))
- const gchar *me = purple_account_get_name_for_display(account);
- msg = purple_message_new_outgoing(me, name,
- away_msg, PURPLE_MESSAGE_AUTO_RESP);
- purple_serv_send_im(gc, msg);
- purple_conversation_write_message(PURPLE_CONVERSATION(im), msg);
- g_object_unref(G_OBJECT(msg));
--- a/pidgin/prefs/pidginawayprefs.c Fri Sep 30 03:11:02 2022 -0500
+++ b/pidgin/prefs/pidginawayprefs.c Fri Sep 30 03:12:09 2022 -0500
@@ -38,7 +38,6 @@
GtkWidget *mins_before_away;
GtkWidget *away_when_idle;
GtkWidget *startup_current_status;
@@ -73,24 +72,6 @@
purple_savedstatus_get_creation_time(status));
-auto_reply_expression_cb(GObject *self, G_GNUC_UNUSED gpointer data)
- const gchar *text = "";
- const gchar *value = NULL;
- value = gtk_string_object_get_string(GTK_STRING_OBJECT(self));
- if(purple_strequal(value, "never")) {
- } else if(purple_strequal(value, "away")) {
- } else if(purple_strequal(value, "awayidle")) {
- text = _("When both away and idle");
set_startupstatus(PurpleSavedStatus *status)
@@ -122,10 +103,6 @@
gtk_widget_class_bind_template_child(widget_class, PidginAwayPrefs,
gtk_widget_class_bind_template_child(widget_class, PidginAwayPrefs,
- gtk_widget_class_bind_template_callback(widget_class,
- auto_reply_expression_cb);
- gtk_widget_class_bind_template_child(widget_class, PidginAwayPrefs,
gtk_widget_class_bind_template_child(widget_class, PidginAwayPrefs,
@@ -159,9 +136,6 @@
- pidgin_prefs_bind_combo_row("/purple/away/auto_reply", prefs->auto_reply);
/* Signon status stuff */
pidgin_prefs_bind_switch("/purple/savedstatus/startup_current_status",
prefs->startup_current_status);
--- a/pidgin/resources/Prefs/away.ui Fri Sep 30 03:11:02 2022 -0500
+++ b/pidgin/resources/Prefs/away.ui Fri Sep 30 03:12:09 2022 -0500
@@ -86,30 +86,6 @@
<object class="AdwPreferencesGroup">
- <property name="title" translatable="1">Away</property>
- <object class="AdwComboRow" id="auto_reply">
- <property name="title" translatable="1">_Auto-reply</property>
- <property name="use-subtitle">1</property>
- <property name="use-underline">1</property>
- <property name="model">
- <object class="GtkStringList">
- <property name="expression">
- <closure type="gchararray" function="auto_reply_expression_cb"/>
- <object class="AdwPreferencesGroup">
<property name="title" translatable="1">Status at Startup</property>
<object class="AdwActionRow">