facebook: add "Mark messages as read only when available" setting

Mon, 26 Jun 2017 03:48:51 -0300

author
dx <dx@dxzone.com.ar>
date
Mon, 26 Jun 2017 03:48:51 -0300
changeset 38405
833846fe6fb6
parent 38404
1f25f09b50a2
child 38406
e6eccaa83dec

facebook: add "Mark messages as read only when available" setting

libpurple/protocols/facebook/facebook.c file | annotate | diff | comparison | revisions
--- a/libpurple/protocols/facebook/facebook.c	Mon Jun 26 02:08:12 2017 -0300
+++ b/libpurple/protocols/facebook/facebook.c	Mon Jun 26 03:48:51 2017 -0300
@@ -827,11 +827,32 @@
 	}
 }
 
+static void
+fb_mark_read(FbData *fata, FbId id, gboolean thread)
+{
+	FbApi *api;
+	PurpleAccount *acct;
+	PurpleConnection *gc;
+
+	gc = fb_data_get_connection(fata);
+	acct = purple_connection_get_account(gc);
+	api = fb_data_get_api(fata);
+
+	if (!fb_data_get_unread(fata, id) ||
+	    (purple_account_get_bool(acct, "mark-read-available", FALSE) &&
+	     fb_api_is_invisible(api)))
+	{
+		return;
+	}
+
+	fb_data_set_unread(fata, id, FALSE);
+	fb_api_read(api, id, thread);
+}
+
 static gboolean
 fb_cb_conv_read(gpointer data)
 {
 	const gchar *name;
-	FbApi *api;
 	FbData *fata;
 	FbId id;
 	gchar *tname;
@@ -847,15 +868,9 @@
 	fb_data_clear_timeout(fata, tname, FALSE);
 	g_free(tname);
 
-	if (!purple_conversation_has_focus(conv) ||
-	    !fb_data_get_unread(fata, id))
-	{
-		return FALSE;
+	if (purple_conversation_has_focus(conv)) {
+		fb_mark_read(fata, id, PURPLE_IS_CHAT_CONVERSATION(conv));
 	}
-
-	api = fb_data_get_api(fata);
-	fb_data_set_unread(fata, id, FALSE);
-	fb_api_read(api, id, PURPLE_IS_CHAT_CONVERSATION(conv));
 	return FALSE;
 }
 
@@ -1532,10 +1547,14 @@
 	                                    "sync-interval", 5);
 	opts = g_list_prepend(opts, opt);
 
-	opt = purple_account_option_bool_new(_("Mark messages as read"),
+	opt = purple_account_option_bool_new(_("Mark messages as read on focus"),
 	                                     "mark-read", TRUE);
 	opts = g_list_prepend(opts, opt);
 
+	opt = purple_account_option_bool_new(_("Mark messages as read only when available"),
+	                                     "mark-read-available", FALSE);
+	opts = g_list_prepend(opts, opt);
+
 	opt = purple_account_option_bool_new(_("Show self messages"),
 	                                     "show-self", TRUE);
 	opts = g_list_prepend(opts, opt);

mercurial