Thu, 22 Feb 2024 06:03:16 -0600
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);