Add a favorite property to PurpleContactInfo

Thu, 22 Feb 2024 06:03:16 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 22 Feb 2024 06:03:16 -0600
changeset 42596
b64b96f3b781
parent 42595
e2078e5dc55c
child 42597
cc322d213d2e

Add a favorite property to PurpleContactInfo

This will be used in the future for toggling whether or not contacts are
favorited or starred.

Testing Done:
Ran the unit tests under valgrind.

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

libpurple/purplecontactinfo.c file | annotate | diff | comparison | revisions
libpurple/purplecontactinfo.h file | annotate | diff | comparison | revisions
libpurple/tests/test_contact_info.c file | annotate | diff | comparison | revisions
--- a/libpurple/purplecontactinfo.c	Tue Feb 20 01:43:23 2024 -0600
+++ b/libpurple/purplecontactinfo.c	Thu Feb 22 06:03:16 2024 -0600
@@ -37,6 +37,7 @@
 	GTimeZone *time_zone;
 	char *note;
 	char *sid;
+	gboolean favorite;
 
 	char *name_for_display;
 
@@ -68,6 +69,7 @@
 	PROP_PERSON,
 	PROP_PERMISSION,
 	PROP_SID,
+	PROP_FAVORITE,
 	PROP_NAME_FOR_DISPLAY,
 	N_PROPERTIES,
 };
@@ -221,6 +223,9 @@
 		case PROP_SID:
 			g_value_set_string(value, purple_contact_info_get_sid(info));
 			break;
+		case PROP_FAVORITE:
+			g_value_set_boolean(value, purple_contact_info_get_favorite(info));
+			break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
 			break;
@@ -275,6 +280,9 @@
 		case PROP_SID:
 			purple_contact_info_set_sid(info, g_value_get_string(value));
 			break;
+		case PROP_FAVORITE:
+			purple_contact_info_set_favorite(info, g_value_get_boolean(value));
+			break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
 			break;
@@ -573,6 +581,19 @@
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
 	/**
+	 * PurpleContactInfo:favorite:
+	 *
+	 * Whether or not the contact info has been marked as a favorite or stared.
+	 *
+	 * Since: 3.0
+	 */
+	properties[PROP_FAVORITE] = g_param_spec_boolean(
+		"favorite", "favorite",
+		"Whether or not this is a favorite contact.",
+		FALSE,
+		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+	/**
 	 * PurpleContactInfo:name-for-display:
 	 *
 	 * The name that the user interface should display for this contact info.
@@ -1104,6 +1125,32 @@
 	}
 }
 
+gboolean
+purple_contact_info_get_favorite(PurpleContactInfo *info) {
+	PurpleContactInfoPrivate *priv = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_CONTACT_INFO(info), FALSE);
+
+	priv = purple_contact_info_get_instance_private(info);
+
+	return priv->favorite;
+}
+
+void
+purple_contact_info_set_favorite(PurpleContactInfo *info, gboolean favorite) {
+	PurpleContactInfoPrivate *priv = NULL;
+
+	g_return_if_fail(PURPLE_IS_CONTACT_INFO(info));
+
+	priv = purple_contact_info_get_instance_private(info);
+
+	if(priv->favorite != favorite) {
+		priv->favorite = favorite;
+
+		g_object_notify_by_pspec(G_OBJECT(info), properties[PROP_FAVORITE]);
+	}
+}
+
 const char *
 purple_contact_info_get_name_for_display(PurpleContactInfo *info) {
 	PurpleContactInfoPrivate *priv = NULL;
--- a/libpurple/purplecontactinfo.h	Tue Feb 20 01:43:23 2024 -0600
+++ b/libpurple/purplecontactinfo.h	Thu Feb 22 06:03:16 2024 -0600
@@ -484,6 +484,31 @@
 void purple_contact_info_set_sid(PurpleContactInfo *info, const char *sid);
 
 /**
+ * purple_contact_info_get_favorite:
+ * @info: The instance.
+ *
+ * Gets whether or not @info is a favorite or starred contact.
+ *
+ * Returns: %TRUE if @info is a favorite, otherwise %FALSE.
+ *
+ * Since: 3.0
+ */
+PURPLE_AVAILABLE_IN_3_0
+gboolean purple_contact_info_get_favorite(PurpleContactInfo *info);
+
+/**
+ * purple_contact_info_set_favorite:
+ * @info: The instance.
+ * @favorite: %TRUE to mark @info as a favorite, otherwise %FALSE.
+ *
+ * Sets whether or not @info is a favorite.
+ *
+ * Since: 3.0
+ */
+PURPLE_AVAILABLE_IN_3_0
+void purple_contact_info_set_favorite(PurpleContactInfo *info, gboolean favorite);
+
+/**
  * purple_contact_info_get_name_for_display:
  * @info: The instance.
  *
--- a/libpurple/tests/test_contact_info.c	Tue Feb 20 01:43:23 2024 -0600
+++ b/libpurple/tests/test_contact_info.c	Thu Feb 22 06:03:16 2024 -0600
@@ -60,6 +60,7 @@
 	char *note = NULL;
 	char *sid = NULL;
 	char *name_for_display = NULL;
+	gboolean favorite = FALSE;
 
 	avatar = g_object_new(PURPLE_TYPE_AVATAR, NULL);
 	person = purple_person_new();
@@ -85,6 +86,7 @@
 		"person", person,
 		"permission", PURPLE_CONTACT_INFO_PERMISSION_ALLOW,
 		"sid", "sid",
+		"favorite", TRUE,
 		NULL);
 
 	/* Now use g_object_get to read all of the properties. */
@@ -105,6 +107,7 @@
 		"permission", &permission,
 		"sid", &sid,
 		"name-for-display", &name_for_display,
+		"favorite", &favorite,
 		NULL);
 
 	/* Compare all the things. */
@@ -125,6 +128,7 @@
 	g_assert_true(person1 == person);
 	g_assert_true(permission == PURPLE_CONTACT_INFO_PERMISSION_ALLOW);
 	g_assert_cmpstr(sid, ==, "sid");
+	g_assert_true(favorite);
 
 	/* Free/unref all the things. */
 	g_clear_pointer(&id, g_free);

mercurial