call: P2P аудиозвонки — сигналинг, релей медиа, аудио-контур, headless/desktop/android
- src/call/: сигналинг (call.c, call_proto.h, ETCP_RT_ID_CALL 0x36) + релей медиа + headless аудио-сокет (call_headless.c, call_audio_bind) + Opus/jitter/тоны - chat: события CHAT_EVT_CALL_* (34–40), CHAT_EVT_DM_MESSAGES (41), DM-трамплины - chatgui: call window, miniaudio I/O, audio_frame_ring, test_audio_jitter - chatgui-android: CallScreen/IncomingCallDialog, аудио-роутинг, JNI, рингтон - tests: test_call, test_call_headless
This commit is contained in:
1 parent
0157f7f96b
commit
b11e77e4c0
78 files changed
+7053
-70
No files matched your search
@@ -302,6 +302,29 @@ MessageRow DbManager::getMessageById(const QString& chId, qint64 msgId) const {
|
||||
return m;
|
||||
}
|
||||
|
||||
/* ── DM-беседы (UI, read-only) ── */
|
||||
|
||||
QList<DmConversation> DbManager::getDmConversations() const {
|
||||
QList<DmConversation> list;
|
||||
if (!m_db) return list;
|
||||
sqlite3_stmt* stmt = prepareOrNull(
|
||||
"SELECT conv_id, peer_node_id, COALESCE(peer_name,''), last_ts, last_out_seq, last_in_seq"
|
||||
" FROM dm_conversations ORDER BY last_ts DESC");
|
||||
if (!stmt) return list;
|
||||
while (sqlite3_step(stmt) == SQLITE_ROW) {
|
||||
DmConversation c;
|
||||
c.convId = colText(stmt, 0);
|
||||
c.peerNodeId = (quint64)sqlite3_column_int64(stmt, 1);
|
||||
c.peerName = colText(stmt, 2);
|
||||
c.lastTs = sqlite3_column_int64(stmt, 3);
|
||||
c.lastOutSeq = sqlite3_column_int64(stmt, 4);
|
||||
c.lastInSeq = sqlite3_column_int64(stmt, 5);
|
||||
list.append(c);
|
||||
}
|
||||
sqlite3_finalize(stmt);
|
||||
return list;
|
||||
}
|
||||
|
||||
/* ── peers (UI) ── */
|
||||
|
||||
QMap<quint64, QString> DbManager::getLocalNicknames(const QString& chId) const {
|
||||
|
||||
Reference in new issue
Block a user