chat_room.cpp: Cleanup

Signed-off-by: Collecting <collecting@noreply.localhost>
This commit is contained in:
Collecting
2026-01-14 23:12:33 +00:00
parent 868a321e14
commit 6bc022f6db

View File

@@ -30,6 +30,8 @@
#include "citron/multiplayer/message.h" #include "citron/multiplayer/message.h"
#include "citron/uisettings.h" #include "citron/uisettings.h"
#include "citron/theme.h" #include "citron/theme.h"
#include "citron/main.h"
#include <QApplication>
#ifdef ENABLE_WEB_SERVICE #ifdef ENABLE_WEB_SERVICE
#include "web_service/web_backend.h" #include "web_service/web_backend.h"
#endif #endif
@@ -224,9 +226,6 @@ ChatRoom::ChatRoom(QWidget* parent) : QWidget(parent), ui(std::make_unique<Ui::C
ui->horizontalLayout_3->setStretch(1, 0); ui->horizontalLayout_3->setStretch(1, 0);
ui->horizontalLayout_3->setStretch(2, 0); ui->horizontalLayout_3->setStretch(2, 0);
connect(ui->chat_message, &QLineEdit::returnPressed, this, &ChatRoom::OnSendChat);
connect(send_message, &QPushButton::clicked, this, &ChatRoom::OnSendChat);
QMenu* emoji_menu = new QMenu(this); QMenu* emoji_menu = new QMenu(this);
QStringList emojis = { QStringList emojis = {
@@ -271,7 +270,6 @@ ChatRoom::ChatRoom(QWidget* parent) : QWidget(parent), ui(std::make_unique<Ui::C
grid_layout->addWidget(btn, i / max_columns, i % max_columns); grid_layout->addWidget(btn, i / max_columns, i % max_columns);
} }
// Use QWidgetAction to "stuff" the grid into the QMenu
QWidgetAction* action = new QWidgetAction(emoji_menu); QWidgetAction* action = new QWidgetAction(emoji_menu);
action->setDefaultWidget(grid_container); action->setDefaultWidget(grid_container);
emoji_menu->addAction(action); emoji_menu->addAction(action);
@@ -304,6 +302,9 @@ ChatRoom::ChatRoom(QWidget* parent) : QWidget(parent), ui(std::make_unique<Ui::C
connect(send_message, &QPushButton::clicked, this, &ChatRoom::OnSendChat); connect(send_message, &QPushButton::clicked, this, &ChatRoom::OnSendChat);
connect(ui->chat_message, &QLineEdit::textChanged, this, &ChatRoom::OnChatTextChanged); connect(ui->chat_message, &QLineEdit::textChanged, this, &ChatRoom::OnChatTextChanged);
connect(ui->player_view, &QTreeView::doubleClicked, this, &ChatRoom::OnPlayerDoubleClicked); connect(ui->player_view, &QTreeView::doubleClicked, this, &ChatRoom::OnPlayerDoubleClicked);
connect(this, &ChatRoom::ChatReceived, this, &ChatRoom::OnChatReceive);
connect(this, &ChatRoom::StatusMessageReceived, this, &ChatRoom::OnStatusMessageReceive);
ui->horizontalLayout_3->setStretch(0, 1); ui->horizontalLayout_3->setStretch(0, 1);
ui->horizontalLayout_3->setStretch(1, 0); ui->horizontalLayout_3->setStretch(1, 0);
ui->horizontalLayout_3->setStretch(2, 0); ui->horizontalLayout_3->setStretch(2, 0);
@@ -324,8 +325,6 @@ void ChatRoom::Initialize(Network::RoomNetwork* room_network_) {
[this](const Network::StatusMessageEntry& status_message) { [this](const Network::StatusMessageEntry& status_message) {
emit StatusMessageReceived(status_message); emit StatusMessageReceived(status_message);
}); });
connect(this, &ChatRoom::ChatReceived, this, &ChatRoom::OnChatReceive);
connect(this, &ChatRoom::StatusMessageReceived, this, &ChatRoom::OnStatusMessageReceive);
} }
} }
@@ -656,9 +655,24 @@ void ChatRoom::SetPlayerList(const Network::RoomMember::MemberList& member_list)
if (room_network) { if (room_network) {
if (auto room_member = room_network->GetRoomMember().lock()) { if (auto room_member = room_network->GetRoomMember().lock()) {
std::string my_nick = room_member->GetNickname(); std::string my_nick = room_member->GetNickname();
// Find the Main Window to see if we are actually playing a game
GMainWindow* main_window = nullptr;
for (auto* widget : QApplication::topLevelWidgets()) {
main_window = qobject_cast<GMainWindow*>(widget);
if (main_window) break;
}
bool is_actually_emulating = main_window && main_window->IsEmulationRunning();
for (const auto& m : member_list) { for (const auto& m : member_list) {
if (m.nickname == my_nick) { if (m.nickname == my_nick) {
local_game_info = m.game_info; local_game_info = m.game_info;
// If the server thinks we're playing but the emulator is off, force-clear it
if (!is_actually_emulating && !local_game_info.name.empty()) {
room_member->SendGameInfo({}); // Tell server to clear our status
local_game_info = {}; // Clear it locally for the UI
}
break; break;
} }
} }
@@ -670,14 +684,25 @@ void ChatRoom::SetPlayerList(const Network::RoomMember::MemberList& member_list)
if (member.nickname.empty()) if (member.nickname.empty())
continue; continue;
AnnounceMultiplayerRoom::GameInfo member_game = member.game_info;
// If this is us and we aren't playing, don't show the stale game name in the UI
if (room_network) {
if (auto room = room_network->GetRoomMember().lock()) {
if (member.nickname == room->GetNickname() && local_game_info.name.empty()) {
member_game = {};
}
}
}
QStandardItem* name_item = new PlayerListItem(member.nickname, member.username, QStandardItem* name_item = new PlayerListItem(member.nickname, member.username,
member.avatar_url, member.game_info); member.avatar_url, member_game);
// Determine the Status Dot logic // Determine the Status Dot logic
QString status_dot = QStringLiteral(""); QString status_dot = QStringLiteral("");
if (!member.game_info.name.empty() && !local_game_info.name.empty()) { if (!member_game.name.empty() && !local_game_info.name.empty()) {
if (member.game_info.name == local_game_info.name) { if (member_game.name == local_game_info.name) {
if (member.game_info.version == local_game_info.version) { if (member_game.version == local_game_info.version) {
status_dot = QStringLiteral("🟢"); status_dot = QStringLiteral("🟢");
} else { } else {
status_dot = QStringLiteral("🟡"); status_dot = QStringLiteral("🟡");