pidgin/pidgin

Add a person property to PurpleContact

18 months ago, Gary Kramlich
b7e6166e5300
Parents abf413211063
Children 114cb45a1309
Add a person property to PurpleContact

Testing Done:
Ran the unit tests.

Reviewed at https://reviews.imfreedom.org/r/1852/
--- a/libpurple/purplecontact.c Thu Sep 29 00:46:44 2022 -0500
+++ b/libpurple/purplecontact.c Thu Sep 29 00:51:00 2022 -0500
@@ -33,6 +33,8 @@
PurplePresence *presence;
PurpleTags *tags;
+
+ PurplePerson *person;
};
enum {
@@ -45,6 +47,7 @@
PROP_AVATAR,
PROP_PRESENCE,
PROP_TAGS,
+ PROP_PERSON,
N_PROPERTIES
};
static GParamSpec *properties[N_PROPERTIES] = {NULL, };
@@ -113,6 +116,9 @@
case PROP_TAGS:
g_value_set_object(value, purple_contact_get_tags(contact));
break;
+ case PROP_PERSON:
+ g_value_set_object(value, purple_contact_get_person(contact));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
break;
@@ -147,6 +153,9 @@
case PROP_PRESENCE:
purple_contact_set_presence(contact, g_value_get_object(value));
break;
+ case PROP_PERSON:
+ purple_contact_set_person(contact, g_value_get_object(value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
break;
@@ -161,6 +170,7 @@
g_clear_object(&contact->avatar);
g_clear_object(&contact->presence);
g_clear_object(&contact->tags);
+ g_clear_object(&contact->person);
G_OBJECT_CLASS(purple_contact_parent_class)->dispose(obj);
}
@@ -313,6 +323,19 @@
PURPLE_TYPE_TAGS,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+ /**
+ * PurpleContact:person:
+ *
+ * The [class@Purple.Person] that this contact belongs to.
+ *
+ * Since: 3.0.0
+ */
+ properties[PROP_PERSON] = g_param_spec_object(
+ "person", "person",
+ "The person this contact belongs to.",
+ PURPLE_TYPE_PERSON,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
}
@@ -436,3 +459,19 @@
return contact->tags;
}
+
+void
+purple_contact_set_person(PurpleContact *contact, PurplePerson *person) {
+ g_return_if_fail(PURPLE_IS_CONTACT(contact));
+
+ if(g_set_object(&contact->person, person)) {
+ g_object_notify_by_pspec(G_OBJECT(contact), properties[PROP_PERSON]);
+ }
+}
+
+PurplePerson *
+purple_contact_get_person(PurpleContact *contact) {
+ g_return_val_if_fail(PURPLE_IS_CONTACT(contact), NULL);
+
+ return contact->person;
+}
--- a/libpurple/purplecontact.h Thu Sep 29 00:46:44 2022 -0500
+++ b/libpurple/purplecontact.h Thu Sep 29 00:51:00 2022 -0500
@@ -36,6 +36,8 @@
#define PURPLE_TYPE_CONTACT (purple_contact_get_type())
G_DECLARE_FINAL_TYPE(PurpleContact, purple_contact, PURPLE, CONTACT, GObject)
+#include <libpurple/purpleperson.h>
+
/**
* PurpleContact:
*
@@ -224,6 +226,30 @@
*/
PurpleTags *purple_contact_get_tags(PurpleContact *contact);
+/**
+ * purple_contact_set_person:
+ * @contact: The instance.
+ * @person: (nullable): The new [class@Purple.Person] or %NULL.
+ *
+ * Sets the person that @contact belongs to to @person.
+ *
+ * Since: 3.0.0
+ */
+void purple_contact_set_person(PurpleContact *contact, PurplePerson *person);
+
+/**
+ * purple_contact_get_person:
+ * @contact: The instance.
+ *
+ * Gets the [class@Purple.Person] that @contact belongs to.
+ *
+ * Returns: (transfer none) (nullable): The [class@Purple.Person] that @contact
+ * belongs to, or %NULL.
+ *
+ * Since: 3.0.0
+ */
+PurplePerson *purple_contact_get_person(PurpleContact *contact);
+
G_END_DECLS
#endif /* PURPLE_CONTACT_H */
--- a/libpurple/purpleperson.h Thu Sep 29 00:46:44 2022 -0500
+++ b/libpurple/purpleperson.h Thu Sep 29 00:51:00 2022 -0500
@@ -28,7 +28,6 @@
#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <libpurple/purplecontact.h>
#include <libpurple/purpletags.h>
G_BEGIN_DECLS
@@ -36,6 +35,8 @@
#define PURPLE_TYPE_PERSON (purple_person_get_type())
G_DECLARE_FINAL_TYPE(PurplePerson, purple_person, PURPLE, PERSON, GObject)
+#include <libpurple/purplecontact.h>
+
/**
* PurplePerson:
*
--- a/libpurple/tests/test_contact.c Thu Sep 29 00:46:44 2022 -0500
+++ b/libpurple/tests/test_contact.c Thu Sep 29 00:51:00 2022 -0500
@@ -45,6 +45,8 @@
PurpleAccount *account = NULL;
PurpleAccount *account1 = NULL;
PurpleContact *contact = NULL;
+ PurplePerson *person = NULL;
+ PurplePerson *person1 = NULL;
PurplePresence *presence = NULL;
PurplePresence *presence1 = NULL;
PurpleTags *tags = NULL;
@@ -58,6 +60,7 @@
account = purple_account_new("test", "test");
avatar = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, 1, 1);
presence = g_object_new(PURPLE_TYPE_PRESENCE, NULL);
+ person = purple_person_new();
/* Use g_object_new so we can test setting properties by name. All of them
* call the setter methods, so by doing it this way we exercise more of the
@@ -71,6 +74,7 @@
"alias", "alias",
"avatar", avatar,
"presence", presence,
+ "person", person,
NULL);
/* Now use g_object_get to read all of the properties. */
@@ -83,6 +87,7 @@
"avatar", &avatar1,
"presence", &presence1,
"tags", &tags,
+ "person", &person1,
NULL);
/* Compare all the things. */
@@ -94,6 +99,7 @@
g_assert_true(avatar1 == avatar);
g_assert_true(presence1 == presence);
g_assert_nonnull(tags);
+ g_assert_true(person1 == person);
/* Free/unref all the things. */
g_clear_pointer(&id, g_free);
@@ -104,6 +110,8 @@
g_clear_object(&avatar1);
g_clear_object(&presence1);
g_clear_object(&tags);
+ g_clear_object(&person);
+ g_clear_object(&person1);
g_clear_object(&presence);
g_clear_object(&avatar);