diff --git a/tools/chatgui/src/memberpropsdialog.cpp b/tools/chatgui/src/memberpropsdialog.cpp index 89183d63a..00aa3ba49 100644 --- a/tools/chatgui/src/memberpropsdialog.cpp +++ b/tools/chatgui/src/memberpropsdialog.cpp @@ -32,7 +32,7 @@ MemberPropsDialog::MemberPropsDialog(DbManager* db, const QString& channelId, setModal(true); /* channel private key (for enabling admin/super checkboxes) */ - auto chs = m_db ? m_db->getChannels() : QList(); + auto chs = m_db && m_db->m_db ? m_db->getChannels() : QList(); for (const auto& ch : chs) { if (ch.channelId == channelId) { m_haveAdminKey = ch.ed25519_privkey.size() == 32; @@ -154,6 +154,7 @@ MemberPropsDialog::MemberPropsDialog(DbManager* db, const QString& channelId, auto* saveBtn = new QPushButton(QCoreApplication::translate("ChatGui", "Save"), this); m_saveBtn = saveBtn; + m_loaded = loaded; m_saveBtn->setEnabled(m_loaded); saveBtn->setMinimumWidth(90); saveBtn->setDefault(true); saveBtn->setStyleSheet( @@ -170,7 +171,7 @@ MemberPropsDialog::MemberPropsDialog(DbManager* db, const QString& channelId, } void MemberPropsDialog::setSaving(bool saving) { - m_saveBtn->setEnabled(!saving); m_nickEdit->setEnabled(!saving && !m_isOwn); + m_saveBtn->setEnabled(m_loaded && !saving); m_nickEdit->setEnabled(!saving && !m_isOwn); for (auto* box : {m_adminCb, m_superCb, m_storageCb, m_verifiedCb, m_deletedCb}) box->setEnabled(!saving && m_haveAdminKey); m_transferBtn->setEnabled(!saving && m_haveAdminKey && !m_isOwn); } @@ -185,6 +186,7 @@ void MemberPropsDialog::finishSave(int result) { void MemberPropsDialog::onSave() { if (m_saveContext) return; + if (!m_loaded) { finishSave(-1); return; } int ver = m_currentVer; QString json; json += QString("{\"ver\":\"%1\"").arg(ver); diff --git a/tools/chatgui/src/memberpropsdialog.h b/tools/chatgui/src/memberpropsdialog.h index c8e56cbbe..2a665e7bc 100644 --- a/tools/chatgui/src/memberpropsdialog.h +++ b/tools/chatgui/src/memberpropsdialog.h @@ -49,4 +49,5 @@ private: QPushButton* m_saveBtn; // Отключена во время записи. QLabel* m_errorLabel; // Ошибка без технических подробностей; причина остаётся в логе. QObject* m_saveContext = nullptr; // Собственный context запроса; уничтожение снимает callback в мосте. + bool m_loaded = false; // Начальный SQL-снимок прочитан; иначе Save заблокирован. };