|
|
|
@ -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); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|