diff --git a/tools/chatgui/db/db_manager.cpp b/tools/chatgui/db/db_manager.cpp index 6b23dee0..02c39562 100644 --- a/tools/chatgui/db/db_manager.cpp +++ b/tools/chatgui/db/db_manager.cpp @@ -144,6 +144,17 @@ QList DbManager::getChannels(ChannelSortMode sort) const { return list; } +bool DbManager::isChannelMember(const QString& chId, quint64 nodeId) const { + const QByteArray sql = QStringLiteral("SELECT 1 FROM \"%1\" WHERE node_id=?").arg(peersTableName(chId)).toUtf8(); + sqlite3_stmt* statement = prepareOrNull(sql.constData()); + if (!statement) return false; + sqlite3_bind_int64(statement, 1, (sqlite3_int64)nodeId); + const int result = sqlite3_step(statement); + if (result != SQLITE_ROW && result != SQLITE_DONE) GUI_ERROR("channel membership read failed ch=%s rc=%d", qPrintable(chId), result); + sqlite3_finalize(statement); + return result == SQLITE_ROW; +} + /* Формирует человекочитаемое тело превью последнего сообщения по content_type и "d"-полю. */ static QString mediaPreviewBody(const QString& ct, const QByteArray& d) { bool isText = ct.isEmpty() || ct == QStringLiteral("text/plain") || diff --git a/tools/chatgui/db/db_manager.h b/tools/chatgui/db/db_manager.h index 230326dc..da73f76f 100644 --- a/tools/chatgui/db/db_manager.h +++ b/tools/chatgui/db/db_manager.h @@ -113,6 +113,7 @@ public: void cleanOrphanedPeers(const QString& chId) const; QString getDisplayName(quint64 nodeId) const; QMap getLocalNicknames(const QString& chId) const; + bool isChannelMember(const QString& chId, quint64 nodeId) const; /* ── Узлы ── */ QByteArray loadNodeInfo(quint64 nodeId) const;