etcp: переупорядочить close + защита state==2 во всех API-точках; topo: правильная очистка group nodes и registry; chat/member: новый модуль member_sync; chatgui: обновления транспорта и UI
This commit is contained in:
1 parent
b2e4aadbf0
commit
7f901c01e1
38 files changed
+1275
-540
No files matched your search
@@ -258,50 +258,6 @@ MessageRow DbManager::getMessageById(const QString& chId, qint64 msgId) const {
|
||||
|
||||
/* ── peers (UI) ── */
|
||||
|
||||
int DbManager::getChannelMemberCount(const QString& chId) const {
|
||||
QString sql = QStringLiteral("SELECT COUNT(*) FROM \"%1\"").arg(peersTableName(chId));
|
||||
sqlite3_stmt* stmt = prepareOrNull(sql.toUtf8().constData());
|
||||
if (!stmt) return 0;
|
||||
int c = 0;
|
||||
if (sqlite3_step(stmt) == SQLITE_ROW) c = sqlite3_column_int(stmt, 0);
|
||||
sqlite3_finalize(stmt);
|
||||
return c;
|
||||
}
|
||||
|
||||
QList<ChannelMember> DbManager::getChannelMembers(const QString& chId, int offset, int limit) const {
|
||||
QList<ChannelMember> list;
|
||||
QString sql = QStringLiteral(
|
||||
"SELECT p.node_id, COALESCE(n.online,0), COALESCE(n.name,''), COALESCE(p.local_nick,''), COALESCE(p.adm_tags,'')"
|
||||
" FROM \"%1\" p LEFT JOIN nodes n ON p.node_id=n.node_id"
|
||||
" ORDER BY n.online DESC, p.node_id ASC LIMIT ? OFFSET ?"
|
||||
).arg(peersTableName(chId));
|
||||
sqlite3_stmt* stmt = prepareOrNull(sql.toUtf8().constData());
|
||||
if (!stmt) return list;
|
||||
sqlite3_bind_int(stmt, 1, limit);
|
||||
sqlite3_bind_int(stmt, 2, offset);
|
||||
while (sqlite3_step(stmt) == SQLITE_ROW) {
|
||||
ChannelMember m;
|
||||
m.nodeId = (quint64)sqlite3_column_int64(stmt, 0);
|
||||
m.online = sqlite3_column_int(stmt, 1) != 0;
|
||||
m.name = colText(stmt, 2);
|
||||
m.localNick = colText(stmt, 3);
|
||||
m.admTags = colText(stmt, 4);
|
||||
m.flags = 0;
|
||||
const QByteArray at = m.admTags.toUtf8();
|
||||
const char* tags = at.constData();
|
||||
if (tags && tags[0]) {
|
||||
if (strstr(tags, "\"supernode\":\"yes\"")) m.flags |= 0x01;
|
||||
const char* ap = strstr(tags, "\"admin\":\"");
|
||||
if (ap) { ap += 8; const char* last = ap; while (*last && *last != '"') { if (*last == 'e' || *last == 'd') ap = last; last++; } if (*ap == 'e') m.flags |= 0x02; }
|
||||
const char* mp = strstr(tags, "\"moder\":\"");
|
||||
if (mp) { mp += 8; const char* last = mp; while (*last && *last != '"') { if (*last == 'e' || *last == 'd') mp = last; last++; } if (*mp == 'e') m.flags |= 0x04; }
|
||||
}
|
||||
list.append(m);
|
||||
}
|
||||
sqlite3_finalize(stmt);
|
||||
return list;
|
||||
}
|
||||
|
||||
QMap<quint64, QString> DbManager::getLocalNicknames(const QString& chId) const {
|
||||
QMap<quint64, QString> m;
|
||||
if (!m_db) return m;
|
||||
|
||||
Reference in new issue
Block a user