Browse Source

fix: voice message display and playback — complete flow

- db_manager: getMessagesSince() now parses m.contentType from JSON (was missing)
- messagelist: setVoiceMessageRoles uses data directly as payload, not re-parsed as JSON
  (data is already the 'd' field value extracted by db_manager)
topo_upd
Evgeny 2 months ago
parent
commit
324d285145
  1. 2
      tools/chatgui/db/db_manager.cpp
  2. 2
      tools/chatgui/src/messagelist.cpp

2
tools/chatgui/db/db_manager.cpp

@ -212,6 +212,8 @@ QList<MessageRow> DbManager::getMessagesSince(const QString& chId, qint64 sinceI
m.id = sqlite3_column_int64(stmt, 0); m.id = sqlite3_column_int64(stmt, 0);
m.authorNodeId = (quint64)sqlite3_column_int64(stmt, 1); m.authorNodeId = (quint64)sqlite3_column_int64(stmt, 1);
QByteArray jdata = colBlob(stmt, 2); QByteArray jdata = colBlob(stmt, 2);
m.contentType = QString::fromUtf8(parseJsonField(jdata, "ct"));
if (m.contentType.isEmpty()) m.contentType = "text/plain";
m.data = parseJsonField(jdata, "d"); m.data = parseJsonField(jdata, "d");
m.timestamp = sqlite3_column_int64(stmt, 3); m.timestamp = sqlite3_column_int64(stmt, 3);
m.datahash = 0; m.datahash = 0;

2
tools/chatgui/src/messagelist.cpp

@ -94,7 +94,7 @@ static void setVoiceMessageRoles(QStandardItem* item, const QByteArray& data,
item->setData(ct, MsgContentTypeRole); item->setData(ct, MsgContentTypeRole);
if (ct == "audio/opus") { if (ct == "audio/opus") {
QString raw = parseJsonField(data, "d"); QString raw = QString::fromUtf8(data);
int pipe = raw.indexOf('|'); int pipe = raw.indexOf('|');
QString fname = pipe >= 0 ? raw.left(pipe) : raw; QString fname = pipe >= 0 ? raw.left(pipe) : raw;
QString dur = pipe >= 0 ? raw.mid(pipe + 1) : QString(); QString dur = pipe >= 0 ? raw.mid(pipe + 1) : QString();

Loading…
Cancel
Save