From 6d3187db5721b7b2916fb18327151786068b5ca3 Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 6 Oct 2026 12:56:20 +0200 Subject: [PATCH] Keep profile controls consistent with the saved avatar server --- tools/chatgui/src/avatars/avatarmanager.cpp | 5 +++-- tools/chatgui/src/avatars/avatarmanager.h | 2 ++ tools/chatgui/src/settingsdialog.cpp | 7 ++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/tools/chatgui/src/avatars/avatarmanager.cpp b/tools/chatgui/src/avatars/avatarmanager.cpp index 87e18f2b..9ba90734 100644 --- a/tools/chatgui/src/avatars/avatarmanager.cpp +++ b/tools/chatgui/src/avatars/avatarmanager.cpp @@ -52,8 +52,9 @@ void AvatarManager::initialize() { m_defaultConfigured = !desired.isEmpty(); if (desired != "-" && !desired.isEmpty()) { const auto parts = desired.split('/'); - if (parts.size() == 2 && mf_avatar_file_valid(parts[1].toLatin1().constData())) { - m_defaultServer = parts[0].toULongLong(nullptr, 16); m_defaultHash = parts[1].left(64); + bool valid = false; quint64 server = parts[0].toULongLong(&valid, 16); + if (parts.size() == 2 && valid && server && mf_avatar_file_valid(parts[1].toLatin1().constData())) { + m_defaultServer = server; m_defaultHash = parts[1].left(64); } else { DEBUG_WARN(DEBUG_CATEGORY_MEDIA, "avatar: invalid saved default reference"); m_defaultConfigured = false; } diff --git a/tools/chatgui/src/avatars/avatarmanager.h b/tools/chatgui/src/avatars/avatarmanager.h index bd3111b6..c702908b 100644 --- a/tools/chatgui/src/avatars/avatarmanager.h +++ b/tools/chatgui/src/avatars/avatarmanager.h @@ -29,6 +29,8 @@ public: void uploadDefault(const QString& source, quint64 server); void clearDefault(); QImage defaultImage() const; + quint64 defaultServer() const { return m_defaultServer; } + bool ready() const { return m_ready; } signals: void changed(const QString& channel, quint64 owner); void serversChanged(); diff --git a/tools/chatgui/src/settingsdialog.cpp b/tools/chatgui/src/settingsdialog.cpp index d1eaa8a8..b0be30d4 100644 --- a/tools/chatgui/src/settingsdialog.cpp +++ b/tools/chatgui/src/settingsdialog.cpp @@ -101,13 +101,14 @@ SettingsDialog::SettingsDialog(const QString& configPath, DbManager* db, UtunNod note->setWordWrap(true); box->addWidget(preview); box->addWidget(server); buttons->addWidget(upload); buttons->addWidget(clear); box->addLayout(buttons); box->addWidget(status); box->addWidget(note); profLayout->addRow(QCoreApplication::translate("ChatGui", "Avatar:"), controls); - auto update = [avatars, server, preview, upload] { - const quint64 selected = server->currentData().toULongLong(); server->clear(); + auto update = [avatars, server, preview, upload, clear] { + const quint64 selected = server->count() ? server->currentData().toULongLong() : avatars->defaultServer(); server->clear(); const auto servers = avatars->servers(); for (auto it = servers.begin(); it != servers.end(); ++it) server->addItem(QString("%1 ยท %2").arg(it.value(), QString::number(it.key(), 16)), QVariant::fromValue(it.key())); int index = server->findData(QVariant::fromValue(selected)); if (index >= 0) server->setCurrentIndex(index); - upload->setEnabled(server->count() && gui_bridge_is_uasync_ready()); + upload->setEnabled(avatars->ready() && server->count() && gui_bridge_is_uasync_ready()); + clear->setEnabled(avatars->ready() && gui_bridge_is_uasync_ready()); const QImage image = avatars->defaultImage(); preview->setPixmap(image.isNull() ? QPixmap() : QPixmap::fromImage(image).scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); if (image.isNull()) preview->setText(QCoreApplication::translate("ChatGui", "No avatar"));