dm: прямой обмен сообщениями (DM) + soundtouch + архитектура звонков
- src/dm/: dm_core/dm_crypto/dm_mailbox — прямой обмен сообщениями (DM) - lib/soundtouch-master/: vendored SoundTouch (изменение темпа/высоты аудио) - doc/dm_arch.md, doc/chat_call_arch.md: архитектура DM и звонков - tests: test_dm.c, test_dm_e2e.c - chat: рефакторинг chat_* модулей, member_sync, invite_build - chatgui/chatgui-android: синхронизация с новым API чата - lib/u_async, debug_config, utun_instance: сопутствующие изменения
This commit is contained in:
1 parent
761f64cf76
commit
73fe99b33f
123 files changed
+14095
-1270
No files matched your search
@@ -62,9 +62,11 @@ static void postUiStateKv(const char* key, const QString& value) {
|
||||
QByteArray val = value.toUtf8();
|
||||
size_t klen = strlen(key), vlen = (size_t)val.size(), total = klen + 1 + vlen + 1;
|
||||
if (total > 256) return;
|
||||
void* arg = u_malloc(total);
|
||||
memcpy(arg, key, klen + 1);
|
||||
memcpy((char*)arg + klen + 1, val.constData(), vlen + 1);
|
||||
struct save_ui_state_arg* arg = (struct save_ui_state_arg*)u_malloc(sizeof(struct save_ui_state_arg));
|
||||
if (!arg) return;
|
||||
arg->inst = gui_bridge_get_inst();
|
||||
memcpy(arg->data, key, klen + 1);
|
||||
memcpy(arg->data + klen + 1, val.constData(), vlen + 1);
|
||||
gui_bridge_post_uasync_fn(chat_core_save_ui_state_trampoline, arg);
|
||||
}
|
||||
|
||||
@@ -369,7 +371,7 @@ void MainWindow::setupBridgeCallbacks() {
|
||||
gui_bridge_set_channel_peers_online_cb(onChannelPeersOnlineCallback);
|
||||
gui_bridge_set_db_ready_cb([]() {
|
||||
if (!s_mainWindow || !s_mainWindow->m_db) return;
|
||||
s_mainWindow->m_db->setDb(chat_core_get_db());
|
||||
s_mainWindow->m_db->setDb(chat_core_get_db(gui_bridge_get_inst()));
|
||||
s_mainWindow->m_channelList->loadChannels();
|
||||
s_mainWindow->restoreWindowGeometry();
|
||||
QString lastCid = s_mainWindow->m_db->getUiState("last_channel_id");
|
||||
@@ -424,9 +426,12 @@ void MainWindow::setupConnects() {
|
||||
m_currentChannelId = channelId;
|
||||
m_messageList->loadChannel(channelId);
|
||||
m_accountList->setChannel(channelId);
|
||||
QByteArray cidBA = channelId.toUtf8();
|
||||
char* cid = u_strdup(cidBA.constData());
|
||||
if (cid) gui_bridge_post_uasync_fn(chat_core_connect_channel_trampoline, cid);
|
||||
struct chat_create_auto_arg* arg = (struct chat_create_auto_arg*)u_calloc(1, sizeof(*arg));
|
||||
if (arg) {
|
||||
arg->inst = gui_bridge_get_inst();
|
||||
snprintf(arg->name, sizeof(arg->name), "%s", channelId.toUtf8().constData());
|
||||
gui_bridge_post_uasync_fn(chat_core_connect_channel_trampoline, arg);
|
||||
}
|
||||
});
|
||||
connect(m_channelList, &ChannelList::inviteRequested, this, &MainWindow::showShareInviteDialog);
|
||||
connect(m_channelList, &ChannelList::inviteByLinkRequested, this, &MainWindow::showInviteByLinkDialog);
|
||||
@@ -671,7 +676,15 @@ void MainWindow::onCreateGroupRequested() {
|
||||
if (name.isEmpty()) return;
|
||||
|
||||
char* name_copy = u_strdup(name.toUtf8().constData());
|
||||
if (name_copy) gui_bridge_post_uasync_fn(chat_core_create_channel_auto_trampoline, name_copy);
|
||||
if (name_copy) {
|
||||
struct chat_create_auto_arg* arg = (struct chat_create_auto_arg*)u_malloc(sizeof(*arg));
|
||||
if (arg) {
|
||||
arg->inst = gui_bridge_get_inst();
|
||||
snprintf(arg->name, sizeof(arg->name), "%s", name_copy);
|
||||
gui_bridge_post_uasync_fn(chat_core_create_channel_auto_trampoline, arg);
|
||||
}
|
||||
u_free(name_copy);
|
||||
}
|
||||
|
||||
DEBUG_INFO(DEBUG_CATEGORY_DEBUG, "MainWindow: create group request posted name=%s", qPrintable(name));
|
||||
}
|
||||
@@ -734,6 +747,7 @@ void MainWindow::autoPlayCheckNewMessage(const QString& channelId) {
|
||||
u_malloc(sizeof(struct attachment_dl_req));
|
||||
if (!req) return;
|
||||
memset(req, 0, sizeof(*req));
|
||||
req->inst = gui_bridge_get_inst();
|
||||
strncpy(req->channel_id, channelId.toUtf8().constData(), sizeof(req->channel_id) - 1);
|
||||
req->msg_id = msg.id;
|
||||
gui_bridge_post_uasync_fn(chat_core_attachment_download_trampoline, req);
|
||||
@@ -787,6 +801,7 @@ void MainWindow::autoPlayTimerTick() {
|
||||
u_malloc(sizeof(struct attachment_dl_req));
|
||||
if (!req) return;
|
||||
memset(req, 0, sizeof(*req));
|
||||
req->inst = gui_bridge_get_inst();
|
||||
strncpy(req->channel_id, item.channelId.toUtf8().constData(), sizeof(req->channel_id) - 1);
|
||||
req->msg_id = item.msgId;
|
||||
gui_bridge_post_uasync_fn(chat_core_attachment_download_trampoline, req);
|
||||
|
||||
Reference in new issue
Block a user