libpurple/protocols/silc/wb.c

changeset 41040
4be2eda9548a
parent 40779
a72067fee822
--- a/libpurple/protocols/silc/wb.c	Thu Sep 02 21:22:55 2021 -0500
+++ b/libpurple/protocols/silc/wb.c	Thu Sep 02 21:28:40 2021 -0500
@@ -105,13 +105,24 @@
 PurpleWhiteboard *silcpurple_wb_init(SilcPurple sg, SilcClientEntry client_entry)
 {
 	PurpleWhiteboard *wb;
+	PurpleWhiteboardManager *manager;
 	SilcPurpleWb wbs;
+	gchar *id = NULL;
+
+	manager = purple_whiteboard_manager_get_default();
 
-	wb = purple_whiteboard_get_session(sg->account, client_entry->nickname);
-	if (!wb)
-		wb = purple_whiteboard_new(sg->account, client_entry->nickname, 0);
-	if (!wb)
+	id = g_strdup_printf("silc-client-%s", client_entry->nickname);
+	wb = purple_whiteboard_manager_find(manager, id);
+	if(!PURPLE_IS_WHITEBOARD(wb)) {
+		wb = purple_whiteboard_new(sg->account, id, 0);
+		purple_whiteboard_manager_register(manager, wb, NULL);
+	}
+
+	g_free(id);
+
+	if(!PURPLE_IS_WHITEBOARD(wb)) {
 		return NULL;
+	}
 
 	if (!purple_whiteboard_get_protocol_data(wb)) {
 		wbs = silc_calloc(1, sizeof(*wbs));
@@ -135,14 +146,24 @@
 
 PurpleWhiteboard *silcpurple_wb_init_ch(SilcPurple sg, SilcChannelEntry channel)
 {
+	PurpleWhiteboardManager *manager = NULL;
 	PurpleWhiteboard *wb;
 	SilcPurpleWb wbs;
+	gchar *id;
 
-	wb = purple_whiteboard_get_session(sg->account, channel->channel_name);
-	if (!wb)
-		wb = purple_whiteboard_new(sg->account, channel->channel_name, 0);
-	if (!wb)
+	manager = purple_whiteboard_manager_get_default();
+
+	id = g_strdup_printf("silc-channel-%s", channel->channel_name);
+	wb = purple_whiteboard_manager_find(manager, id);
+	if(!PURPLE_IS_WHITEBOARD(wb)) {
+		wb = purple_whiteboard_new(sg->account, id, 0);
+	}
+
+	g_free(id);
+
+	if(!PURPLE_IS_WHITEBOARD(wb)) {
 		return NULL;
+	}
 
 	if (!purple_whiteboard_get_protocol_data(wb)) {
 		wbs = silc_calloc(1, sizeof(*wbs));
@@ -315,18 +336,19 @@
 			 SilcMessageFlags flags, const unsigned char *message,
 			 SilcUInt32 message_len)
 {
-	SilcPurple sg;
-	PurpleConnection *gc;
 	PurpleWhiteboard *wb;
+	PurpleWhiteboardManager *manager;
+	gchar *id = NULL;
+
+	manager = purple_whiteboard_manager_get_default();
 
-	gc = client->application;
-	sg = purple_connection_get_protocol_data(gc);
+	id = g_strdup_printf("silc-client-%s", sender->nickname);
+	wb = purple_whiteboard_manager_find(manager, id);
+	g_free(id);
 
-	wb = purple_whiteboard_get_session(sg->account, sender->nickname);
-	if (!wb) {
+	if(!PURPLE_IS_WHITEBOARD(wb)) {
 		/* Ask user if they want to open the whiteboard */
-		silcpurple_wb_request(client, message, message_len,
-				    sender, NULL);
+		silcpurple_wb_request(client, message, message_len, sender, NULL);
 		return;
 	}
 
@@ -342,18 +364,20 @@
 			    const unsigned char *message,
 			    SilcUInt32 message_len)
 {
-	SilcPurple sg;
-	PurpleConnection *gc;
 	PurpleWhiteboard *wb;
+	PurpleWhiteboardManager *manager;
+	gchar *id;
+
+	manager = purple_whiteboard_manager_get_default();
 
-	gc = client->application;
-	sg = purple_connection_get_protocol_data(gc);
+	id = g_strdup_printf("silc-channel-%s", channel->channel_name);
+	wb = purple_whiteboard_manager_find(manager, id);
+	g_free(id);
 
-	wb = purple_whiteboard_get_session(sg->account, channel->channel_name);
-	if (!wb) {
+	if(!PURPLE_IS_WHITEBOARD(wb)) {
 		/* Ask user if they want to open the whiteboard */
-		silcpurple_wb_request(client, message, message_len,
-				    sender, channel);
+		silcpurple_wb_request(client, message, message_len, sender, channel);
+
 		return;
 	}
 
@@ -430,9 +454,14 @@
 void silcpurple_wb_end(PurpleWhiteboard *wb)
 {
 	SilcPurpleWb wbs = purple_whiteboard_get_protocol_data(wb);
+	PurpleWhiteboardManager *manager;
+
+	manager = purple_whiteboard_manager_get_default();
 
 	silc_free(wbs);
 	purple_whiteboard_set_protocol_data(wb, NULL);
+
+	purple_whiteboard_manager_unregister(manager, wb, NULL);
 }
 
 void silcpurple_wb_get_dimensions(const PurpleWhiteboard *wb, int *width, int *height)

mercurial