Browse Source

Route avatar events alongside file browser events in ChatGUI

master
evgeny 2 weeks ago
parent
commit
78bed5efe4
  1. 19
      tools/chatgui/src/mainwindow.cpp
  2. 1
      tools/chatgui/transport/gui_bridge.h
  3. 5
      tools/chatgui/transport/gui_bridge_impl.cpp

19
tools/chatgui/src/mainwindow.cpp

@ -15,6 +15,10 @@
#include "videoplayer_window.h" #include "videoplayer_window.h"
#include "imageviewer_window.h" #include "imageviewer_window.h"
#include "member_files/browser.h" #include "member_files/browser.h"
#include "avatars/avatarmanager.h"
extern "C" {
#include "chat/chat_member.h"
}
#include "creategroupdialog.h" #include "creategroupdialog.h"
#include "invite_link.h" #include "invite_link.h"
#include "sound_manager.h" #include "sound_manager.h"
@ -111,7 +115,7 @@ static void onMemberListCallback(const uint8_t* data, int len) {
static void onMemberUpdatedCallback(const uint8_t* data, int len) { static void onMemberUpdatedCallback(const uint8_t* data, int len) {
if (len < 1) return; if (len < 1) return;
uint8_t cl = data[0]; uint8_t cl = data[0];
if (len < 1 + (int)cl + 1 + 79) return; if (len < 1 + (int)cl + 1 + CHAT_MEMBER_DISPLAY_SIZE) return;
if (s_mainWindow) if (s_mainWindow)
s_mainWindow->onMemberUpdated(QString::fromUtf8((const char*)data + 1, cl), data + 1 + cl + 1); s_mainWindow->onMemberUpdated(QString::fromUtf8((const char*)data + 1, cl), data + 1 + cl + 1);
} }
@ -151,6 +155,7 @@ MainWindow::MainWindow(QWidget *parent, DbManager* db, const QString& cfgPath,
setWindowTitle("vibechat"); setWindowTitle("vibechat");
resize(900, 600); resize(900, 600);
if (m_db) m_db->setDbPath(m_cfgDbPath); if (m_db) m_db->setDbPath(m_cfgDbPath);
new AvatarManager(m_db, this);
setupUi(); setupUi();
setupTray(); setupTray();
setupSoundFromConfig(); setupSoundFromConfig();
@ -173,6 +178,8 @@ MainWindow::MainWindow(QWidget *parent, DbManager* db, const QString& cfgPath,
MainWindow::~MainWindow() { MainWindow::~MainWindow() {
s_mainWindow = nullptr; s_mainWindow = nullptr;
delete AvatarManager::instance();
gui_bridge_set_avatar_result_cb(nullptr);
if (m_fileBrowser) delete m_fileBrowser.data(); if (m_fileBrowser) delete m_fileBrowser.data();
gui_bridge_set_member_files_response_cb(nullptr); gui_bridge_set_member_files_response_cb(nullptr);
gui_bridge_set_member_files_transfer_cb(nullptr); gui_bridge_set_member_files_transfer_cb(nullptr);
@ -391,11 +398,16 @@ void MainWindow::setupBridgeCallbacks() {
DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, "member_files: GUI response route bytes=%d browser=%d", DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, "member_files: GUI response route bytes=%d browser=%d",
length, (int)(s_mainWindow && s_mainWindow->m_fileBrowser)); length, (int)(s_mainWindow && s_mainWindow->m_fileBrowser));
if (s_mainWindow && s_mainWindow->m_fileBrowser) s_mainWindow->m_fileBrowser->onResponse(data, length); if (s_mainWindow && s_mainWindow->m_fileBrowser) s_mainWindow->m_fileBrowser->onResponse(data, length);
if (AvatarManager::instance()) AvatarManager::instance()->onResponse(data, length);
}); });
gui_bridge_set_member_files_transfer_cb([](const uint8_t* data, int length) { gui_bridge_set_member_files_transfer_cb([](const uint8_t* data, int length) {
DEBUG_TRACE(DEBUG_CATEGORY_DEBUG, "member_files: GUI progress route bytes=%d browser=%d", DEBUG_TRACE(DEBUG_CATEGORY_DEBUG, "member_files: GUI progress route bytes=%d browser=%d",
length, (int)(s_mainWindow && s_mainWindow->m_fileBrowser)); length, (int)(s_mainWindow && s_mainWindow->m_fileBrowser));
if (s_mainWindow && s_mainWindow->m_fileBrowser) s_mainWindow->m_fileBrowser->onTransfer(data, length); if (s_mainWindow && s_mainWindow->m_fileBrowser) s_mainWindow->m_fileBrowser->onTransfer(data, length);
if (AvatarManager::instance()) AvatarManager::instance()->onTransfer(data, length);
});
gui_bridge_set_avatar_result_cb([](const uint8_t* data, int length) {
if (AvatarManager::instance()) AvatarManager::instance()->onPublished(data, length);
}); });
gui_bridge_set_msg_received_cb(onMsgReceivedCallback); gui_bridge_set_msg_received_cb(onMsgReceivedCallback);
gui_bridge_set_channel_updated_cb(onChannelUpdatedCallback); gui_bridge_set_channel_updated_cb(onChannelUpdatedCallback);
@ -405,12 +417,14 @@ void MainWindow::setupBridgeCallbacks() {
gui_bridge_set_my_node_id_cb([](uint64_t nid) { gui_bridge_set_my_node_id_cb([](uint64_t nid) {
qDebug("MainWindow: MY_NODE_ID setMyNodeId(%016llx)", (unsigned long long)nid); qDebug("MainWindow: MY_NODE_ID setMyNodeId(%016llx)", (unsigned long long)nid);
if (s_mainWindow && s_mainWindow->m_db) s_mainWindow->m_db->setMyNodeId((quint64)nid); if (s_mainWindow && s_mainWindow->m_db) s_mainWindow->m_db->setMyNodeId((quint64)nid);
if (AvatarManager::instance()) AvatarManager::instance()->initialize();
}); });
gui_bridge_set_auto_connect_status_cb(onAutoConnectStatusCallback); gui_bridge_set_auto_connect_status_cb(onAutoConnectStatusCallback);
gui_bridge_set_channel_peers_online_cb(onChannelPeersOnlineCallback); gui_bridge_set_channel_peers_online_cb(onChannelPeersOnlineCallback);
gui_bridge_set_db_ready_cb([]() { gui_bridge_set_db_ready_cb([]() {
if (!s_mainWindow || !s_mainWindow->m_db) return; if (!s_mainWindow || !s_mainWindow->m_db) return;
s_mainWindow->m_db->setDb(chat_core_get_db(gui_bridge_get_inst())); s_mainWindow->m_db->setDb(chat_core_get_db(gui_bridge_get_inst()));
if (AvatarManager::instance()) AvatarManager::instance()->initialize();
RadioAudioEngine::instance()->loadSettings(s_mainWindow->m_cfgPath); RadioAudioEngine::instance()->loadSettings(s_mainWindow->m_cfgPath);
s_mainWindow->m_channelList->loadChannels(); s_mainWindow->m_channelList->loadChannels();
s_mainWindow->restoreWindowGeometry(); s_mainWindow->restoreWindowGeometry();
@ -945,14 +959,17 @@ void MainWindow::onMessageReceived(const char* ch_id, int ch_id_len, uint64_t au
} }
void MainWindow::onMemberList(const QString& chId, int count, const uint8_t* data, int dataLen) { void MainWindow::onMemberList(const QString& chId, int count, const uint8_t* data, int dataLen) {
if (AvatarManager::instance()) AvatarManager::instance()->onMembers(chId, count, data, dataLen);
m_accountList->onMemberList(chId, count, data, dataLen); m_accountList->onMemberList(chId, count, data, dataLen);
} }
void MainWindow::onMemberUpdated(const QString& chId, const uint8_t* data) { void MainWindow::onMemberUpdated(const QString& chId, const uint8_t* data) {
if (AvatarManager::instance()) AvatarManager::instance()->onMembers(chId, 1, data, CHAT_MEMBER_DISPLAY_SIZE, false);
m_accountList->onMemberUpdated(chId, data); m_accountList->onMemberUpdated(chId, data);
} }
void MainWindow::onMemberRemoved(const QString& chId, uint64_t nodeId) { void MainWindow::onMemberRemoved(const QString& chId, uint64_t nodeId) {
if (AvatarManager::instance()) AvatarManager::instance()->removeMember(chId, nodeId);
m_accountList->onMemberRemoved(chId, nodeId); m_accountList->onMemberRemoved(chId, nodeId);
} }

1
tools/chatgui/transport/gui_bridge.h

@ -241,6 +241,7 @@ void gui_bridge_set_dm_invite_result_cb(gui_dm_messages_fn cb);
/* Файловый браузер: wire-ответы и прогресс общих передач, в GUI-потоке. */ /* Файловый браузер: wire-ответы и прогресс общих передач, в GUI-потоке. */
void gui_bridge_set_member_files_response_cb(gui_dm_messages_fn cb); void gui_bridge_set_member_files_response_cb(gui_dm_messages_fn cb);
void gui_bridge_set_member_files_transfer_cb(gui_dm_messages_fn cb); void gui_bridge_set_member_files_transfer_cb(gui_dm_messages_fn cb);
void gui_bridge_set_avatar_result_cb(gui_dm_messages_fn cb);
/* CHAT_EVT_ATTACHMENT_PREPARATION: target + job UUID + state. */ /* CHAT_EVT_ATTACHMENT_PREPARATION: target + job UUID + state. */
void gui_bridge_set_attachment_preparation_cb(gui_dm_messages_fn cb); void gui_bridge_set_attachment_preparation_cb(gui_dm_messages_fn cb);

5
tools/chatgui/transport/gui_bridge_impl.cpp

@ -68,6 +68,7 @@ static gui_dm_messages_fn g_dm_call_route_cb = nullptr;
static gui_dm_messages_fn g_dm_invite_result_cb = nullptr; static gui_dm_messages_fn g_dm_invite_result_cb = nullptr;
static gui_dm_messages_fn g_member_files_response_cb = nullptr; static gui_dm_messages_fn g_member_files_response_cb = nullptr;
static gui_dm_messages_fn g_member_files_transfer_cb = nullptr; static gui_dm_messages_fn g_member_files_transfer_cb = nullptr;
static gui_dm_messages_fn g_avatar_result_cb = nullptr;
static gui_network_changed_fn g_network_changed_cb = nullptr; static gui_network_changed_fn g_network_changed_cb = nullptr;
static struct UASYNC* g_ua = nullptr; static struct UASYNC* g_ua = nullptr;
static struct UTUN_INSTANCE* g_inst = nullptr; static struct UTUN_INSTANCE* g_inst = nullptr;
@ -82,6 +83,9 @@ void GuiBridgeReceiver::processPost(int eventType, QByteArray data) {
eventType == 16 || eventType == 17 || eventType == 24 || eventType == 25 || eventType == 31 || eventType == 33)) eventType == 16 || eventType == 17 || eventType == 24 || eventType == 25 || eventType == 31 || eventType == 33))
g_network_changed_cb(eventType); g_network_changed_cb(eventType);
switch (eventType) { switch (eventType) {
case CHAT_EVT_AVATAR_RESULT:
if (g_avatar_result_cb) g_avatar_result_cb(d, dlen);
break;
case CHAT_EVT_MEMBER_FILES_RESPONSE: case CHAT_EVT_MEMBER_FILES_RESPONSE:
if (dlen >= 16 + MF_WIRE_HEADER) DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, if (dlen >= 16 + MF_WIRE_HEADER) DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG,
"member_files: bridge response id=%llu cmd=%s bytes=%d callback=%d", "member_files: bridge response id=%llu cmd=%s bytes=%d callback=%d",
@ -571,6 +575,7 @@ void gui_bridge_set_dm_call_route_cb(gui_dm_messages_fn cb) { g_dm_call_route_cb
void gui_bridge_set_dm_invite_result_cb(gui_dm_messages_fn cb) { g_dm_invite_result_cb = cb; } void gui_bridge_set_dm_invite_result_cb(gui_dm_messages_fn cb) { g_dm_invite_result_cb = cb; }
void gui_bridge_set_member_files_response_cb(gui_dm_messages_fn cb) { g_member_files_response_cb = cb; } void gui_bridge_set_member_files_response_cb(gui_dm_messages_fn cb) { g_member_files_response_cb = cb; }
void gui_bridge_set_member_files_transfer_cb(gui_dm_messages_fn cb) { g_member_files_transfer_cb = cb; } void gui_bridge_set_member_files_transfer_cb(gui_dm_messages_fn cb) { g_member_files_transfer_cb = cb; }
void gui_bridge_set_avatar_result_cb(gui_dm_messages_fn cb) { g_avatar_result_cb = cb; }
void gui_bridge_set_dm_conv_updated_cb(gui_dm_conv_updated_fn cb) { void gui_bridge_set_dm_conv_updated_cb(gui_dm_conv_updated_fn cb) {
g_dm_conv_updated_cb = cb; g_dm_conv_updated_cb = cb;

Loading…
Cancel
Save