@ -94,9 +94,11 @@ 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 dur = parseJsonFieldNum ( data , " dur " ) ;
QString raw = parseJsonField ( data , " d " ) ;
int pipe = raw . indexOf ( ' | ' ) ;
QString fname = pipe > = 0 ? raw . left ( pipe ) : raw ;
QString dur = pipe > = 0 ? raw . mid ( pipe + 1 ) : QString ( ) ;
if ( ! dur . isEmpty ( ) ) item - > setData ( dur + " s " , MsgVoiceDurationRole ) ;
if ( ! dur . isEmpty ( ) ) item - > setData ( dur + " s " , MsgVoiceDurationRole ) ;
QString fname = parseJsonField ( data , " d " ) ;
if ( ! fname . isEmpty ( ) ) {
if ( ! fname . isEmpty ( ) ) {
QString fullPath = mediaDirBase + " / " + channelId + " / " + fname ;
QString fullPath = mediaDirBase + " / " + channelId + " / " + fname ;
item - > setData ( fullPath , MsgVoiceFileRole ) ;
item - > setData ( fullPath , MsgVoiceFileRole ) ;
@ -197,13 +199,8 @@ MessageList::MessageList(DbManager* db, AudioRecorder* recorder, QWidget *parent
QFileInfo fi ( filePath ) ;
QFileInfo fi ( filePath ) ;
QString fileName = fi . fileName ( ) ;
QString fileName = fi . fileName ( ) ;
QString jsonData = QString ( " { \" n \" :%1, \" ch \" : \" %2 \" , \" ct \" : \" audio/opus \" , \" d \" : \" %3 \" , \" dur \" :%4} " )
QByteArray textData = ( fileName + " | " +
. arg ( m_db ? m_db - > myNodeId ( ) : 0 )
QString : : number ( durationMs / 1000.0 , ' f ' , 1 ) ) . toUtf8 ( ) ;
. arg ( m_currentChannelId )
. arg ( fileName )
. arg ( durationMs / 1000.0 , 0 , ' f ' , 1 ) ;
QByteArray textData = jsonData . toUtf8 ( ) ;
auto ts = QDateTime : : currentMSecsSinceEpoch ( ) ;
auto ts = QDateTime : : currentMSecsSinceEpoch ( ) ;
struct chat_msg_submit * req = ( struct chat_msg_submit * )
struct chat_msg_submit * req = ( struct chat_msg_submit * )