From 56897368b3b54c3deed7262360f5ba8481c2b0e5 Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 6 Oct 2026 13:41:55 +0200 Subject: [PATCH] Own group avatar synchronization in the chat service lifecycle --- src/Makefile.am | 2 ++ src/chat/chat_channel.c | 2 ++ src/chat/chat_sync.c | 5 +++++ 3 files changed, 9 insertions(+) diff --git a/src/Makefile.am b/src/Makefile.am index 99ad2351..3a5f3800 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -111,6 +111,7 @@ utun_CORE_SOURCES = \ chat/chat_whisper.c \ chat/chat_channel.c \ chat/chat_profile.c \ + chat/group_avatar.c \ chat/chat_status.c \ chat/chat_sync.c \ chat/chat_admin.c \ @@ -243,6 +244,7 @@ libutun_a_SOURCES = \ chat/chat_msg.c \ chat/chat_channel.c \ chat/chat_profile.c \ + chat/group_avatar.c \ chat/chat_status.c \ chat/chat_sync.c \ chat/chat_admin.c \ diff --git a/src/chat/chat_channel.c b/src/chat/chat_channel.c index 4fe79c60..a2fbdb36 100644 --- a/src/chat/chat_channel.c +++ b/src/chat/chat_channel.c @@ -5,6 +5,7 @@ */ #include "chat_core_priv.h" +#include "group_avatar.h" #include "chat_event.h" #include "chat_setting.h" @@ -338,6 +339,7 @@ void chat_core_delete_channel(struct UTUN_INSTANCE* inst, const char* ch_id) { /* 1. отмена медиа-загрузок/релэев/суперузлов канала (держат conn_mgr handle группы) */ media_delivery_cancel_channel(inst, gid); member_files_cancel_group(inst, gid); + group_avatar_cancel_group(inst, gid); /* 2. снять merkle-сессии этого namespace */ member_sync_cancel_channel(inst, ch_id); diff --git a/src/chat/chat_sync.c b/src/chat/chat_sync.c index 0d4a21b6..ac3bcf0b 100644 --- a/src/chat/chat_sync.c +++ b/src/chat/chat_sync.c @@ -6,6 +6,7 @@ #include "chat_event.h" #include "chat_admin.h" #include "chat_join.h" +#include "group_avatar.h" #include "../routing_layer/topo_node_sqlite.h" #include "../routing_layer/topo_group.h" #include "../routing_layer/topo_group_invite.h" @@ -752,6 +753,9 @@ int chat_sync_init(struct UTUN_INSTANCE* inst) { DEBUG_ERROR(DEBUG_CATEGORY_MEMBER_SYNC, "%s: member synchronization initialization failed", CS_ID); inst->chat_sync = NULL; u_free(cs); return -1; } + if (group_avatar_init(inst) < 0) { + member_sync_destroy(inst); inst->chat_sync = NULL; u_free(cs); return -1; + } etcp_bind(inst, ETCP_RT_ID_CHAT_SYNC, chat_sync_recv_cb); etcp_add_conn_status_cbk(inst, cs_on_conn_status, cs); @@ -782,6 +786,7 @@ void chat_sync_destroy(struct UTUN_INSTANCE* inst) { member_sync_remove_apply_cbk(inst, cs_on_member_applied, cs); utun_remove_peer_sleep_cbk(inst, cs_on_peer_sleep, cs); cs_pending_free_all(cs); + group_avatar_destroy(inst); member_sync_destroy(inst); chat_admin_destroy(inst); chat_join_destroy(inst);