From 9cd7fd38a91dc2980e82be49185c1eb20d70c0f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Mon, 29 Apr 2024 19:31:02 +0200 Subject: [PATCH] api: allow to set nicklist group/nick id in functions nicklist_group_set and nicklist_nick_set (issue #2081) --- doc/en/weechat_plugin_api.en.adoc | 32 +++++++---- doc/fr/weechat_plugin_api.fr.adoc | 32 +++++++---- doc/it/weechat_plugin_api.it.adoc | 38 +++++++++---- doc/ja/weechat_plugin_api.ja.adoc | 38 +++++++++---- doc/sr/weechat_plugin_api.sr.adoc | 36 ++++++++---- src/gui/gui-nicklist.c | 28 +++++++++- tests/unit/gui/test-gui-nicklist.cpp | 82 +++++++++++++++++----------- 7 files changed, 192 insertions(+), 94 deletions(-) diff --git a/doc/en/weechat_plugin_api.en.adoc b/doc/en/weechat_plugin_api.en.adoc index 27027a9e9..f98065fa3 100644 --- a/doc/en/weechat_plugin_api.en.adoc +++ b/doc/en/weechat_plugin_api.en.adoc @@ -15959,7 +15959,7 @@ parent = weechat.nicklist_group_get_pointer(buffer, group, "parent") ==== nicklist_group_set -_WeeChat ≥ 0.3.4._ +_WeeChat ≥ 0.3.4, updated in 4.3.0._ Set string value of a group property. @@ -15982,14 +15982,18 @@ Arguments: Properties: -[width="100%",cols="^2,4,8",options="header"] +[width="100%",cols="^2,^1,4,8",options="header"] |=== -| Name | Value | Description +| Name | Min WeeChat | Value | Description -| color | WeeChat color option name +| id | 4.3.0 | long long integer ≥ 0 +| New id for the group (it must be unique in the buffer). + + Note: it is not recommended to change this identifier. + +| color | | WeeChat color option name | See argument "color" of function <<_nicklist_add_group,nicklist_add_group>>. -| visible | "0", "1" +| visible | | "0", "1" | "0" = hidden group, "1" = visible group. |=== @@ -16164,7 +16168,7 @@ group = weechat.nicklist_nick_get_pointer(buffer, nick, "group") ==== nicklist_nick_set -_WeeChat ≥ 0.3.4._ +_WeeChat ≥ 0.3.4, updated in 4.3.0._ Set string value of a nick property. @@ -16187,20 +16191,24 @@ Arguments: Properties: -[width="100%",cols="^2,4,8",options="header"] +[width="100%",cols="^2,^1,4,8",options="header"] |=== -| Name | Value | Description +| Name | Min WeeChat | Value | Description -| color | WeeChat color option name +| id | 4.3.0 | long long integer ≥ 0 +| New id for the nick (it must be unique in the buffer). + + Note: it is not recommended to change this identifier. + +| color | | WeeChat color option name | See argument "color" of function <<_nicklist_add_nick,nicklist_add_nick>>. -| prefix | any string +| prefix | | any string | Prefix of nick. -| prefix_color | WeeChat color option name +| prefix_color | | WeeChat color option name | See argument "prefix_color" of function <<_nicklist_add_nick,nicklist_add_nick>>. -| visible | "0", "1" +| visible | | "0", "1" | "0" = hidden nick, "1" = visible nick. |=== diff --git a/doc/fr/weechat_plugin_api.fr.adoc b/doc/fr/weechat_plugin_api.fr.adoc index 66f342d91..d2536abfe 100644 --- a/doc/fr/weechat_plugin_api.fr.adoc +++ b/doc/fr/weechat_plugin_api.fr.adoc @@ -16302,7 +16302,7 @@ parent = weechat.nicklist_group_get_pointer(buffer, group, "parent") ==== nicklist_group_set -_WeeChat ≥ 0.3.4._ +_WeeChat ≥ 0.3.4, mis à jour dans la 4.3.0._ Affecter une valeur à une propriété d'un groupe. @@ -16325,15 +16325,19 @@ Paramètres : Propriétés : -[width="100%",cols="^2,4,8",options="header"] +[width="100%",cols="^2,^1,4,8",options="header"] |=== -| Nom | Valeur | Description +| Nom | WeeChat mini | Valeur | Description -| color | nom d'option de couleur WeeChat +| id | 4.3.0 | entier de type "long long" ≥ 0 +| Nouvel identifiant pour le groupe (il doit être unique dans le tampon). + + Note : il n'est pas recommandé de changer cet identifiant. + +| color | | nom d'option de couleur WeeChat | Voir le paramètre "color" de la fonction <<_nicklist_add_group,nicklist_add_group>>. -| visible | "0", "1" +| visible | | "0", "1" | "0" = groupe caché, "1" = groupe visible. |=== @@ -16508,7 +16512,7 @@ group = weechat.nicklist_nick_get_pointer(buffer, nick, "group") ==== nicklist_nick_set -_WeeChat ≥ 0.3.4._ +_WeeChat ≥ 0.3.4, mis à jour dans la 4.3.0._ Affecter une valeur à une propriété d'un pseudo. @@ -16531,22 +16535,26 @@ Paramètres : Propriétés : -[width="100%",cols="^2,4,8",options="header"] +[width="100%",cols="^2,^1,4,8",options="header"] |=== -| Nom | Valeur | Description +| Nom | WeeChat mini | Valeur | Description -| color | nom d'option de couleur WeeChat +| id | 4.3.0 | entier de type "long long" ≥ 0 +| Nouvel identifiant pour le pseudo (il doit être unique dans le tampon). + + Note : il n'est pas recommandé de changer cet identifiant. + +| color | | nom d'option de couleur WeeChat | Voir le paramètre "color" de la fonction <<_nicklist_add_nick,nicklist_add_nick>>. -| prefix | toute chaîne +| prefix | | toute chaîne | Préfixe du pseudo. -| prefix_color | nom d'option de couleur WeeChat +| prefix_color | | nom d'option de couleur WeeChat | Voir le paramètre "prefix_color" de la fonction <<_nicklist_add_nick,nicklist_add_nick>>. -| visible | "0", "1" +| visible | | "0", "1" | "0" = pseudo caché, "1" = pseudo visible. |=== diff --git a/doc/it/weechat_plugin_api.it.adoc b/doc/it/weechat_plugin_api.it.adoc index 409863809..37423b72b 100644 --- a/doc/it/weechat_plugin_api.it.adoc +++ b/doc/it/weechat_plugin_api.it.adoc @@ -16717,7 +16717,8 @@ parent = weechat.nicklist_group_get_pointer(buffer, group, "parent") ==== nicklist_group_set -_WeeChat ≥ 0.3.4._ +// TRANSLATION MISSING +_WeeChat ≥ 0.3.4, updated in 4.3.0._ Imposta il valore stringa della proprietà di un gruppo. @@ -16743,15 +16744,21 @@ Argomenti: // TRANSLATION MISSING Properties: -[width="100%",cols="^2,4,8",options="header"] +[width="100%",cols="^2,^1,4,8",options="header"] |=== -| Nome | Valore | Descrizione +// TRANSLATION MISSING +| Nome | Min WeeChat | Valore | Descrizione -| color | nome per l'opzione del colore per WeeChat +// TRANSLATION MISSING +| id | 4.3.0 | long long integer ≥ 0 +| New id for the group (it must be unique in the buffer). + + Note: it is not recommended to change this identifier. + +| color | | nome per l'opzione del colore per WeeChat | Consultare l'argomento "color" della funzione <<_nicklist_add_group,nicklist_add_group>>. -| visible | "0", "1" +| visible | | "0", "1" | "0" = gruppo nascosto, "1" = gruppo visibile. |=== @@ -16927,7 +16934,8 @@ group = weechat.nicklist_nick_get_pointer(buffer, nick, "group") ==== nicklist_nick_set -_WeeChat ≥ 0.3.4._ +// TRANSLATION MISSING +_WeeChat ≥ 0.3.4, updated in 4.3.0._ Imposta il valore stringa della proprietà di un nick. @@ -16953,22 +16961,28 @@ Argomenti: // TRANSLATION MISSING Properties: -[width="100%",cols="^2,4,8",options="header"] +[width="100%",cols="^2,^1,4,8",options="header"] |=== -| Nome | Valore | Descrizione +// TRANSLATION MISSING +| Nome | Min WeeChat | Valore | Descrizione -| color | nome per l'opzione del colore di WeeChat +// TRANSLATION MISSING +| id | 4.3.0 | long long integer ≥ 0 +| New id for the nick (it must be unique in the buffer). + + Note: it is not recommended to change this identifier. + +| color | | nome per l'opzione del colore di WeeChat | Consultare l'argomento "color" della funzione <<_nicklist_add_nick,nicklist_add_nick>>. -| prefix | qualsiasi stringa +| prefix | | qualsiasi stringa | Prefisso del nick. -| prefix_color | nome per l'opzione del colore di WeeChat +| prefix_color | | nome per l'opzione del colore di WeeChat | Consultare l'argomento "prefix_color" della funzione <<_nicklist_add_nick,nicklist_add_nick>>. -| visible | "0", "1" +| visible | | "0", "1" | "0" = nick nascosto, "1" = nick visibile. |=== diff --git a/doc/ja/weechat_plugin_api.ja.adoc b/doc/ja/weechat_plugin_api.ja.adoc index 1c858077e..e14364379 100644 --- a/doc/ja/weechat_plugin_api.ja.adoc +++ b/doc/ja/weechat_plugin_api.ja.adoc @@ -16207,7 +16207,8 @@ parent = weechat.nicklist_group_get_pointer(buffer, group, "parent") ==== nicklist_group_set -_WeeChat バージョン 0.3.4 以上で利用可。_ +// TRANSLATION MISSING +_WeeChat ≥ 0.3.4, updated in 4.3.0._ グループプロパティの文字列値。 @@ -16230,15 +16231,21 @@ void weechat_nicklist_group_set (struct t_gui_buffer *buffer, プロパティ: -[width="100%",cols="^2,4,8",options="header"] +[width="100%",cols="^2,^1,4,8",options="header"] |=== -| 名前 | 値 | 説明 +// TRANSLATION MISSING +| 名前 | Min WeeChat | 値 | 説明 -| color | WeeChat 色オプション名 +// TRANSLATION MISSING +| id | 4.3.0 | long long integer ≥ 0 +| New id for the group (it must be unique in the buffer). + + Note: it is not recommended to change this identifier. + +| color | | WeeChat 色オプション名 | 関数 <<_nicklist_add_group,nicklist_add_group>> の引数 "color" を参照 -| visible | "0"、"1" +| visible | | "0"、"1" | "0" = 非表示状態のグループ、"1" = 表示状態のグループ |=== @@ -16414,7 +16421,8 @@ group = weechat.nicklist_nick_get_pointer(buffer, nick, "group") ==== nicklist_nick_set -_WeeChat バージョン 0.3.4 以上で利用可。_ +// TRANSLATION MISSING +_WeeChat ≥ 0.3.4, updated in 4.3.0._ ニックネームプロパティの文字列値を設定。 @@ -16437,22 +16445,28 @@ void weechat_nicklist_nick_set (struct t_gui_buffer *buffer, プロパティ: -[width="100%",cols="^2,4,8",options="header"] +[width="100%",cols="^2,^1,4,8",options="header"] |=== -| 名前 | 値 | 説明 +// TRANSLATION MISSING +| 名前 | Min WeeChat | 値 | 説明 -| color | WeeChat 色オプション名 +// TRANSLATION MISSING +| id | 4.3.0 | long long integer ≥ 0 +| New id for the nick (it must be unique in the buffer). + + Note: it is not recommended to change this identifier. + +| color | | WeeChat 色オプション名 | 関数 <<_nicklist_add_nick,nicklist_add_nick>> の引数 "color" を参照 -| prefix | 任意の文字列 +| prefix | | 任意の文字列 | 指定したニックネームのプレフィックス -| prefix_color | WeeChat color option name +| prefix_color | | WeeChat color option name | 関数 <<_nicklist_add_nick,nicklist_add_nick>> の引数 "prefix_color" を参照 -| visible | "0", "1" +| visible | | "0", "1" | "0" = 非表示状態のニックネーム、"1" = 表示状態のニックネーム |=== diff --git a/doc/sr/weechat_plugin_api.sr.adoc b/doc/sr/weechat_plugin_api.sr.adoc index 3d1fb9bc9..4a557a71d 100644 --- a/doc/sr/weechat_plugin_api.sr.adoc +++ b/doc/sr/weechat_plugin_api.sr.adoc @@ -15546,7 +15546,7 @@ parent = weechat.nicklist_group_get_pointer(buffer, group, "parent") ==== nicklist_group_set -_WeeChat ≥ 0.3.4._ +_WeeChat ≥ 0.3.4, ажурирано у верзији 4.3.0._ Поставља стринг вредност особине групе. @@ -15569,14 +15569,20 @@ void weechat_nicklist_group_set (struct t_gui_buffer *buffer, Особине: -[width="100%", cols="^2,4,8", options="header"] +[width="100%", cols="^2,^1,4,8", options="header"] |=== -| Име | Вредност | Опис +// TRANSLATION MISSING +| Име | Min WeeChat | Вредност | Опис -| color | Име опције WeeChat боје +// TRANSLATION MISSING +| id | 4.3.0 | long long integer ≥ 0 +| New id for the group (it must be unique in the buffer). + + Note: it is not recommended to change this identifier. + +| color | | Име опције WeeChat боје | Погледајте аргумент „color” функције <<_nicklist_add_group,nicklist_add_group>>. -| visible | "0", "1" +| visible | | "0", "1" | "0" = скривена група, "1" = видљива група. |=== @@ -15752,7 +15758,7 @@ group = weechat.nicklist_nick_get_pointer(buffer, nick, "group") ==== nicklist_nick_set -_WeeChat ≥ 0.3.4._ +_WeeChat ≥ 0.3.4, ажурирано у верзији 4.3.0._ Поставља стринг вредност особине надимка. @@ -15775,20 +15781,26 @@ void weechat_nicklist_nick_set (struct t_gui_buffer *buffer, Особине: -[width="100%", cols="^2,4,8", options="header"] +[width="100%", cols="^2,^1,4,8", options="header"] |=== -| Име | Вредност | Опис +// TRANSLATION MISSING +| Име | Min WeeChat | Вредност | Опис -| color | име опције WeeChat боје +// TRANSLATION MISSING +| id | 4.3.0 | long long integer ≥ 0 +| New id for the nick (it must be unique in the buffer). + + Note: it is not recommended to change this identifier. + +| color | | име опције WeeChat боје | Погледајте аргумент „color” функције <<_nicklist_add_nick,nicklist_add_nick>>. -| prefix | било који стринг +| prefix | | било који стринг | Префикс надимка. -| prefix_color | име опције WeeChat боје +| prefix_color | | име опције WeeChat боје | Погледајте аргумент „prefix_color” функције <<_nicklist_add_nick,nicklist_add_nick>>. -| visible | "0", "1" +| visible | | "0", "1" | "0" = скривени надимак, "1" = видљиви надимак. |=== diff --git a/src/gui/gui-nicklist.c b/src/gui/gui-nicklist.c index cbb5ad8e8..6d7f9e7fd 100644 --- a/src/gui/gui-nicklist.c +++ b/src/gui/gui-nicklist.c @@ -1037,6 +1037,7 @@ gui_nicklist_group_set (struct t_gui_buffer *buffer, struct t_gui_nick_group *group, const char *property, const char *value) { + long long id; long number; char *error; int group_changed; @@ -1046,7 +1047,18 @@ gui_nicklist_group_set (struct t_gui_buffer *buffer, group_changed = 0; - if (strcmp (property, "color") == 0) + if (strcmp (property, "id") == 0) + { + id = strtoll (value, &error, 10); + if (error && !error[0] + && (id != group->id) + && !gui_nicklist_search_group_id (buffer, NULL, id)) + { + group->id = id; + group_changed = 1; + } + } + else if (strcmp (property, "color") == 0) { string_shared_free (group->color); group->color = (value[0]) ? (char *)string_shared_get (value) : NULL; @@ -1147,6 +1159,7 @@ gui_nicklist_nick_set (struct t_gui_buffer *buffer, struct t_gui_nick *nick, const char *property, const char *value) { + long long id; long number; char *error; int nick_changed; @@ -1156,7 +1169,18 @@ gui_nicklist_nick_set (struct t_gui_buffer *buffer, nick_changed = 0; - if (strcmp (property, "color") == 0) + if (strcmp (property, "id") == 0) + { + id = strtoll (value, &error, 10); + if (error && !error[0] + && (id != nick->id) + && !gui_nicklist_search_nick_id (buffer, NULL, id)) + { + nick->id = id; + nick_changed = 1; + } + } + else if (strcmp (property, "color") == 0) { string_shared_free (nick->color); nick->color = (value[0]) ? (char *)string_shared_get (value) : NULL; diff --git a/tests/unit/gui/test-gui-nicklist.cpp b/tests/unit/gui/test-gui-nicklist.cpp index 8da7d0a01..59869bce6 100644 --- a/tests/unit/gui/test-gui-nicklist.cpp +++ b/tests/unit/gui/test-gui-nicklist.cpp @@ -704,28 +704,37 @@ TEST(GuiNicklist, GroupGetPointer) TEST(GuiNicklist, GroupSet) { struct t_gui_buffer *buffer; - struct t_gui_nick_group *group; + struct t_gui_nick_group *group1, *group2; buffer = gui_buffer_new (NULL, TEST_BUFFER_NAME, NULL, NULL, NULL, NULL, NULL, NULL); CHECK(buffer); - group = gui_nicklist_add_group (buffer, NULL, "group", "blue", 1); - CHECK(group); + group1 = gui_nicklist_add_group (buffer, NULL, "group1", "blue", 1); + CHECK(group1); + + group2 = gui_nicklist_add_group (buffer, NULL, "group2", "magenta", 1); + CHECK(group2); gui_nicklist_group_set (NULL, NULL, NULL, NULL); gui_nicklist_group_set (buffer, NULL, NULL, NULL); - gui_nicklist_group_set (buffer, group, NULL, NULL); - gui_nicklist_group_set (buffer, group, "color", NULL); - gui_nicklist_group_set (buffer, group, "zzz", "test"); + gui_nicklist_group_set (buffer, group1, NULL, NULL); + gui_nicklist_group_set (buffer, group1, "color", NULL); + gui_nicklist_group_set (buffer, group1, "zzz", "test"); - gui_nicklist_group_set (buffer, group, "color", "green"); - STRCMP_EQUAL("green", group->color); - gui_nicklist_group_set (buffer, group, "color", ""); - STRCMP_EQUAL(NULL, group->color); - gui_nicklist_group_set (buffer, group, "visible", "0"); - LONGS_EQUAL(0, group->visible); + gui_nicklist_group_set (buffer, group1, "id", "123"); + CHECK(group1->id == 123); + gui_nicklist_group_set (buffer, group2, "id", "123"); + CHECK(group2->id != 123); + gui_nicklist_group_set (buffer, group2, "id", "456"); + CHECK(group2->id == 456); + gui_nicklist_group_set (buffer, group1, "color", "green"); + STRCMP_EQUAL("green", group1->color); + gui_nicklist_group_set (buffer, group1, "color", ""); + STRCMP_EQUAL(NULL, group1->color); + gui_nicklist_group_set (buffer, group1, "visible", "0"); + LONGS_EQUAL(0, group1->visible); gui_buffer_close (buffer); } @@ -825,36 +834,45 @@ TEST(GuiNicklist, NickGetPointer) TEST(GuiNicklist, NickSet) { struct t_gui_buffer *buffer; - struct t_gui_nick *nick; + struct t_gui_nick *nick1, *nick2; buffer = gui_buffer_new (NULL, TEST_BUFFER_NAME, NULL, NULL, NULL, NULL, NULL, NULL); CHECK(buffer); - nick = gui_nicklist_add_nick (buffer, NULL, "nick", "green", "@", "lightgreen", 1); - CHECK(nick); + nick1 = gui_nicklist_add_nick (buffer, NULL, "nick1", "green", "@", "lightgreen", 1); + CHECK(nick1); + + nick2 = gui_nicklist_add_nick (buffer, NULL, "nick2", "cyan", "+", "lightcyan", 1); + CHECK(nick2); gui_nicklist_nick_set (NULL, NULL, NULL, NULL); gui_nicklist_nick_set (buffer, NULL, NULL, NULL); - gui_nicklist_nick_set (buffer, nick, NULL, NULL); - gui_nicklist_nick_set (buffer, nick, "color", NULL); - gui_nicklist_nick_set (buffer, nick, "zzz", "test"); + gui_nicklist_nick_set (buffer, nick1, NULL, NULL); + gui_nicklist_nick_set (buffer, nick1, "color", NULL); + gui_nicklist_nick_set (buffer, nick1, "zzz", "test"); - gui_nicklist_nick_set (buffer, nick, "color", "red"); - STRCMP_EQUAL("red", nick->color); - gui_nicklist_nick_set (buffer, nick, "color", ""); - STRCMP_EQUAL(NULL, nick->color); - gui_nicklist_nick_set (buffer, nick, "prefix", "+"); - STRCMP_EQUAL("+", nick->prefix); - gui_nicklist_nick_set (buffer, nick, "prefix", ""); - STRCMP_EQUAL(NULL, nick->prefix); - gui_nicklist_nick_set (buffer, nick, "prefix_color", "lightred"); - STRCMP_EQUAL("lightred", nick->prefix_color); - gui_nicklist_nick_set (buffer, nick, "prefix_color", ""); - STRCMP_EQUAL(NULL, nick->prefix_color); - gui_nicklist_nick_set (buffer, nick, "visible", "0"); - LONGS_EQUAL(0, nick->visible); + gui_nicklist_nick_set (buffer, nick1, "id", "123"); + CHECK(nick1->id == 123); + gui_nicklist_nick_set (buffer, nick2, "id", "123"); + CHECK(nick2->id != 123); + gui_nicklist_nick_set (buffer, nick2, "id", "456"); + CHECK(nick2->id == 456); + gui_nicklist_nick_set (buffer, nick1, "color", "red"); + STRCMP_EQUAL("red", nick1->color); + gui_nicklist_nick_set (buffer, nick1, "color", ""); + STRCMP_EQUAL(NULL, nick1->color); + gui_nicklist_nick_set (buffer, nick1, "prefix", "+"); + STRCMP_EQUAL("+", nick1->prefix); + gui_nicklist_nick_set (buffer, nick1, "prefix", ""); + STRCMP_EQUAL(NULL, nick1->prefix); + gui_nicklist_nick_set (buffer, nick1, "prefix_color", "lightred"); + STRCMP_EQUAL("lightred", nick1->prefix_color); + gui_nicklist_nick_set (buffer, nick1, "prefix_color", ""); + STRCMP_EQUAL(NULL, nick1->prefix_color); + gui_nicklist_nick_set (buffer, nick1, "visible", "0"); + LONGS_EQUAL(0, nick1->visible); gui_buffer_close (buffer); }