--- a/libpurple/meson.build Wed Nov 16 22:34:18 2022 -0600
+++ b/libpurple/meson.build Wed Nov 16 22:36:02 2022 -0600
@@ -260,6 +260,7 @@
'purpleconnectionerrorinfo.h',
'purpleimconversation.h',
--- a/libpurple/purplecontact.c Wed Nov 16 22:34:18 2022 -0600
+++ b/libpurple/purplecontact.c Wed Nov 16 22:36:02 2022 -0600
@@ -18,6 +18,8 @@
#include "purplecontact.h"
+#include "purpleenums.h" @@ -35,6 +37,8 @@
+ PurpleContactPermission permission; @@ -48,6 +52,7 @@
static GParamSpec *properties[N_PROPERTIES] = {NULL, };
@@ -119,6 +124,9 @@
g_value_set_object(value, purple_contact_get_person(contact));
+ g_value_set_enum(value, purple_contact_get_permission(contact)); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -153,6 +161,9 @@
purple_contact_set_person(contact, g_value_get_object(value));
+ purple_contact_set_permission(contact, g_value_get_enum(value)); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -206,11 +217,11 @@
purple_contact_class_init(PurpleContactClass *klass) {
GObjectClass *obj_class = G_OBJECT_CLASS(klass);
- obj_class->get_property = purple_contact_get_property;
- obj_class->set_property = purple_contact_set_property;
obj_class->constructed = purple_contact_constructed;
obj_class->dispose = purple_contact_dispose;
obj_class->finalize = purple_contact_finalize;
+ obj_class->get_property = purple_contact_get_property; + obj_class->set_property = purple_contact_set_property; @@ -334,6 +345,20 @@
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ * PurpleContact:permission: + * The permission level for the contact. + properties[PROP_PERMISSION] = g_param_spec_enum( + "permission", "permission", + "The permission level of the contact", + PURPLE_TYPE_CONTACT_PERMISSION, + PURPLE_CONTACT_PERMISSION_UNSET, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
@@ -463,3 +488,22 @@
+purple_contact_get_permission(PurpleContact *contact) { + g_return_val_if_fail(PURPLE_IS_CONTACT(contact), + PURPLE_CONTACT_PERMISSION_UNSET); + return contact->permission; +purple_contact_set_permission(PurpleContact *contact, + PurpleContactPermission permission) + g_return_if_fail(PURPLE_IS_CONTACT(contact)); + contact->permission = permission; + g_object_notify_by_pspec(G_OBJECT(contact), properties[PROP_PERMISSION]); --- a/libpurple/purplecontact.h Wed Nov 16 22:34:18 2022 -0600
+++ b/libpurple/purplecontact.h Wed Nov 16 22:36:02 2022 -0600
@@ -37,6 +37,25 @@
#define PURPLE_TYPE_CONTACT (purple_contact_get_type())
G_DECLARE_FINAL_TYPE(PurpleContact, purple_contact, PURPLE, CONTACT, GObject)
+ * PurpleContactPermission: + * @PURPLE_CONTACT_PERMISSION_UNSET: The value is unset. + * @PURPLE_CONTACT_PERMISSION_ALLOW: The contact is allowed to contact the + * @PURPLE_CONTACT_PERMISSION_DENY: The contact is not allowed to contact the + * A representation of whether or not a contact has permission to contact the + PURPLE_CONTACT_PERMISSION_UNSET = 0, + PURPLE_CONTACT_PERMISSION_ALLOW, + PURPLE_CONTACT_PERMISSION_DENY, +} PurpleContactPermission; #include <libpurple/purpleperson.h>
@@ -243,6 +262,29 @@
PurplePerson *purple_contact_get_person(PurpleContact *contact);
+ * purple_contact_get_permission: + * @contact: The instance. + * Gets the [enum@Purple.ContactPermission] for @contact. + * Returns: The permission for @contact. +PurpleContactPermission purple_contact_get_permission(PurpleContact *contact); + * purple_contact_set_permission: + * @contact: The instance. + * @permission: The new permission of the contact. + * Sets the permission of @contact to @permission. +void purple_contact_set_permission(PurpleContact *contact, PurpleContactPermission permission); #endif /* PURPLE_CONTACT_H */
--- a/libpurple/tests/test_contact.c Wed Nov 16 22:34:18 2022 -0600
+++ b/libpurple/tests/test_contact.c Wed Nov 16 22:36:02 2022 -0600
@@ -45,6 +45,7 @@
PurpleAccount *account = NULL;
PurpleAccount *account1 = NULL;
PurpleContact *contact = NULL;
+ PurpleContactPermission permission; PurplePerson *person = NULL;
PurplePerson *person1 = NULL;
PurplePresence *presence1 = NULL;
@@ -73,6 +74,7 @@
+ "permission", PURPLE_CONTACT_PERMISSION_ALLOW, /* Now use g_object_get to read all of the properties. */
@@ -86,6 +88,7 @@
+ "permission", &permission, /* Compare all the things. */
@@ -98,6 +101,7 @@
g_assert_nonnull(presence1);
g_assert_true(person1 == person);
+ g_assert_true(permission == PURPLE_CONTACT_PERMISSION_ALLOW); /* Free/unref all the things. */
g_clear_pointer(&id, g_free);
@@ -131,4 +135,4 @@
test_purple_contact_properties);
\ No newline at end of file