Match editable roles to the same owner version read from SQLite
This commit is contained in:
1 parent
bc5e6aa5a5
commit
b78fd7a8e6
2 files changed
+11
-6
No files matched your search
@@ -57,6 +57,9 @@ MemberPropsDialog::MemberPropsDialog(DbManager* db, const QString& channelId,
|
||||
if (rc == SQLITE_OK) rc = sqlite3_step(st);
|
||||
if (rc == SQLITE_ROW) {
|
||||
const QJsonObject tags = QJsonDocument::fromJson(DbManager::colText(st, 0).toUtf8()).object();
|
||||
const QString adminHistory = tags.value("admin").toString();
|
||||
isAdmin = adminHistory.lastIndexOf('e') > adminHistory.lastIndexOf('d');
|
||||
isSuper = tags.value("supernode").toString() == "yes";
|
||||
m_currentVer = tags.value("ver").toString().toInt();
|
||||
curVerified = tags.value("verified").toString() == "yes";
|
||||
curDeleted = tags.value("deleted").toString() == "yes";
|
||||
@@ -163,13 +166,15 @@ MemberPropsDialog::MemberPropsDialog(DbManager* db, const QString& channelId,
|
||||
btnLayout->addWidget(saveBtn);
|
||||
|
||||
layout->addLayout(btnLayout);
|
||||
setSaving(false);
|
||||
connect(this, &QDialog::finished, this, [this] { delete m_saveContext; m_saveContext = nullptr; setSaving(false); });
|
||||
}
|
||||
|
||||
void MemberPropsDialog::setSaving(bool saving) {
|
||||
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);
|
||||
m_saveBtn->setEnabled(m_loaded && !saving); m_nickEdit->setEnabled(m_loaded && !saving && !m_isOwn);
|
||||
for (auto* box : {m_adminCb, m_superCb, m_storageCb, m_verifiedCb, m_deletedCb})
|
||||
box->setEnabled(m_loaded && !saving && m_haveAdminKey);
|
||||
m_transferBtn->setEnabled(m_loaded && !saving && m_haveAdminKey && !m_isOwn);
|
||||
}
|
||||
|
||||
void MemberPropsDialog::finishSave(int result) {
|
||||
@@ -199,7 +204,7 @@ void MemberPropsDialog::onSave() {
|
||||
}
|
||||
|
||||
void MemberPropsDialog::onTransferAdmin() {
|
||||
if (!m_haveAdminKey || m_isOwn || m_saveContext) return;
|
||||
if (!m_loaded || !m_haveAdminKey || m_isOwn || m_saveContext) return;
|
||||
|
||||
QPointer<MemberPropsDialog> alive(this);
|
||||
QString name = m_memberName.isEmpty() ? QString("0x%1").arg(m_nodeId, 16, 16, QChar('0')) : m_memberName;
|
||||
|
||||
@@ -18,7 +18,7 @@ class MemberPropsDialog : public QDialog {
|
||||
Q_OBJECT
|
||||
public:
|
||||
/* db заимствован через QPointer, parent владеет диалогом; channelId/nodeId фиксируют адресата.
|
||||
* memberName/flags — начальный снимок отображения, JSON/ver и локальный ник читаются из БД. */
|
||||
* memberName/flags — начальный снимок отображения; актуальные права, JSON/ver и локальный ник читаются из БД. */
|
||||
explicit MemberPropsDialog(DbManager* db, const QString& channelId,
|
||||
uint64_t nodeId, const QString& memberName,
|
||||
uint8_t flags, QWidget* parent = nullptr);
|
||||
@@ -35,7 +35,7 @@ private:
|
||||
uint64_t m_nodeId; // Адресат сохранения/передачи ключа.
|
||||
bool m_haveAdminKey = false; // На момент открытия БД содержала ключ; ядро проверяет полномочия заново.
|
||||
bool m_isOwn = false; // Собственный ник не редактируется, передача ключа себе запрещена.
|
||||
uint8_t m_flags; // Исходные флаги для admin/super checkboxes.
|
||||
uint8_t m_flags; // Резервные флаги отображения при неудачном чтении; такую форму сохранять нельзя.
|
||||
int m_currentVer; // Версия owner-блока при открытии: предотвращает перезапись устаревшей формой.
|
||||
QString m_memberName; // Имя в предупреждении о передаче ключа.
|
||||
|
||||
|
||||
Reference in new issue
Block a user