From 328d36376c3b14056028809abf0f742db401d853 Mon Sep 17 00:00:00 2001 From: evgeny Date: Mon, 21 Sep 2026 19:36:07 +0300 Subject: [PATCH] =?UTF-8?q?chat:=20=D0=BF=D0=B8=D1=88=D0=B5=D0=BC=20local?= =?UTF-8?q?=5Fattrs=20=D0=B0=D1=82=D0=BE=D0=BC=D0=B0=D1=80=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=20=D0=B2=D1=81=D1=82=D0=B0=D0=B2=D0=BA=D0=B5?= =?UTF-8?q?=20=D1=81=D0=B2=D0=BE=D0=B5=D0=B3=D0=BE=20=D0=BC=D0=B5=D0=B4?= =?UTF-8?q?=D0=B8=D0=B0=20(=D0=B3=D0=BE=D0=BD=D0=BA=D0=B0=20=D1=81=20MSG?= =?UTF-8?q?=5FRECEIVED)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/chat_msg.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/chat/chat_msg.c b/src/chat/chat_msg.c index 3325fda8..6bb93a7c 100644 --- a/src/chat/chat_msg.c +++ b/src/chat/chat_msg.c @@ -216,16 +216,19 @@ static void on_media_registered(void* arg, int err, const struct media_index_res u_free(sig_msg); u_free(json); u_free(full_data); u_free(mctx); return; } - int ret = db_sync_insert_signed(si, json, strlen(json), json_sig, 64, ts, NULL); + /* local_attrs готовим заранее и пишем атомарно при вставке — иначе GUI по + MSG_RECEIVED может прочитать сообщение раньше отдельного UPDATE (гонка), + и своё голосовое покажется «без медиа» (серый media bar + попытка скачать) */ + const char* base = strrchr(mctx->media_dest, '/'); + const char* filename = base ? base + 1 : mctx->media_dest; + char attrs[1100]; snprintf(attrs, sizeof(attrs), "{\"st\":\"fl\",\"fp\":\"%s\"}", filename); + + int ret = db_sync_insert_signed(si, json, strlen(json), json_sig, 64, ts, attrs); if (ret != 0) { DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "%s: media insert failed ret=%d", CC_ID, ret); } else { DEBUG_INFO(DEBUG_CATEGORY_CHAT_SYNC, "%s: media message inserted ch=%s ts=%llu", CC_ID, mctx->channel_id, (unsigned long long)ts); - const char* base = strrchr(mctx->media_dest, '/'); - const char* filename = base ? base + 1 : mctx->media_dest; - char attrs[1100]; snprintf(attrs, sizeof(attrs), "{\"st\":\"fl\",\"fp\":\"%s\"}", filename); - chat_core_update_local_attrs(mctx->inst, mctx->channel_id, ts, json_sig, attrs); /* анонсируем блоки суперузлам — иначе первый скачивающий не найдёт держателя */ media_delivery_announce_media(mctx->inst, strtoull(mctx->channel_id, NULL, 10),