summaryrefslogtreecommitdiff
path: root/src/plugins/relay/api/relay-api-protocol.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/relay/api/relay-api-protocol.c')
-rw-r--r--src/plugins/relay/api/relay-api-protocol.c62
1 files changed, 56 insertions, 6 deletions
diff --git a/src/plugins/relay/api/relay-api-protocol.c b/src/plugins/relay/api/relay-api-protocol.c
index d56391b93..9a446c1f8 100644
--- a/src/plugins/relay/api/relay-api-protocol.c
+++ b/src/plugins/relay/api/relay-api-protocol.c
@@ -72,6 +72,9 @@ relay_api_protocol_signal_buffer_cb (const void *pointer, void *data,
struct t_gui_line_data *ptr_line_data;
cJSON *json;
long lines;
+ long long buffer_id;
+ const char *ptr_id;
+ char *error;
/* make C compiler happy */
(void) data;
@@ -92,18 +95,61 @@ relay_api_protocol_signal_buffer_cb (const void *pointer, void *data,
|| (strcmp (signal, "buffer_title_changed") == 0)
|| (strncmp (signal, "buffer_localvar_", 16) == 0)
|| (strcmp (signal, "buffer_cleared") == 0)
- || (strcmp (signal, "buffer_closing") == 0))
+ || (strcmp (signal, "buffer_closing") == 0)
+ || (strcmp (signal, "buffer_closed") == 0))
{
ptr_buffer = (struct t_gui_buffer *)signal_data;
if (!ptr_buffer || relay_buffer_is_relay (ptr_buffer))
return WEECHAT_RC_OK;
+ if (strcmp (signal, "buffer_closed") == 0)
+ {
+ /*
+ * when a buffer is closed, we send the buffer id
+ * with body type "buffer" and empty body
+ */
+ buffer_id = -1;
+ ptr_id = weechat_hashtable_get (
+ RELAY_API_DATA(ptr_client, buffers_closing),
+ ptr_buffer);
+ if (ptr_id)
+ {
+ error = NULL;
+ buffer_id = strtoll (ptr_id, &error, 10);
+ if (!error || error[0])
+ buffer_id = -1;
+ weechat_hashtable_remove (
+ RELAY_API_DATA(ptr_client, buffers_closing),
+ ptr_buffer);
+ }
+ relay_api_msg_send_event (ptr_client, signal, buffer_id, "buffer", NULL);
+ return WEECHAT_RC_OK;
+ }
+
+ if (strcmp (signal, "buffer_closing") == 0)
+ {
+ /*
+ * when a buffer is closing, we save its id in the hashtable
+ * "buffers_closing", it will be used when sending the event
+ * "buffer_closed"
+ */
+ weechat_hashtable_set (RELAY_API_DATA(ptr_client, buffers_closing),
+ ptr_buffer,
+ weechat_buffer_get_string (ptr_buffer, "id"));
+ }
+
+ /* we get all lines when a buffer is opened, otherwise none */
lines = (strcmp (signal, "buffer_opened") == 0) ? LONG_MIN : 0;
+
+ /* build body with buffer info */
json = relay_api_msg_buffer_to_json (
ptr_buffer, lines, 0, RELAY_API_DATA(ptr_client, sync_colors));
+
+ /* send to client */
if (json)
{
- relay_api_msg_send_event (ptr_client, signal, NULL, "buffer", json);
+ buffer_id = relay_api_get_buffer_id (ptr_buffer);
+ relay_api_msg_send_event (ptr_client, signal, buffer_id, "buffer", json);
cJSON_Delete (json);
}
}
@@ -127,7 +173,8 @@ relay_api_protocol_signal_buffer_cb (const void *pointer, void *data,
ptr_line_data, RELAY_API_DATA(ptr_client, sync_colors));
if (json)
{
- relay_api_msg_send_event (ptr_client, signal, ptr_buffer,
+ buffer_id = relay_api_get_buffer_id (ptr_buffer);
+ relay_api_msg_send_event (ptr_client, signal, buffer_id,
"line", json);
cJSON_Delete (json);
}
@@ -150,6 +197,7 @@ relay_api_protocol_hsignal_nicklist_cb (const void *pointer, void *data,
struct t_gui_nick_group *ptr_parent_group, *ptr_group;
struct t_gui_nick *ptr_nick;
cJSON *json;
+ long long buffer_id;
/* make C compiler happy */
(void) data;
@@ -170,6 +218,8 @@ relay_api_protocol_hsignal_nicklist_cb (const void *pointer, void *data,
if (!ptr_buffer || relay_buffer_is_relay (ptr_buffer))
return WEECHAT_RC_OK;
+ buffer_id = relay_api_get_buffer_id (ptr_buffer);
+
if ((strcmp (signal, "nicklist_group_added") == 0)
|| (strcmp (signal, "nicklist_group_changed") == 0)
|| (strcmp (signal, "nicklist_group_removing") == 0))
@@ -179,7 +229,7 @@ relay_api_protocol_hsignal_nicklist_cb (const void *pointer, void *data,
RELAY_API_DATA(ptr_client, sync_colors));
if (json)
{
- relay_api_msg_send_event (ptr_client, signal, ptr_buffer,
+ relay_api_msg_send_event (ptr_client, signal, buffer_id,
"nick_group", json);
cJSON_Delete (json);
}
@@ -193,7 +243,7 @@ relay_api_protocol_hsignal_nicklist_cb (const void *pointer, void *data,
RELAY_API_DATA(ptr_client, sync_colors));
if (json)
{
- relay_api_msg_send_event (ptr_client, signal, ptr_buffer,
+ relay_api_msg_send_event (ptr_client, signal, buffer_id,
"nick", json);
cJSON_Delete (json);
}
@@ -226,7 +276,7 @@ relay_api_protocol_signal_upgrade_cb (const void *pointer, void *data,
if ((strcmp (signal, "upgrade") == 0)
|| (strcmp (signal, "upgrade_ended") == 0))
{
- relay_api_msg_send_event (ptr_client, signal, NULL, NULL, NULL);
+ relay_api_msg_send_event (ptr_client, signal, -1, NULL, NULL);
}
return WEECHAT_RC_OK;