pidgin/pidgin

b64b96f3b781
Parents e2078e5dc55c
Children 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/
--- 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);