@ -93,6 +93,16 @@ static QString contentTypeFromJson(const QByteArray& data) {
static void setVoiceMessageRoles ( QStandardItem * item , const QByteArray & data ,
static void setVoiceMessageRoles ( QStandardItem * item , const QByteArray & data ,
const QString & contentType , const QString & mediaDirBase ,
const QString & contentType , const QString & mediaDirBase ,
const QString & channelId , const QByteArray & localAttrs ) {
const QString & channelId , const QByteArray & localAttrs ) {
QByteArray body = data ;
if ( body . startsWith ( ' * ' ) ) {
int pipePos = body . indexOf ( ' | ' ) ;
if ( pipePos > 1 ) {
QByteArray b64 = body . mid ( 1 , pipePos - 1 ) ;
b64 . replace ( ' - ' , ' + ' ) ;
b64 . replace ( ' _ ' , ' / ' ) ;
body = QByteArray : : fromBase64 ( b64 ) + body . mid ( pipePos ) ;
}
}
QString ct = contentType ;
QString ct = contentType ;
if ( ct . isEmpty ( ) ) ct = contentTypeFromJson ( data ) ;
if ( ct . isEmpty ( ) ) ct = contentTypeFromJson ( data ) ;
if ( ct . isEmpty ( ) ) ct = " text/plain " ;
if ( ct . isEmpty ( ) ) ct = " text/plain " ;
@ -100,7 +110,7 @@ static void setVoiceMessageRoles(QStandardItem* item, const QByteArray& data,
item - > setData ( channelId , MsgChannelIdRole ) ;
item - > setData ( channelId , MsgChannelIdRole ) ;
if ( ct = = " audio/opus " ) {
if ( ct = = " audio/opus " ) {
QString raw = QString : : fromUtf8 ( data ) ;
QString raw = QString : : fromUtf8 ( body ) ;
if ( raw . startsWith ( ' { ' ) ) return ;
if ( raw . startsWith ( ' { ' ) ) return ;
/* unified format: wf={base64};dur={ms};|{file_size}|{block_size}|{num_blocks}|{sigs} */
/* unified format: wf={base64};dur={ms};|{file_size}|{block_size}|{num_blocks}|{sigs} */
@ -161,7 +171,7 @@ static void setVoiceMessageRoles(QStandardItem* item, const QByteArray& data,
}
}
}
}
if ( ct = = " application/octet-stream " ) {
if ( ct = = " application/octet-stream " ) {
QString raw = QString : : fromUtf8 ( data ) ;
QString raw = QString : : fromUtf8 ( body ) ;
int pipePos = raw . indexOf ( ' | ' ) ;
int pipePos = raw . indexOf ( ' | ' ) ;
QString fname = ( pipePos > 0 ) ? raw . left ( pipePos ) : raw ;
QString fname = ( pipePos > 0 ) ? raw . left ( pipePos ) : raw ;
item - > setData ( fname , MsgFileDisplayNameRole ) ;
item - > setData ( fname , MsgFileDisplayNameRole ) ;