Read member edit capabilities and fields in one GUI snapshot

This commit is contained in:
evgeny committed 2026-10-28 00:58:59 +01:00
1 parent 84bf74e034
commit 8f02e1ec2d
1 file changed
+7 -11
+7 -11
View File
@@ -31,15 +31,6 @@ MemberPropsDialog::MemberPropsDialog(DbManager* db, const QString& channelId,
setMinimumWidth(340);
setModal(true);
/* channel private key (for enabling admin/super checkboxes) */
auto chs = m_db && m_db->m_db ? m_db->getChannels() : QList<ChannelRow>();
for (const auto& ch : chs) {
if (ch.channelId == channelId) {
m_haveAdminKey = ch.ed25519_privkey.size() == 32;
break;
}
}
bool haveKey = m_haveAdminKey;
bool isOwn = m_isOwn = m_db && m_nodeId == (uint64_t)m_db->myNodeId();
bool isAdmin = (m_flags & CHAT_MEMBER_FLAG_ADMIN) != 0;
@@ -55,11 +46,14 @@ MemberPropsDialog::MemberPropsDialog(DbManager* db, const QString& channelId,
if (m_db && m_db->m_db) {
QString tbl = m_db->peersTableName(channelId);
QByteArray sql = QString(
"SELECT adm_tags, local_nick FROM \"%1\" WHERE node_id=?"
"SELECT p.adm_tags,p.local_nick,length(c.ed25519_privkey) FROM \"%1\" p "
"JOIN channels c ON c.channel_id=? WHERE p.node_id=?"
).arg(tbl).toUtf8();
sqlite3_stmt* st = nullptr;
int rc = sqlite3_prepare_v2(m_db->m_db, sql.constData(), -1, &st, nullptr);
if (rc == SQLITE_OK) rc = sqlite3_bind_int64(st, 1, (sqlite3_int64)nodeId);
const QByteArray channel = channelId.toUtf8();
if (rc == SQLITE_OK) rc = sqlite3_bind_text(st, 1, channel.constData(), channel.size(), SQLITE_STATIC);
if (rc == SQLITE_OK) rc = sqlite3_bind_int64(st, 2, (sqlite3_int64)nodeId);
if (rc == SQLITE_OK) rc = sqlite3_step(st);
if (rc == SQLITE_ROW) {
const QJsonObject tags = QJsonDocument::fromJson(DbManager::colText(st, 0).toUtf8()).object();
@@ -68,6 +62,7 @@ MemberPropsDialog::MemberPropsDialog(DbManager* db, const QString& channelId,
curDeleted = tags.value("deleted").toString() == "yes";
curStorage = tags.value("storage").toString() == "yes";
curNick = DbManager::colText(st, 1);
m_haveAdminKey = sqlite3_column_int(st, 2) == 32;
}
int finish = sqlite3_finalize(st); loaded = rc == SQLITE_ROW && finish == SQLITE_OK;
if (!loaded) DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "member properties: read ch=%s node=%016llx rc=%d finalize=%d: %s",
@@ -75,6 +70,7 @@ MemberPropsDialog::MemberPropsDialog(DbManager* db, const QString& channelId,
} else {
DEBUG_WARN(DEBUG_CATEGORY_CHAT_SYNC, "member properties: database unavailable at open");
}
const bool haveKey = m_haveAdminKey;
auto* layout = new QVBoxLayout(this);
layout->setSpacing(12);