Fix received message time order by setting received time only if new message.

This commit is contained in:
Julien Wadel 2023-05-22 15:29:32 +02:00
parent c07eaa23ec
commit 4764bb6cbe
4 changed files with 10 additions and 10 deletions

View file

@ -90,7 +90,7 @@ ChatMessageModel::ChatMessageModel ( std::shared_ptr<linphone::ChatMessage> chat
mContent = txt;
mTimestamp = QDateTime::fromMSecsSinceEpoch(chatMessage->getTime() * 1000);
mReceivedTimestamp = ChatMessageModel::initReceivedTimestamp(chatMessage);
mReceivedTimestamp = ChatMessageModel::initReceivedTimestamp(chatMessage, false);
}
mWasDownloaded = false;
@ -250,10 +250,10 @@ void ChatMessageModel::updateFileTransferInformation(){
mContentListModel->updateContents(this);
}
QDateTime ChatMessageModel::initReceivedTimestamp(const std::shared_ptr<linphone::ChatMessage> &message){
QDateTime ChatMessageModel::initReceivedTimestamp(const std::shared_ptr<linphone::ChatMessage> &message, bool isNew){
auto appdata = ChatEvent::AppDataManager(QString::fromStdString(message->getAppdata()));
if(!appdata.mData.contains("receivedTime")){// Already set : Do not overwrite.
appdata.mData["receivedTime"] = QString::number(QDateTime::currentMSecsSinceEpoch());
appdata.mData["receivedTime"] = QString::number(isNew ? QDateTime::currentMSecsSinceEpoch() : message->getTime()*1000);
qDebug() << "New message received at " << QDateTime::fromMSecsSinceEpoch(appdata.mData["receivedTime"].toLongLong()).toString("yyyy/MM/dd hh:mm:ss.zzz");
message->setAppdata(Utils::appStringToCoreString(appdata.toString()));
}

View file

@ -113,7 +113,7 @@ public:
virtual void deleteEvent() override;
void updateFileTransferInformation();
static QDateTime initReceivedTimestamp(const std::shared_ptr<linphone::ChatMessage> &message); // return received timestamp
static QDateTime initReceivedTimestamp(const std::shared_ptr<linphone::ChatMessage> &message, bool isNew); // return received timestamp
// Linphone callbacks
void onFileTransferRecv(const std::shared_ptr<linphone::ChatMessage> & message, const std::shared_ptr<linphone::Content> & content, const std::shared_ptr<const linphone::Buffer> & buffer) ;

View file

@ -1288,14 +1288,14 @@ void ChatRoomModel::onIsComposingReceived(const std::shared_ptr<linphone::ChatRo
}
void ChatRoomModel::onMessageReceived(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<linphone::ChatMessage> & message){
if(message) ChatMessageModel::initReceivedTimestamp(message);
if(message) ChatMessageModel::initReceivedTimestamp(message, true);
setUnreadMessagesCount(chatRoom->getUnreadMessagesCount());
updateLastUpdateTime();
}
void ChatRoomModel::onMessagesReceived(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::list<std::shared_ptr<linphone::ChatMessage>> & messages){
for(auto message : messages)
if(message) ChatMessageModel::initReceivedTimestamp(message);
if(message) ChatMessageModel::initReceivedTimestamp(message, true);
setUnreadMessagesCount(chatRoom->getUnreadMessagesCount());
updateLastUpdateTime();
}
@ -1332,7 +1332,7 @@ void ChatRoomModel::onNewEvents(const std::shared_ptr<linphone::ChatRoom> & chat
void ChatRoomModel::onChatMessageReceived(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) {
auto message = eventLog->getChatMessage();
if(message){
ChatMessageModel::initReceivedTimestamp(message);
ChatMessageModel::initReceivedTimestamp(message, true);
insertMessageAtEnd(message);
updateLastUpdateTime();
emit messageReceived(message);
@ -1343,7 +1343,7 @@ void ChatRoomModel::onChatMessagesReceived(const std::shared_ptr<linphone::ChatR
for(auto eventLog : eventLogs){
auto message = eventLog->getChatMessage();
if(message){
ChatMessageModel::initReceivedTimestamp(message);
ChatMessageModel::initReceivedTimestamp(message, true);
insertMessageAtEnd(message);
updateLastUpdateTime();
emit messageReceived(message);
@ -1354,7 +1354,7 @@ void ChatRoomModel::onChatMessagesReceived(const std::shared_ptr<linphone::ChatR
void ChatRoomModel::onChatMessageSending(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog){
auto message = eventLog->getChatMessage();
if(message){
ChatMessageModel::initReceivedTimestamp(message);
ChatMessageModel::initReceivedTimestamp(message, true);
insertMessageAtEnd(message);
updateLastUpdateTime();
emit messageReceived(message);

View file

@ -268,7 +268,7 @@ void CoreHandlers::onMessagesReceived (
appSettings.beginGroup("chatrooms");
for(auto message : messages){
if(message) ChatMessageModel::initReceivedTimestamp(message);
if(message) ChatMessageModel::initReceivedTimestamp(message, true);
if( !message || message->isOutgoing() )
continue;
// 1. Do not notify if chat is not activated.