Carry voice PM receipts and document shared media completion semantics

This commit is contained in:
evgeny committed 2026-10-29 13:34:26 +01:00
1 parent e943879c50
commit 31e461dca2
3 files changed
+5 -4

No files matched your search

@@ -1,6 +1,6 @@
/* Отправка подготовленного изображения: JPEG/PNG в канал/PM через attachment_send, другие форматы — только в канал.
* MIME и размеры с учётом EXIF определяет Android по содержимому. JPEG/PNG забирает собственный cache-файл caller.
* 0 = запрос поставлен в uasync, -1 = отказ (cache остаётся caller); для канала результат — CHAT_EVT_MSG_SUBMITTED.
* 0 = запрос поставлен в uasync, -1 = отказ (cache остаётся caller); результат — CHAT_EVT_MSG_SUBMITTED.
* Вызовы сериализовать со stop/restart; для дополнительных форматов источник живёт до результата и удаляется caller. */
#ifndef PHOTO_SENDER_H
#define PHOTO_SENDER_H
@@ -12,7 +12,7 @@ extern "C" {
/* channel_id — ID канала либо dm:<conv>, generation — зафиксированное поколение PM (для канала 0).
* db_path нужен только дополнительным форматам канала; content_type — проверенный MIME.
* reply_to — обязательные 32 байта (нули = без ответа), request_id — корреляция канального результата с UI. */
* reply_to — обязательные 32 байта (нули = без ответа), request_id — корреляция результата локального commit с UI. */
int photo_send(const char* channel_id, const char* src_file_path, const char* db_path,
int width, int height, const uint8_t reply_to[32], uint64_t request_id,
const char* content_type, uint64_t generation);
@@ -13,7 +13,7 @@ extern "C" {
/* target — десятичный ID канала либо dm:conv_id; source — NUL-путь короче 1024 байтов.
* duration_ms=1..86400000, width/height=1..16384. Для канала reply_to — обязательные 32 байта
* (нули = без ответа), request_id → CHAT_EVT_MSG_SUBMITTED. В DM эти поля игнорируются;
* (нули = без ответа), request_id → CHAT_EVT_MSG_SUBMITTED для канала и DM. В DM reply_to игнорируется;
* generation фиксирует поколение беседы, 0 захватывает его в trampoline. */
int video_send(const char* channel_id, const char* src_file_path, const char* db_path,
int duration_ms, int width, int height, const uint8_t reply_to[32], uint64_t request_id, uint64_t generation);
@@ -219,7 +219,8 @@ int voice_recorder_stop(int* out_duration_ms) {
req->inst = instance_lite_get_instance(); req->info.kind = ATTACHMENT_VOICE; req->preset = g_rec->preset;
req->is_dm = !strncmp(g_rec->channel_id, "dm:", 3);
req->dm_generation = g_rec->generation;
if (!req->is_dm) { memcpy(req->reply_to, g_rec->reply_to, sizeof(req->reply_to)); req->request_id = g_rec->request_id; }
req->request_id = g_rec->request_id;
if (!req->is_dm) memcpy(req->reply_to, g_rec->reply_to, sizeof(req->reply_to));
snprintf(req->target, sizeof(req->target), "%s", g_rec->channel_id + (req->is_dm ? 3 : 0));
if (g_rec->compressor && g_rec->compressor_enabled) {
struct audio_compressor* replacement = audio_compressor_clone_config(g_rec->compressor);