2828#endif /* TOXAV_ENABLED */
2929
3030#include "twc-chat.h"
31+ #include "twc-config.h"
3132#include "twc-friend-request.h"
3233#include "twc-group-invite.h"
3334#include "twc-message-queue.h"
@@ -412,6 +413,9 @@ twc_handle_group_message(Tox *tox, int32_t group_number, int32_t peer_number,
412413
413414 char * myname = twc_get_self_name_nt (profile -> tox );
414415 char * name = twc_get_peer_name_nt (profile -> tox , group_number , peer_number );
416+ char * short_id =
417+ twc_get_peer_id_short (profile -> tox , group_number , peer_number );
418+ char * full_name = twc_get_peer_name_prefixed (short_id , name );
415419 char * tags = "notify_message" ;
416420 char * message_nt = twc_null_terminate (message , length );
417421
@@ -425,10 +429,14 @@ twc_handle_group_message(Tox *tox, int32_t group_number, int32_t peer_number,
425429
426430 if (weechat_string_has_highlight (message_nt , myname ))
427431 tags = "notify_highlight" ;
428- twc_chat_print_message (chat , tags , nick_color , name , message_nt ,
429- message_type );
432+ twc_chat_print_message (
433+ chat , tags , nick_color ,
434+ weechat_config_boolean (twc_config_show_id ) ? full_name : name ,
435+ message_nt , message_type );
430436
431437 free (name );
438+ free (short_id );
439+ free (full_name );
432440 free (myname );
433441 free (message_nt );
434442}
@@ -456,58 +464,89 @@ twc_group_peer_list_changed_callback(Tox *tox, uint32_t group_number,
456464
457465 struct t_weelist * new_nicks ;
458466 struct t_weelist_item * n ;
467+ struct t_weelist * new_ids ;
468+ struct t_weelist_item * id ;
459469
460470 npeers = tox_conference_peer_count (profile -> tox , group_number , & err );
461471
462472 if (err == TOX_ERR_CONFERENCE_PEER_QUERY_OK )
463473 {
464474 new_nicks = weechat_list_new ();
475+ new_ids = weechat_list_new ();
465476 for (i = 0 ; i < npeers ; i ++ )
466477 {
467478 char * name = twc_get_peer_name_nt (profile -> tox , group_number , i );
479+ char * id = twc_get_peer_id_short (profile -> tox , group_number , i );
468480 weechat_list_add (new_nicks , name , WEECHAT_LIST_POS_END , NULL );
481+ weechat_list_add (new_ids , id , WEECHAT_LIST_POS_END , NULL );
469482 free (name );
483+ free (id );
470484 }
471485 }
472486 else
473487 return ;
474488
475489 /* searching for exits */
476490 n = weechat_list_get (chat -> nicks , 0 );
491+ id = weechat_list_get (chat -> ids , 0 );
477492
478- while (n )
493+ while (id && n )
479494 {
495+ const char * short_id = weechat_list_string (id );
480496 const char * name = weechat_list_string (n );
481- if (!weechat_list_search (new_nicks , name ))
497+ if (!weechat_list_search (new_ids , short_id ))
482498 {
483- weechat_printf (chat -> buffer , "%s%s just left the group chat" ,
484- weechat_prefix ("quit" ), name );
485- nick = weechat_nicklist_search_nick (chat -> buffer ,
486- chat -> nicklist_group , name );
499+ char * full_name = twc_get_peer_name_prefixed (short_id , name );
500+ nick = weechat_nicklist_search_nick (
501+ chat -> buffer , chat -> nicklist_group , full_name );
487502 weechat_nicklist_remove_nick (chat -> buffer , nick );
503+ if (!twc_get_peer_name_count (new_nicks , name ))
504+ {
505+ nick = weechat_nicklist_search_nick (chat -> buffer ,
506+ chat -> nicklist_group , name );
507+ weechat_nicklist_remove_nick (chat -> buffer , nick );
508+ }
509+ weechat_printf (
510+ chat -> buffer , "%s%s just left the group chat" ,
511+ weechat_prefix ("quit" ),
512+ weechat_config_boolean (twc_config_show_id ) ? full_name : name );
513+ free (full_name );
488514 }
489515 n = weechat_list_next (n );
516+ id = weechat_list_next (id );
490517 }
491518
492519 /* searching for joins */
493520 n = weechat_list_get (new_nicks , 0 );
521+ id = weechat_list_get (new_ids , 0 );
494522
495- while (n )
523+ while (id && n )
496524 {
525+ const char * short_id = weechat_list_string (id );
497526 const char * name = weechat_list_string (n );
498- if (!weechat_list_search (chat -> nicks , name ))
527+ if (!weechat_list_search (chat -> ids , short_id ))
499528 {
500- weechat_printf (chat -> buffer , "%s%s just joined the group chat" ,
501- weechat_prefix ("join" ), name );
529+ char * full_name = twc_get_peer_name_prefixed (short_id , name );
530+ weechat_nicklist_add_nick (chat -> buffer , chat -> nicklist_group ,
531+ full_name , NULL , NULL , NULL , 1 );
502532 weechat_nicklist_add_nick (chat -> buffer , chat -> nicklist_group , name ,
503- NULL , NULL , NULL , 1 );
533+ NULL , NULL , NULL , 0 );
534+ weechat_printf (
535+ chat -> buffer , "%s%s just joined the group chat" ,
536+ weechat_prefix ("join" ),
537+ weechat_config_boolean (twc_config_show_id ) ? full_name : name );
538+ free (full_name );
504539 }
505540 n = weechat_list_next (n );
541+ id = weechat_list_next (id );
506542 }
507543
508544 weechat_list_remove_all (chat -> nicks );
509545 weechat_list_free (chat -> nicks );
546+ weechat_list_remove_all (chat -> ids );
547+ weechat_list_free (chat -> ids );
510548 chat -> nicks = new_nicks ;
549+ chat -> ids = new_ids ;
511550}
512551
513552void
@@ -523,10 +562,13 @@ twc_group_peer_name_callback(Tox *tox, uint32_t group_number,
523562 struct t_gui_nick * nick = NULL ;
524563 const char * prev_name ;
525564 char * name ;
565+ const char * short_id ;
566+ char * prev_full_name ;
567+ char * full_name ;
526568 bool rc ;
527569 TOX_ERR_CONFERENCE_PEER_QUERY err = TOX_ERR_CONFERENCE_PEER_QUERY_OK ;
528570
529- struct t_weelist_item * n ;
571+ struct t_weelist_item * n , * id ;
530572
531573 npeers = tox_conference_peer_count (profile -> tox , group_number , & err );
532574
@@ -550,27 +592,40 @@ twc_group_peer_name_callback(Tox *tox, uint32_t group_number,
550592 twc_group_peer_list_changed_callback (tox , group_number , data );
551593 return ;
552594 }
553-
595+ id = weechat_list_get (chat -> ids , peer_number );
596+ short_id = weechat_list_string (id );
554597 prev_name = weechat_list_string (n );
598+ prev_full_name = twc_get_peer_name_prefixed (short_id , prev_name );
599+
555600 name = twc_null_terminate (pname , pname_len );
601+ full_name = twc_get_peer_name_prefixed (short_id , name );
556602
557603 nick = weechat_nicklist_search_nick (chat -> buffer , chat -> nicklist_group ,
558- prev_name );
559-
604+ prev_full_name );
560605 weechat_nicklist_remove_nick (chat -> buffer , nick );
606+ if (!twc_get_peer_name_count (chat -> nicks , prev_name ))
607+ {
608+ nick = weechat_nicklist_search_nick (chat -> buffer , chat -> nicklist_group ,
609+ prev_name );
610+ weechat_nicklist_remove_nick (chat -> buffer , nick );
611+ }
561612
562613 err = TOX_ERR_CONFERENCE_PEER_QUERY_OK ;
563614 rc = tox_conference_peer_number_is_ours (tox , group_number , peer_number ,
564615 & err );
616+ bool show_id = weechat_config_boolean (twc_config_show_id );
565617 if ((err == TOX_ERR_CONFERENCE_PEER_QUERY_OK ) && (!rc ))
566- weechat_printf (chat -> buffer , "%s%s is now known as %s" ,
567- weechat_prefix ("network" ), prev_name , name );
568-
618+ weechat_printf (
619+ chat -> buffer , "%s%s is now known as %s" , weechat_prefix ("network" ),
620+ show_id ? prev_full_name : prev_name , show_id ? full_name : name );
569621 weechat_list_set (n , name );
570-
622+ weechat_nicklist_add_nick (chat -> buffer , chat -> nicklist_group , full_name ,
623+ NULL , NULL , NULL , 1 );
571624 weechat_nicklist_add_nick (chat -> buffer , chat -> nicklist_group , name , NULL ,
572- NULL , NULL , 1 );
625+ NULL , NULL , 0 );
573626
627+ free (prev_full_name );
628+ free (full_name );
574629 free (name );
575630}
576631
0 commit comments