--- a/libpurple/purpleconversation.c Thu Apr 17 23:35:53 2025 -0500 +++ b/libpurple/purpleconversation.c Mon Apr 21 22:43:29 2025 -0500 @@ -81,6 +81,8 @@ gboolean drafting; GError *error; + + char *url; }; enum { @@ -117,6 +119,7 @@ PROP_LOGGING, PROP_DRAFTING, PROP_ERROR, + PROP_URL, N_PROPERTIES, }; static GParamSpec *properties[N_PROPERTIES] = {NULL, }; @@ -603,6 +606,9 @@ purple_conversation_set_drafting(conversation, g_value_get_boolean(value)); break; + case PROP_URL: + purple_conversation_set_url(conversation, g_value_get_string(value)); + break; case PROP_ERROR: purple_conversation_set_error(conversation, g_value_get_boxed(value)); break; @@ -741,6 +747,9 @@ case PROP_ERROR: g_value_set_boxed(value, purple_conversation_get_error(conversation)); break; + case PROP_URL: + g_value_set_string(value, purple_conversation_get_url(conversation)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec); break; @@ -817,6 +826,8 @@ g_clear_error(&conversation->error); + g_clear_pointer(&conversation->url, g_free); + G_OBJECT_CLASS(purple_conversation_parent_class)->finalize(object); } @@ -1335,6 +1346,23 @@ G_TYPE_ERROR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + /** + * PurpleConversation:url: + * + * A URL related to the conversation. + * + * Some networks, notably IRC, allow you to associate a URL with a + * conversation. In that case, it is generally a URL to get more + * information about the conversation and not a URL to the conversation + * itself. + * + * Since: 3.0 + */ + properties[PROP_URL] = g_param_spec_string( + "url", NULL, NULL, + NULL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + g_object_class_install_properties(obj_class, N_PROPERTIES, properties); /** @@ -2266,3 +2294,20 @@ return member; } + +const char * +purple_conversation_get_url(PurpleConversation *conversation) { + g_return_val_if_fail(PURPLE_IS_CONVERSATION(conversation), NULL); + + return conversation->url; +} + +void +purple_conversation_set_url(PurpleConversation *conversation, const char *url) +{ + g_return_if_fail(PURPLE_IS_CONVERSATION(conversation)); + + if(g_set_str(&conversation->url, url)) { + g_object_notify_by_pspec(G_OBJECT(conversation), properties[PROP_URL]); + } +}