From 3993aa310ff1d39e2b6db62b166e89956b8f4598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Thu, 27 Jun 2024 22:21:09 +0200 Subject: [PATCH] relay: send event "buffer_line_data_changed" to clients of "weechat" protocol --- CHANGELOG.md | 2 +- doc/en/weechat_relay_weechat.en.adoc | 71 +++++++++++++++++ doc/fr/weechat_relay_weechat.fr.adoc | 71 +++++++++++++++++ doc/ja/weechat_relay_weechat.ja.adoc | 78 +++++++++++++++++++ doc/sr/weechat_relay_weechat.sr.adoc | 75 ++++++++++++++++++ .../relay/weechat/relay-weechat-protocol.c | 31 ++++++++ 6 files changed, 327 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 135799904..7bdf93457 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,7 +24,7 @@ - relay: add infos "relay_api_version" and "relay_api_version_number" - core: add hdata count in evaluation of expressions with `hdata_count:name[list]` or `hdata_count:name[pointer]` - core: add completion "bars_items" -- api, relay: send new signal "buffer_line_data_changed" when a line is updated in a buffer via hdata, send event "buffer_line_data_changed" to API clients +- api, relay: send new signal "buffer_line_data_changed" when a line is updated in a buffer via hdata, send event "buffer_line_data_changed" to clients of "api" and "weechat" protocols - api: add hashtable type "longlong" - api: add function line_search_by_id - doc: add doc on "api" relay diff --git a/doc/en/weechat_relay_weechat.en.adoc b/doc/en/weechat_relay_weechat.en.adoc index 295661c87..b88d3e21d 100644 --- a/doc/en/weechat_relay_weechat.en.adoc +++ b/doc/en/weechat_relay_weechat.en.adoc @@ -1488,6 +1488,9 @@ WeeChat reserved identifiers: | _buffer_line_added | buffer | hdata: line | Line added in buffer. | Display line in buffer. +| _buffer_line_data_changed | buffer | hdata: line +| Line changed in buffer. | Update line displayed in buffer. + | _nicklist | nicklist | hdata: nicklist_item | Nicklist for a buffer. | Replace nicklist. @@ -2098,6 +2101,74 @@ hda: message: 'hello!' ---- +[[message_buffer_line_data_changed]] +==== _buffer_line_data_changed + +This message is sent to the client when the signal "buffer_line_data_changed" +is sent by WeeChat. + +Data sent as hdata: + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Name | Type | Description +| buffer | pointer | Buffer pointer. +| id | integer | Line identifier. +| date | time | Date of message. +| date_usec | integer | Microseconds of date. +| date_printed | time | Date when WeeChat displayed message. +| date_usec_printed | integer | Microseconds of date when WeeChat displayed message. +| displayed | char | 1 if message is displayed, 0 if message is filtered (hidden). +| notify_level | char | Notify level: -1 = notify disabled, 0 = low, 1 = message, 2 = private, 3 = highlight. +| highlight | char | 1 if line has a highlight, otherwise 0. +| tags_array | array of strings | List of tags for line. +| prefix | string | Prefix. +| message | string | Message. +|=== + +Example: message _hello!_ from nick _FlashCode_ on buffer _irc.libera.#weechat_ has been updated: + +[source,python] +---- +id: '_buffer_line_data_changed' +hda: + keys: { + 'buffer': 'ptr', + 'id': 'int', + 'date': 'tim', + 'date_usec': 'int', + 'date_printed': 'tim', + 'date_usec_printed': 'int', + 'displayed': 'chr', + 'notify_level': 'chr', + 'highlight': 'chr', + 'tags_array': 'arr', + 'prefix': 'str', + 'message': 'str', + } + path: ['line_data'] + item 1: + __path: ['0x4a49600'] + buffer: '0x4a715d0' + id: 12 + date: 1362728993 + date_usec: 902765 + date_printed: 1362728993 + date_usec_printed: 902765 + displayed: 1 + notify_level: 1 + highlight: 0 + tags_array: [ + 'irc_privmsg', + 'notify_message', + 'prefix_nick_142', + 'nick_FlashCode', + 'log1', + ] + prefix: 'F06@F@00142FlashCode' + message: 'hello!' +---- + [[message_buffer_closing]] ==== _buffer_closing diff --git a/doc/fr/weechat_relay_weechat.fr.adoc b/doc/fr/weechat_relay_weechat.fr.adoc index 4fda65863..fb8027833 100644 --- a/doc/fr/weechat_relay_weechat.fr.adoc +++ b/doc/fr/weechat_relay_weechat.fr.adoc @@ -1514,6 +1514,9 @@ Les identifiants réservés par WeeChat : | _buffer_line_added | buffer | hdata : line | Ligne ajoutée dans le tampon. | Afficher la ligne dans le tampon. +| _buffer_line_data_changed | buffer | hdata : line +| Ligne changée dans le tampon. | Modifier la ligne affichée dans le tampon. + | _nicklist | nicklist | hdata : nicklist_item | Liste de pseudos pour un tampon. | Remplacer la liste de pseudos. @@ -2127,6 +2130,74 @@ hda: message: 'hello!' ---- +[[message_buffer_line_data_changed]] +==== _buffer_line_data_changed + +Ce message est envoyé au client lorsque le signal "buffer_line_data_changed" +est envoyé par WeeChat. + +Données envoyées dans le hdata : + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Nom | Type | Description +| buffer | pointeur | Pointeur vers le tampon. +| id | entier | Identifiant de ligne. +| date | date/heure | Date du message. +| date_usec | entier | Microsecondes de la date. +| date_printed | date/heure | Date d'affichage du message. +| date_usec_printed | entier | Microsecondes de la date d'affichage du message. +| displayed | caractère | 1 si le message est affiché, 0 si le message est filtré (caché). +| notify_level | caractère | Niveau de notification : -1 = notification désactivée, 0 = bas, 1 = message, 2 = privé, 3 = highlight. +| highlight | caractère | 1 si la ligne a un highlight, sinon 0. +| tags_array | tableau de chaînes | Liste des étiquettes de la ligne. +| prefix | chaîne | Préfixe. +| message | chaîne | Message. +|=== + +Exemple : le message _hello!_ du pseudo _FlashCode_ sur le tampon _irc.libera.#weechat_ a été mis à jour : + +[source,python] +---- +id: '_buffer_line_data_changed' +hda: + keys: { + 'buffer': 'ptr', + 'id': 'int', + 'date': 'tim', + 'date_usec': 'int', + 'date_printed': 'tim', + 'date_usec_printed': 'int', + 'displayed': 'chr', + 'notify_level': 'chr', + 'highlight': 'chr', + 'tags_array': 'arr', + 'prefix': 'str', + 'message': 'str', + } + path: ['line_data'] + item 1: + __path: ['0x4a49600'] + buffer: '0x4a715d0' + id: 12 + date: 1362728993 + date_usec: 902765 + date_printed: 1362728993 + date_usec_printed: 902765 + displayed: 1 + notify_level: 1 + highlight: 0 + tags_array: [ + 'irc_privmsg', + 'notify_message', + 'prefix_nick_142', + 'nick_FlashCode', + 'log1', + ] + prefix: 'F06@F@00142FlashCode' + message: 'hello!' +---- + [[message_buffer_closing]] ==== _buffer_closing diff --git a/doc/ja/weechat_relay_weechat.ja.adoc b/doc/ja/weechat_relay_weechat.ja.adoc index 800b0d8bc..cec390ea1 100644 --- a/doc/ja/weechat_relay_weechat.ja.adoc +++ b/doc/ja/weechat_relay_weechat.ja.adoc @@ -1524,6 +1524,10 @@ WeeChat の予約識別子: | _buffer_line_added | buffer | hdata: line | バッファへの行追加 | バッファに行を表示 +// TRANSLATION MISSING +| _buffer_line_data_changed | buffer | hdata: line +| Line changed in buffer. | Update line displayed in buffer. + | _nicklist | nicklist | hdata: nicklist_item | バッファのニックネームリスト | ニックネームリストを置換 @@ -2138,6 +2142,80 @@ hda: message: 'hello!' ---- +[[message_buffer_line_added]] +==== _buffer_line_added + +// TRANSLATION MISSING +This message is sent to the client when the signal "buffer_line_data_changed" +is sent by WeeChat. + +hdata として送られるデータ: + +[width="100%",cols="3m,2,10",options="header"] +|=== +| 名前 | 型 | 説明 +| buffer | pointer | バッファへのポインタ +// TRANSLATION MISSING +| id | integer | Line identifier. +| date | time | メッセージの日付 +// TRANSLATION MISSING +| date_usec | integer | Microseconds of date. +| date_printed | time | WeeChat メッセージを表示した日付 +// TRANSLATION MISSING +| date_usec_printed | integer | Microseconds of date when WeeChat displayed message. +| displayed | char | メッセージが表示される場合は 1、メッセージがフィルタされる (隠される) 場合は 0 +// TRANSLATION MISSING +| notify_level | char | Notify level: -1 = notify disabled, 0 = low, 1 = message, 2 = private, 3 = highlight. +| highlight | char | 行がハイライト部分を含む場合は 1、それ以外は 0 +| tags_array | string の配列 | 行に対するタグのリスト +| prefix | string | プレフィックス +| message | string | メッセージ +|=== + +// TRANSLATION MISSING +Example: message _hello!_ from nick _FlashCode_ on buffer _irc.libera.#weechat_ has been updated: + +[source,python] +---- +id: '_buffer_line_data_changed' +hda: + keys: { + 'buffer': 'ptr', + 'id': 'int', + 'date': 'tim', + 'date_used': 'int', + 'date_printed': 'tim', + 'date_usec_printed': 'int', + 'displayed': 'chr', + 'notify_level': 'chr', + 'highlight': 'chr', + 'tags_array': 'arr', + 'prefix': 'str', + 'message': 'str', + } + path: ['line_data'] + item 1: + __path: ['0x4a49600'] + buffer: '0x4a715d0' + id: 12 + date: 1362728993 + date_usec: 902765 + date_printed: 1362728993 + date_usec_printed: 902765 + displayed: 1 + notify_level: 1 + highlight: 0 + tags_array: [ + 'irc_privmsg', + 'notify_message', + 'prefix_nick_142', + 'nick_FlashCode', + 'log1', + ] + prefix: 'F06@F@00142FlashCode' + message: 'hello!' +---- + [[message_buffer_closing]] ==== _buffer_closing diff --git a/doc/sr/weechat_relay_weechat.sr.adoc b/doc/sr/weechat_relay_weechat.sr.adoc index 0383974fc..041e1fd07 100644 --- a/doc/sr/weechat_relay_weechat.sr.adoc +++ b/doc/sr/weechat_relay_weechat.sr.adoc @@ -1403,6 +1403,10 @@ WeeChat резервисани идентификатори: | _buffer_line_added | buffer | hdata: line | У бафер је додата линија. | Приказ линије у баферу. +// TRANSLATION MISSING +| _buffer_line_data_changed | buffer | hdata: line +| Line changed in buffer. | Update line displayed in buffer. + | _nicklist | nicklist | hdata: nicklist_item | Листа надимака за бафер. | Замена листе надимака. @@ -1998,6 +2002,77 @@ hda: message: 'здраво!' ---- +[[message_buffer_line_data_changed]] +==== _buffer_line_data_changed + +// TRANSLATION MISSING +This message is sent to the client when the signal "buffer_line_data_changed" +is sent by WeeChat. + +Подаци се шаљу као hdata: + +[width="100%", cols="3m,2,10", options="header"] +|=== +| Име | Тип | Опис +| buffer | показивач | Показивач на бафер. +// TRANSLATION MISSING +| id | цео број | Line identifier. +| date | време | Датум поруке. +| date_usec | цео број | Микросекунде датума. +| date_printed | време | Датум када је програм WeeChat приказао поруку. +| date_usec_printed | цео број | Микросекунде датума када је WeeChat приказао поруку. +| displayed | карактер | 1 ако је порука приказана, 0 ако је порука филтрирана (скривена). +| notify_level | карактер | Ниво обавештења: -1 = обавештење искључено, 0 = ниски, 1 = порука, 2 = приватно, 3 = истицање. +| highlight | карактер | 1 ако се у линији налази истицање, у супротном 0. +| tags_array | низ стрингова | Листа ознака за линију. +| prefix | стринг | Префикс. +| message | стринг | Порука. +|=== + +// TRANSLATION MISSING +Example: message _hello!_ from nick _FlashCode_ on buffer _irc.libera.#weechat_ has been updated: + +[source,python] +---- +id: '_buffer_line_data_changed' +hda: + keys: { + 'buffer': 'ptr', + 'id': 'int', + 'date': 'tim', + 'date_usec': 'int', + 'date_printed': 'tim', + 'date_usec_printed': 'int', + 'displayed': 'chr', + 'notify_level': 'chr', + 'highlight': 'chr', + 'tags_array': 'arr', + 'prefix': 'str', + 'message': 'str', + } + path: ['line_data'] + item 1: + __path: ['0x4a49600'] + buffer: '0x4a715d0' + id: 12 + date: 1362728993 + date_usec: 902765 + date_printed: 1362728993 + date_usec_printed: 902765 + displayed: 1 + notify_level: 1 + highlight: 0 + tags_array: [ + 'irc_privmsg', + 'notify_message', + 'prefix_nick_142', + 'nick_FlashCode', + 'log1', + ] + prefix: 'F06@F@00142FlashCode' + message: 'здраво!' +---- + [[message_buffer_closing]] ==== _buffer_closing diff --git a/src/plugins/relay/weechat/relay-weechat-protocol.c b/src/plugins/relay/weechat/relay-weechat-protocol.c index 79a99e6ba..a0708867f 100644 --- a/src/plugins/relay/weechat/relay-weechat-protocol.c +++ b/src/plugins/relay/weechat/relay-weechat-protocol.c @@ -1128,6 +1128,37 @@ relay_weechat_protocol_signal_buffer_cb (const void *pointer, void *data, } } } + else if (strcmp (signal, "buffer_line_data_changed") == 0) + { + ptr_line_data = (struct t_gui_line_data *)signal_data; + if (!ptr_line_data) + return WEECHAT_RC_OK; + + ptr_buffer = weechat_hdata_pointer (relay_hdata_line_data, ptr_line_data, + "buffer"); + if (!ptr_buffer || relay_buffer_is_relay (ptr_buffer)) + return WEECHAT_RC_OK; + + /* send signal only if sync with flag "buffer" */ + if (relay_weechat_protocol_is_sync (ptr_client, ptr_buffer, + RELAY_WEECHAT_PROTOCOL_SYNC_BUFFER)) + { + msg = relay_weechat_msg_new (str_signal); + if (msg) + { + snprintf (cmd_hdata, sizeof (cmd_hdata), + "line_data:0x%lx", + (unsigned long)ptr_line_data); + relay_weechat_msg_add_hdata ( + msg, cmd_hdata, + "buffer,id,date,date_usec,date_printed,date_usec_printed," + "displayed,notify_level,highlight,tags_array," + "prefix,message"); + relay_weechat_msg_send (ptr_client, msg); + relay_weechat_msg_free (msg); + } + } + } else if (strcmp (signal, "buffer_closing") == 0) { ptr_buffer = (struct t_gui_buffer *)signal_data;