Merge branch 'fix/6.1' into 'release/6.1'

fix bold text part searched in chatroom

See merge request BC/public/linphone-desktop!1648
This commit is contained in:
Gaëlle Braud 2026-01-18 12:07:08 +00:00
commit 344b4b4bb0
12 changed files with 214 additions and 240 deletions

View file

@ -64,7 +64,13 @@ ChatMessageContentCore::ChatMessageContentCore(const std::shared_ptr<linphone::C
mFileOffset = 0;
mUtf8Text = Utils::coreStringToAppString(content->getUtf8Text());
auto chatRoom = chatMessageModel ? chatMessageModel->getMonitor()->getChatRoom() : nullptr;
mRichFormatText = ToolModel::encodeTextToQmlRichFormat(mUtf8Text, {}, chatRoom);
mRichFormatText = ToolModel::encodeTextToQmlRichFormat(mUtf8Text, mSearchedTextPart, {}, chatRoom);
connect(this, &ChatMessageContentCore::searchedTextPartChanged, this, [this] {
auto chatroom = mChatMessageContentModel->getChatMessageModel()
? mChatMessageContentModel->getChatMessageModel()->getMonitor()->getChatRoom()
: nullptr;
setRichFormatText(ToolModel::encodeTextToQmlRichFormat(mUtf8Text, mSearchedTextPart, {}, chatroom));
});
mWasDownloaded = !mFilePath.isEmpty() && QFileInfo(mFilePath).isFile();
mThumbnail = mFilePath.isEmpty()
? QUrl()
@ -246,10 +252,6 @@ ConferenceInfoGui *ChatMessageContentCore::getConferenceInfoGui() const {
return mConferenceInfo ? new ConferenceInfoGui(mConferenceInfo) : nullptr;
}
bool ChatMessageContentCore::wasDownloaded() const {
return mWasDownloaded;
}
QUrl ChatMessageContentCore::getThumbnail() const {
return mThumbnail;
}
@ -260,6 +262,10 @@ void ChatMessageContentCore::setThumbnail(const QUrl &data) {
emit thumbnailChanged();
}
}
bool ChatMessageContentCore::wasDownloaded() const {
return mWasDownloaded;
}
void ChatMessageContentCore::setWasDownloaded(bool wasDownloaded) {
if (mWasDownloaded != wasDownloaded) {
mWasDownloaded = wasDownloaded;
@ -267,6 +273,24 @@ void ChatMessageContentCore::setWasDownloaded(bool wasDownloaded) {
}
}
void ChatMessageContentCore::setRichFormatText(const QString &richFormatText) {
if (mRichFormatText != richFormatText) {
mRichFormatText = richFormatText;
emit richFormatTextChanged();
}
}
void ChatMessageContentCore::setSearchedTextPart(const QString &searchedTextPart) {
if (mSearchedTextPart != searchedTextPart) {
mSearchedTextPart = searchedTextPart;
emit searchedTextPartChanged();
}
}
QString ChatMessageContentCore::getSearchedTextPart() const {
return mSearchedTextPart;
}
const std::shared_ptr<ChatMessageContentModel> &ChatMessageContentCore::getContentModel() const {
return mChatMessageContentModel;
}

View file

@ -40,7 +40,8 @@ class ChatMessageContentCore : public QObject, public AbstractObject {
Q_PROPERTY(bool wasDownloaded READ wasDownloaded WRITE setWasDownloaded NOTIFY wasDownloadedChanged)
Q_PROPERTY(QString filePath READ getFilePath WRITE setFilePath NOTIFY filePathChanged)
Q_PROPERTY(QString utf8Text READ getUtf8Text CONSTANT)
Q_PROPERTY(QString richFormatText MEMBER mRichFormatText CONSTANT)
Q_PROPERTY(QString richFormatText WRITE setRichFormatText MEMBER mRichFormatText NOTIFY richFormatTextChanged)
Q_PROPERTY(QString searchTextPart READ getSearchedTextPart WRITE setSearchedTextPart NOTIFY searchedTextPartChanged)
Q_PROPERTY(bool isFile READ isFile WRITE setIsFile NOTIFY isFileChanged)
Q_PROPERTY(bool isFileEncrypted READ isFileEncrypted WRITE setIsFileEncrypted NOTIFY isFileEncryptedChanged)
Q_PROPERTY(bool isFileTransfer READ isFileTransfer WRITE setIsFileTransfer NOTIFY isFileTransferChanged)
@ -90,6 +91,10 @@ public:
bool wasDownloaded() const;
void setWasDownloaded(bool downloaded);
void setRichFormatText(const QString &richFormatText);
Q_INVOKABLE void setSearchedTextPart(const QString &searchedTextPart);
QString getSearchedTextPart() const;
const std::shared_ptr<ChatMessageContentModel> &getContentModel() const;
signals:
@ -102,6 +107,8 @@ signals:
void isFileEncryptedChanged();
void wasDownloadedChanged(bool downloaded);
void isVideoChanged();
void searchedTextPartChanged();
void richFormatTextChanged();
void lCreateThumbnail(const bool &force = false);
void lRemoveDownloadedFile();
@ -124,6 +131,7 @@ private:
QUrl mThumbnail;
QString mUtf8Text;
QString mRichFormatText;
QString mSearchedTextPart;
QString mFilePath;
QString mName;
quint64 mFileSize;

View file

@ -2279,24 +2279,24 @@
<context>
<name>ChatMessageContentCore</name>
<message>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="105"/>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="111"/>
<source>download_file_default_error</source>
<extracomment>Error downloading file %1</extracomment>
<translation>Fehler beim Herunterladen der Datei %1</translation>
</message>
<message>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="106"/>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="112"/>
<source>info_popup_error_titile</source>
<translation>Fehler</translation>
</message>
<message>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="138"/>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="144"/>
<source>popup_error_title</source>
<extracomment>Error</extracomment>
<translation>Fehler</translation>
</message>
<message>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="140"/>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="146"/>
<source>popup_open_file_error_does_not_exist_message</source>
<extracomment>Could not open file : unknown path %1</extracomment>
<translation>Datei konnte nicht geöffnet werden: unbekannter Pfad %1</translation>
@ -2361,37 +2361,37 @@ Error</extracomment>
<translation type="vanished">Fehler</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="83"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="87"/>
<source>download_error_object_doesnt_exist</source>
<extracomment>Internal error : message object associated to this content does not exist anymore !</extracomment>
<translation type="unfinished">Interner Fehler: Nachrichtenobjekt existiert nicht mehr!</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="98"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="102"/>
<source>download_file_server_error</source>
<extracomment>Error while trying to download content : %1</extracomment>
<translation>Fehler beim Versuch, Inhalte herunterzuladen: %1</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="108"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="112"/>
<source>download_file_error_no_safe_file_path</source>
<extracomment>Unable to create safe file path for: %1</extracomment>
<translation>Speicherpfad konnte nicht erstellen für: %1</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="117"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="121"/>
<source>download_file_error_file_transfer_unavailable</source>
<extracomment>This file was already downloaded and is no more on the server. Your peer have to resend it if you want to get it</extracomment>
<translation>Diese Datei wurde bereits heruntergeladen und ist nicht mehr auf dem Server verfügbar. Ihr Kontakt muss die Datei erneut senden</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="122"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="126"/>
<source>download_file_error_null_name</source>
<extracomment>Content name is null, can&apos;t download it !</extracomment>
<translation>Inhaltsname nicht gesetzt, herunterladen fehlgeschlagen!</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="130"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="134"/>
<source>download_file_error_unable_to_download</source>
<extracomment>Unable to download file of entry %1</extracomment>
<translation>Datei des Eintrags %1 konnte nicht heruntergeladen werden</translation>
@ -6050,49 +6050,49 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte.
<context>
<name>ToolModel</name>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="311"/>
<location filename="../../model/tool/ToolModel.cpp" line="330"/>
<source>call_error_uninterpretable_sip_address</source>
<extracomment>&quot;The calling address is not an interpretable SIP address : %1</extracomment>
<translation>Die Anrufadresse ist keine interpretierbare SIP-Adresse: %1</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="386"/>
<location filename="../../model/tool/ToolModel.cpp" line="405"/>
<source>group_call_error_no_account</source>
<translation>Kein Standardkonto gefunden, Gruppengespräch kann nicht erstellt werden</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="416"/>
<location filename="../../model/tool/ToolModel.cpp" line="435"/>
<source>group_call_error_participants_invite</source>
<translation>Teilnehmer konnten nicht zum Gruppengespräch eingeladen werden</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="420"/>
<location filename="../../model/tool/ToolModel.cpp" line="439"/>
<source>group_call_error_creation</source>
<translation>Gruppengespräch konnte nicht erstellt werden</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="520"/>
<location filename="../../model/tool/ToolModel.cpp" line="539"/>
<source>voice_recording_duration</source>
<extracomment>&quot;Voice recording (%1)&quot; : %1 is the duration formated in mm:ss</extracomment>
<translation>Sprachnachricht (%1)</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="528"/>
<location filename="../../model/tool/ToolModel.cpp" line="547"/>
<source>conference_invitation</source>
<translation>Meeting-Einladung</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="530"/>
<location filename="../../model/tool/ToolModel.cpp" line="549"/>
<source>conference_invitation_updated</source>
<translation>Meeting-Änderung</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="532"/>
<location filename="../../model/tool/ToolModel.cpp" line="551"/>
<source>conference_invitation_cancelled</source>
<translation>Meeting-Absage</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="594"/>
<location filename="../../model/tool/ToolModel.cpp" line="613"/>
<source>unknown_audio_device_name</source>
<translation>Unbekannter Gerätename</translation>
</message>
@ -6100,7 +6100,7 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte.
<context>
<name>Utils</name>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2278"/>
<location filename="../../tool/Utils.cpp" line="2192"/>
<source>nMinute</source>
<translation>
<numerusform>%1 Minute</numerusform>
@ -6108,7 +6108,7 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte.
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2279"/>
<location filename="../../tool/Utils.cpp" line="2193"/>
<source>nHour</source>
<translation>
<numerusform>%1 Stunde</numerusform>
@ -6116,8 +6116,8 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte.
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2280"/>
<location filename="../../tool/Utils.cpp" line="2281"/>
<location filename="../../tool/Utils.cpp" line="2194"/>
<location filename="../../tool/Utils.cpp" line="2195"/>
<source>nDay</source>
<translation>
<numerusform>%1 Tag</numerusform>
@ -6125,7 +6125,7 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte.
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2282"/>
<location filename="../../tool/Utils.cpp" line="2196"/>
<source>nWeek</source>
<translation>
<numerusform>%1 Woche</numerusform>
@ -6133,7 +6133,7 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte.
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2283"/>
<location filename="../../tool/Utils.cpp" line="2197"/>
<source>nSeconds</source>
<translation>
<numerusform>%1 Sekunde</numerusform>
@ -6259,73 +6259,73 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte.
<translation>Offline</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2189"/>
<location filename="../../tool/Utils.cpp" line="2103"/>
<source>recorder_error</source>
<extracomment>Error with the recorder</extracomment>
<translation>Fehler mit der Aufzeichnung</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2094"/>
<location filename="../../tool/Utils.cpp" line="2126"/>
<location filename="../../tool/Utils.cpp" line="2191"/>
<location filename="../../tool/Utils.cpp" line="2008"/>
<location filename="../../tool/Utils.cpp" line="2040"/>
<location filename="../../tool/Utils.cpp" line="2105"/>
<source>chat_error</source>
<translation>Fehler im Chat</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2092"/>
<location filename="../../tool/Utils.cpp" line="2006"/>
<source>chat_message_forward_error</source>
<extracomment>Cannot forward an invalid message</extracomment>
<translation>Eine ungültige Nachricht kann nicht weitergeleitet werden</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2096"/>
<location filename="../../tool/Utils.cpp" line="2111"/>
<location filename="../../tool/Utils.cpp" line="2128"/>
<location filename="../../tool/Utils.cpp" line="2155"/>
<location filename="../../tool/Utils.cpp" line="2193"/>
<location filename="../../tool/Utils.cpp" line="2207"/>
<location filename="../../tool/Utils.cpp" line="2010"/>
<location filename="../../tool/Utils.cpp" line="2025"/>
<location filename="../../tool/Utils.cpp" line="2042"/>
<location filename="../../tool/Utils.cpp" line="2069"/>
<location filename="../../tool/Utils.cpp" line="2107"/>
<location filename="../../tool/Utils.cpp" line="2121"/>
<source>info_popup_error_title</source>
<extracomment>Error</extracomment>
<translation>Fehler</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2098"/>
<location filename="../../tool/Utils.cpp" line="2012"/>
<source>info_popup_forward_message_error</source>
<extracomment>Could not forward message : %1</extracomment>
<translation>Nachricht konnte nicht weitergeleitet werden: %1</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2113"/>
<location filename="../../tool/Utils.cpp" line="2027"/>
<source>info_popup_send_forward_message_error_message</source>
<extracomment>Failed to create forward message</extracomment>
<translation>Weiterleitungsnachricht konnte nicht erstellt werden</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2124"/>
<location filename="../../tool/Utils.cpp" line="2038"/>
<source>chat_message_reply_error</source>
<extracomment>Cannot reply to invalid message</extracomment>
<translation>Auf eine ungültige Nachricht kann nicht geantwortet werden</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2130"/>
<location filename="../../tool/Utils.cpp" line="2044"/>
<source>info_popup_reply_message_error</source>
<extracomment>Could not send reply message : %1</extracomment>
<translation>Antwort konnte nicht gesendet werden: %1</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2157"/>
<location filename="../../tool/Utils.cpp" line="2071"/>
<source>info_popup_send_reply_message_error_message</source>
<extracomment>Failed to create reply message</extracomment>
<translation>Antwort konnte nicht erstellt werden</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2195"/>
<location filename="../../tool/Utils.cpp" line="2109"/>
<source>info_popup_send_voice_message_error_message</source>
<extracomment>Could not send voice message : %1</extracomment>
<translation>Sprachnachricht konnte nicht gesendet werden: %1</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2209"/>
<location filename="../../tool/Utils.cpp" line="2123"/>
<source>info_popup_send_voice_message_sending_error_message</source>
<extracomment>Failed to create message from record</extracomment>
<translation>Nachricht aus der Aufnahme konnte nicht erstellt werden</translation>

View file

@ -2242,24 +2242,24 @@
<context>
<name>ChatMessageContentCore</name>
<message>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="105"/>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="111"/>
<source>download_file_default_error</source>
<extracomment>Error downloading file %1</extracomment>
<translation>Error downloading file %1</translation>
</message>
<message>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="106"/>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="112"/>
<source>info_popup_error_titile</source>
<translation>Error</translation>
</message>
<message>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="138"/>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="144"/>
<source>popup_error_title</source>
<extracomment>Error</extracomment>
<translation>Error</translation>
</message>
<message>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="140"/>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="146"/>
<source>popup_open_file_error_does_not_exist_message</source>
<extracomment>Could not open file : unknown path %1</extracomment>
<translation>Could not open file : unknown path %1</translation>
@ -2319,37 +2319,37 @@ Error</extracomment>
<context>
<name>ChatMessageContentModel</name>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="83"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="87"/>
<source>download_error_object_doesnt_exist</source>
<extracomment>Internal error : message object associated to this content does not exist anymore !</extracomment>
<translation>Internal error : message object associated to this content does not exist anymore !</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="98"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="102"/>
<source>download_file_server_error</source>
<extracomment>Error while trying to download content : %1</extracomment>
<translation>Error while trying to download content : %1</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="108"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="112"/>
<source>download_file_error_no_safe_file_path</source>
<extracomment>Unable to create safe file path for: %1</extracomment>
<translation>Unable to create safe file path for: %1</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="117"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="121"/>
<source>download_file_error_file_transfer_unavailable</source>
<extracomment>This file was already downloaded and is no more on the server. Your peer have to resend it if you want to get it</extracomment>
<translation>This file was already downloaded and is no more on the server. Your peer have to resend it if you want to get it</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="122"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="126"/>
<source>download_file_error_null_name</source>
<extracomment>Content name is null, can&apos;t download it !</extracomment>
<translation>Content name is null, can&apos;t download it !</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="130"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="134"/>
<source>download_file_error_unable_to_download</source>
<extracomment>Unable to download file of entry %1</extracomment>
<translation>Unable to download file of entry %1</translation>
@ -5915,49 +5915,49 @@ To enable them in a commercial project, please contact us.</translation>
<context>
<name>ToolModel</name>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="311"/>
<location filename="../../model/tool/ToolModel.cpp" line="330"/>
<source>call_error_uninterpretable_sip_address</source>
<extracomment>&quot;The calling address is not an interpretable SIP address : %1</extracomment>
<translation>The calling address is not an interpretable SIP address : %1</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="386"/>
<location filename="../../model/tool/ToolModel.cpp" line="405"/>
<source>group_call_error_no_account</source>
<translation>No default account found, can&apos;t create group call</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="416"/>
<location filename="../../model/tool/ToolModel.cpp" line="435"/>
<source>group_call_error_participants_invite</source>
<translation>Couldn&apos;t invite participants to group call</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="420"/>
<location filename="../../model/tool/ToolModel.cpp" line="439"/>
<source>group_call_error_creation</source>
<translation>Group call couldn&apos;t be created</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="520"/>
<location filename="../../model/tool/ToolModel.cpp" line="539"/>
<source>voice_recording_duration</source>
<extracomment>&quot;Voice recording (%1)&quot; : %1 is the duration formated in mm:ss</extracomment>
<translation>Voice recording (%1)</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="594"/>
<location filename="../../model/tool/ToolModel.cpp" line="613"/>
<source>unknown_audio_device_name</source>
<translation>Unknown device name</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="528"/>
<location filename="../../model/tool/ToolModel.cpp" line="547"/>
<source>conference_invitation</source>
<translation>Meeting invitation</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="532"/>
<location filename="../../model/tool/ToolModel.cpp" line="551"/>
<source>conference_invitation_cancelled</source>
<translation>Meeting cancellation</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="530"/>
<location filename="../../model/tool/ToolModel.cpp" line="549"/>
<source>conference_invitation_updated</source>
<translation>Meeting modification</translation>
</message>
@ -5965,7 +5965,7 @@ To enable them in a commercial project, please contact us.</translation>
<context>
<name>Utils</name>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2283"/>
<location filename="../../tool/Utils.cpp" line="2197"/>
<source>nSeconds</source>
<translation>
<numerusform>%1 second</numerusform>
@ -5973,7 +5973,7 @@ To enable them in a commercial project, please contact us.</translation>
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2278"/>
<location filename="../../tool/Utils.cpp" line="2192"/>
<source>nMinute</source>
<translation>
<numerusform>%1 minute</numerusform>
@ -5981,43 +5981,43 @@ To enable them in a commercial project, please contact us.</translation>
</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2092"/>
<location filename="../../tool/Utils.cpp" line="2006"/>
<source>chat_message_forward_error</source>
<extracomment>Cannot forward an invalid message</extracomment>
<translation>Cannot forward an invalid message</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2098"/>
<location filename="../../tool/Utils.cpp" line="2012"/>
<source>info_popup_forward_message_error</source>
<extracomment>Could not forward message : %1</extracomment>
<translation>Could not forward message : %1</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2113"/>
<location filename="../../tool/Utils.cpp" line="2027"/>
<source>info_popup_send_forward_message_error_message</source>
<extracomment>Failed to create forward message</extracomment>
<translation>Failed to create forward message</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2124"/>
<location filename="../../tool/Utils.cpp" line="2038"/>
<source>chat_message_reply_error</source>
<extracomment>Cannot reply to invalid message</extracomment>
<translation>Cannot reply to invalid message</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2130"/>
<location filename="../../tool/Utils.cpp" line="2044"/>
<source>info_popup_reply_message_error</source>
<extracomment>Could not send reply message : %1</extracomment>
<translation>Could not send reply message : %1</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2157"/>
<location filename="../../tool/Utils.cpp" line="2071"/>
<source>info_popup_send_reply_message_error_message</source>
<extracomment>Failed to create reply message</extracomment>
<translation>Failed to create reply message</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2279"/>
<location filename="../../tool/Utils.cpp" line="2193"/>
<source>nHour</source>
<translation>
<numerusform>%1 hour</numerusform>
@ -6025,8 +6025,8 @@ To enable them in a commercial project, please contact us.</translation>
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2280"/>
<location filename="../../tool/Utils.cpp" line="2281"/>
<location filename="../../tool/Utils.cpp" line="2194"/>
<location filename="../../tool/Utils.cpp" line="2195"/>
<source>nDay</source>
<translation>
<numerusform>%1 day</numerusform>
@ -6034,7 +6034,7 @@ To enable them in a commercial project, please contact us.</translation>
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2282"/>
<location filename="../../tool/Utils.cpp" line="2196"/>
<source>nWeek</source>
<translation>
<numerusform>%1 week</numerusform>
@ -6160,37 +6160,37 @@ To enable them in a commercial project, please contact us.</translation>
<translation>Failed to create 1-1 conversation with %1 !</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2189"/>
<location filename="../../tool/Utils.cpp" line="2103"/>
<source>recorder_error</source>
<extracomment>Error with the recorder</extracomment>
<translation>Error with the recorder</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2094"/>
<location filename="../../tool/Utils.cpp" line="2126"/>
<location filename="../../tool/Utils.cpp" line="2191"/>
<location filename="../../tool/Utils.cpp" line="2008"/>
<location filename="../../tool/Utils.cpp" line="2040"/>
<location filename="../../tool/Utils.cpp" line="2105"/>
<source>chat_error</source>
<translation>Error in the chat</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2096"/>
<location filename="../../tool/Utils.cpp" line="2111"/>
<location filename="../../tool/Utils.cpp" line="2128"/>
<location filename="../../tool/Utils.cpp" line="2155"/>
<location filename="../../tool/Utils.cpp" line="2193"/>
<location filename="../../tool/Utils.cpp" line="2207"/>
<location filename="../../tool/Utils.cpp" line="2010"/>
<location filename="../../tool/Utils.cpp" line="2025"/>
<location filename="../../tool/Utils.cpp" line="2042"/>
<location filename="../../tool/Utils.cpp" line="2069"/>
<location filename="../../tool/Utils.cpp" line="2107"/>
<location filename="../../tool/Utils.cpp" line="2121"/>
<source>info_popup_error_title</source>
<extracomment>Error</extracomment>
<translation>Error</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2195"/>
<location filename="../../tool/Utils.cpp" line="2109"/>
<source>info_popup_send_voice_message_error_message</source>
<extracomment>Could not send voice message : %1</extracomment>
<translation>Could not send voice message : %1</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2209"/>
<location filename="../../tool/Utils.cpp" line="2123"/>
<source>info_popup_send_voice_message_sending_error_message</source>
<extracomment>Failed to create message from record</extracomment>
<translation>Failed to create message from record</translation>

View file

@ -2217,24 +2217,24 @@
<context>
<name>ChatMessageContentCore</name>
<message>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="105"/>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="111"/>
<source>download_file_default_error</source>
<extracomment>Error downloading file %1</extracomment>
<translation>Erreur de téléchargement du fichier %1</translation>
</message>
<message>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="106"/>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="112"/>
<source>info_popup_error_titile</source>
<translation>Erreur</translation>
</message>
<message>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="138"/>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="144"/>
<source>popup_error_title</source>
<extracomment>Error</extracomment>
<translation>Erreur</translation>
</message>
<message>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="140"/>
<location filename="../../core/chat/message/content/ChatMessageContentCore.cpp" line="146"/>
<source>popup_open_file_error_does_not_exist_message</source>
<extracomment>Could not open file : unknown path %1</extracomment>
<translation>Impossible d&apos;ouvrir le fichier : chemin inconnu (%1)</translation>
@ -2294,37 +2294,37 @@ Error</extracomment>
<context>
<name>ChatMessageContentModel</name>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="83"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="87"/>
<source>download_error_object_doesnt_exist</source>
<extracomment>Internal error : message object associated to this content does not exist anymore !</extracomment>
<translation>Erreur interne : le message associé à ce contenu n&apos;existe plus !</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="98"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="102"/>
<source>download_file_server_error</source>
<extracomment>Error while trying to download content : %1</extracomment>
<translation>Erreur en tentant de télécharger le contenu : %1</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="108"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="112"/>
<source>download_file_error_no_safe_file_path</source>
<extracomment>Unable to create safe file path for: %1</extracomment>
<translation>Impossible de créer le chemin : %1</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="117"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="121"/>
<source>download_file_error_file_transfer_unavailable</source>
<extracomment>This file was already downloaded and is no more on the server. Your peer have to resend it if you want to get it</extracomment>
<translation>Le fichier a déjà é téléchargé et n&apos;est plus disponible sur le serveur. Votre correspondant devra vous le renvoyez si vous souhaitez l&apos;obtenir</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="122"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="126"/>
<source>download_file_error_null_name</source>
<extracomment>Content name is null, can&apos;t download it !</extracomment>
<translation>Le nom du contenu est nul, impossible de le télécharger !</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="130"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="134"/>
<source>download_file_error_unable_to_download</source>
<extracomment>Unable to download file of entry %1</extracomment>
<translation>Impossible de télécharger le fichier : %1</translation>
@ -5886,49 +5886,49 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
<context>
<name>ToolModel</name>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="311"/>
<location filename="../../model/tool/ToolModel.cpp" line="330"/>
<source>call_error_uninterpretable_sip_address</source>
<extracomment>&quot;The calling address is not an interpretable SIP address : %1</extracomment>
<translation>L&apos;adresse n&apos;est pas interprétable comme une adresse SIP</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="386"/>
<location filename="../../model/tool/ToolModel.cpp" line="405"/>
<source>group_call_error_no_account</source>
<translation>Impossible de créer l&apos;appel de groupe, le compte par défaut n&apos;est pas défini</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="416"/>
<location filename="../../model/tool/ToolModel.cpp" line="435"/>
<source>group_call_error_participants_invite</source>
<translation>Impossible d&apos;inviter les participants à l&apos;appel de groupe</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="420"/>
<location filename="../../model/tool/ToolModel.cpp" line="439"/>
<source>group_call_error_creation</source>
<translation>L&apos;appel de groupe n&apos;a pas pu être créé</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="520"/>
<location filename="../../model/tool/ToolModel.cpp" line="539"/>
<source>voice_recording_duration</source>
<extracomment>&quot;Voice recording (%1)&quot; : %1 is the duration formated in mm:ss</extracomment>
<translation>Message vocal (%1)</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="594"/>
<location filename="../../model/tool/ToolModel.cpp" line="613"/>
<source>unknown_audio_device_name</source>
<translation>Appareil inconnu</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="528"/>
<location filename="../../model/tool/ToolModel.cpp" line="547"/>
<source>conference_invitation</source>
<translation>Invitation à une réunion</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="532"/>
<location filename="../../model/tool/ToolModel.cpp" line="551"/>
<source>conference_invitation_cancelled</source>
<translation>Annulation d&apos;une réunion</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="530"/>
<location filename="../../model/tool/ToolModel.cpp" line="549"/>
<source>conference_invitation_updated</source>
<translation>Modification d&apos;une réunion</translation>
</message>
@ -5936,7 +5936,7 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
<context>
<name>Utils</name>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2278"/>
<location filename="../../tool/Utils.cpp" line="2192"/>
<source>nMinute</source>
<translation>
<numerusform>%1 minute</numerusform>
@ -5944,7 +5944,7 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2279"/>
<location filename="../../tool/Utils.cpp" line="2193"/>
<source>nHour</source>
<translation>
<numerusform>%1 heure</numerusform>
@ -5952,8 +5952,8 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2280"/>
<location filename="../../tool/Utils.cpp" line="2281"/>
<location filename="../../tool/Utils.cpp" line="2194"/>
<location filename="../../tool/Utils.cpp" line="2195"/>
<source>nDay</source>
<translation>
<numerusform>%1 jour</numerusform>
@ -5961,7 +5961,7 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2282"/>
<location filename="../../tool/Utils.cpp" line="2196"/>
<source>nWeek</source>
<translation>
<numerusform>%1 semaine</numerusform>
@ -5969,7 +5969,7 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2283"/>
<location filename="../../tool/Utils.cpp" line="2197"/>
<source>nSeconds</source>
<translation>
<numerusform>%1 seconde</numerusform>
@ -6095,73 +6095,73 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
<translation>Erreur lors de la création de la conversation avec %1</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2189"/>
<location filename="../../tool/Utils.cpp" line="2103"/>
<source>recorder_error</source>
<extracomment>Error with the recorder</extracomment>
<translation>Erreur avec l&apos;enregistreur</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2094"/>
<location filename="../../tool/Utils.cpp" line="2126"/>
<location filename="../../tool/Utils.cpp" line="2191"/>
<location filename="../../tool/Utils.cpp" line="2008"/>
<location filename="../../tool/Utils.cpp" line="2040"/>
<location filename="../../tool/Utils.cpp" line="2105"/>
<source>chat_error</source>
<translation>Erreur dans le chat</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2092"/>
<location filename="../../tool/Utils.cpp" line="2006"/>
<source>chat_message_forward_error</source>
<extracomment>Cannot forward an invalid message</extracomment>
<translation>Impossible de transférer : message invalide</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2096"/>
<location filename="../../tool/Utils.cpp" line="2111"/>
<location filename="../../tool/Utils.cpp" line="2128"/>
<location filename="../../tool/Utils.cpp" line="2155"/>
<location filename="../../tool/Utils.cpp" line="2193"/>
<location filename="../../tool/Utils.cpp" line="2207"/>
<location filename="../../tool/Utils.cpp" line="2010"/>
<location filename="../../tool/Utils.cpp" line="2025"/>
<location filename="../../tool/Utils.cpp" line="2042"/>
<location filename="../../tool/Utils.cpp" line="2069"/>
<location filename="../../tool/Utils.cpp" line="2107"/>
<location filename="../../tool/Utils.cpp" line="2121"/>
<source>info_popup_error_title</source>
<extracomment>Error</extracomment>
<translation>Erreur</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2098"/>
<location filename="../../tool/Utils.cpp" line="2012"/>
<source>info_popup_forward_message_error</source>
<extracomment>Could not forward message : %1</extracomment>
<translation>Impossible de transférer le message : %1</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2113"/>
<location filename="../../tool/Utils.cpp" line="2027"/>
<source>info_popup_send_forward_message_error_message</source>
<extracomment>Failed to create forward message</extracomment>
<translation>Impossible de créer le message</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2124"/>
<location filename="../../tool/Utils.cpp" line="2038"/>
<source>chat_message_reply_error</source>
<extracomment>Cannot reply to invalid message</extracomment>
<translation>Impossible de répondre : message invalide</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2130"/>
<location filename="../../tool/Utils.cpp" line="2044"/>
<source>info_popup_reply_message_error</source>
<extracomment>Could not send reply message : %1</extracomment>
<translation>Impossible d&apos;envoyer la réponse : %1</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2157"/>
<location filename="../../tool/Utils.cpp" line="2071"/>
<source>info_popup_send_reply_message_error_message</source>
<extracomment>Failed to create reply message</extracomment>
<translation>Impossible de créer le message</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2195"/>
<location filename="../../tool/Utils.cpp" line="2109"/>
<source>info_popup_send_voice_message_error_message</source>
<extracomment>Could not send voice message : %1</extracomment>
<translation>Impossible d&apos;envoyer le message vocal : %1</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2209"/>
<location filename="../../tool/Utils.cpp" line="2123"/>
<source>info_popup_send_voice_message_sending_error_message</source>
<extracomment>Failed to create message from record</extracomment>
<translation>Impossible de créer le message vocal</translation>

View file

@ -57,6 +57,10 @@ ChatMessageContentModel::~ChatMessageContentModel() {
mustBeInLinphoneThread("~" + getClassName());
}
std::shared_ptr<ChatMessageModel> ChatMessageContentModel::getChatMessageModel() const {
return mChatMessageModel;
}
// Create a thumbnail from the first content that have a file
void ChatMessageContentModel::createThumbnail() {
auto path = Utils::coreStringToAppString(mContent->getFilePath());

View file

@ -43,6 +43,7 @@ public:
void setThumbnail(const QString &data);
void setWasDownloaded(bool wasDownloaded);
std::shared_ptr<ChatMessageModel> getChatMessageModel() const;
void createThumbnail();
void removeDownloadedFile(QString filePath);

View file

@ -131,7 +131,21 @@ QString ToolModel::getDisplayName(QString address) {
return nameSplitted.join(" ");
}
QString ToolModel::boldTextPart(const QString &text, const QString &regex) {
int regexIndex = text.indexOf(regex, 0, Qt::CaseInsensitive);
if (regex.isEmpty() || regexIndex == -1) return text;
QString result;
QStringList splittedText = text.split(regex, Qt::KeepEmptyParts, Qt::CaseInsensitive);
for (int i = 0; i < splittedText.size() - 1; ++i) {
result.append(splittedText[i]);
result.append("<b>" + regex + "</b>");
}
if (splittedText.size() > 0) result.append(splittedText[splittedText.size() - 1]);
return result;
}
QString ToolModel::encodeTextToQmlRichFormat(const QString &text,
const QString &textPartToBold,
const QVariantMap &options,
std::shared_ptr<linphone::ChatRoom> chatRoom) {
QStringList formattedText;
@ -230,7 +244,11 @@ QString ToolModel::encodeTextToQmlRichFormat(const QString &text,
}
}
}
return "<p style=\"white-space:pre-wrap;\">" + formattedText.join("");
QString finalText = formattedText.join("");
if (!textPartToBold.isEmpty()) {
finalText = boldTextPart(finalText, textPartToBold);
}
return finalText;
}
std::shared_ptr<linphone::Friend> ToolModel::findFriendByAddress(const QString &address) {

View file

@ -50,9 +50,11 @@ public:
static QString getDisplayName(const std::shared_ptr<const linphone::Address> &address);
static QString getDisplayName(QString address);
static QString boldTextPart(const QString &text, const QString &regex);
static QString encodeTextToQmlRichFormat(const QString &text,
const QVariantMap &options,
std::shared_ptr<linphone::ChatRoom> chatRoom);
const QString &textPartToBold = QString(),
const QVariantMap &options = QVariantMap(),
std::shared_ptr<linphone::ChatRoom> chatRoom = nullptr);
static std::shared_ptr<linphone::Friend> findFriendByAddress(const QString &address);
static std::shared_ptr<linphone::Friend>

View file

@ -1866,7 +1866,10 @@ QString Utils::getPresenceStatus(LinphoneEnums::Presence presence) {
return presenceStatus;
}
VariantObject *Utils::encodeTextToQmlRichFormat(const QString &text, const QVariantMap &options, ChatGui *chat) {
VariantObject *Utils::encodeTextToQmlRichFormat(const QString &text,
const QString &textPartToBold,
const QVariantMap &options,
ChatGui *chat) {
/*QString images;
QStringList imageFormat;
for(auto format : QImageReader::supportedImageFormats())
@ -1875,99 +1878,10 @@ VariantObject *Utils::encodeTextToQmlRichFormat(const QString &text, const QVari
VariantObject *data = new VariantObject("encodeTextToQmlRichFormat");
if (!data) return nullptr;
auto primaryColor = getDefaultStyleColor("info_500_main");
data->makeRequest([text, options, chat, primaryColor] {
QStringList formattedText;
bool lastWasUrl = false;
if (options.contains("noLink") && options["noLink"].toBool()) {
formattedText.append(encodeEmojiToQmlRichFormat(text));
} else {
auto iriParsed = UriTools::parseIri(text);
for (int i = 0; i < iriParsed.size(); ++i) {
QString iri = iriParsed[i]
.second.replace('&', "&amp;")
.replace('<', "\u2063&lt;")
.replace('>', "\u2063&gt;")
.replace('"', "&quot;")
.replace('\'', "&#039;");
if (!iriParsed[i].first) {
if (lastWasUrl) {
lastWasUrl = false;
if (iri.front() != ' ') iri.push_front(' ');
}
formattedText.append(encodeEmojiToQmlRichFormat(iri));
} else {
QString uri =
iriParsed[i].second.left(3) == "www" ? "http://" + iriParsed[i].second : iriParsed[i].second;
/* TODO : preview from link
int extIndex = iriParsed[i].second.lastIndexOf('.');
QString ext;
if( extIndex >= 0)
ext = iriParsed[i].second.mid(extIndex+1).toUpper();
if(imageFormat.contains(ext.toLatin1())){// imagesHeight is not used because of bugs on display
(blank image if set without width) images += "<a href=\"" + uri + "\"><img" + (
options.contains("imagesWidth") ? QString(" width='") + options["imagesWidth"].toString() + "'" : ""
) + (
options.contains("imagesWidth")
? QString(" height='auto'")
: ""
) + " src=\"" + iriParsed[i].second + "\" />"+uri+"</a>";
}else{
*/
formattedText.append("<a style=\"color:" + primaryColor.name() + ";\" href=\"" + uri + "\">" + iri +
"</a>");
lastWasUrl = true;
/*}*/
}
}
}
if (lastWasUrl && formattedText.last().back() != ' ') {
formattedText.push_back(" ");
}
if (chat && chat->mCore) {
auto participants = chat->mCore->getParticipants();
auto mentionsParsed = UriTools::parseMention(formattedText.join(""));
formattedText.clear();
for (int i = 0; i < mentionsParsed.size(); ++i) {
QString mention = mentionsParsed[i].second;
if (mentionsParsed[i].first) {
QString mentions = mentionsParsed[i].second;
QStringList finalMentions;
QStringList parts = mentions.split(" ");
for (auto part : parts) {
if (part.startsWith("@")) { // mention
QString username = part;
username.removeFirst();
auto it = std::find_if(
participants.begin(), participants.end(),
[username](QSharedPointer<ParticipantCore> p) { return username == p->getUsername(); });
if (it != participants.end()) {
auto foundParticipant = participants.at(std::distance(participants.begin(), it));
auto address = foundParticipant->getSipAddress();
auto isFriend = ToolModel::findFriendByAddress(address);
if (isFriend)
part = "@" + Utils::coreStringToAppString(isFriend->getAddress()->getDisplayName());
QString participantLink = "<a style=\"color:" + primaryColor.name() +
";\" href=\"mention:" + address + "\">" + part + "</a>";
finalMentions.append(participantLink);
} else {
finalMentions.append(part);
}
} else {
finalMentions.append(part);
}
}
formattedText.push_back(finalMentions.join(" "));
} else {
formattedText.push_back(mentionsParsed[i].second);
}
}
}
return "<p style=\"white-space:pre-wrap;\">" + formattedText.join("");
data->makeRequest([text, options, chat, primaryColor, textPartToBold] {
auto chatroom =
chat && chat->mCore && chat->mCore->getModel() ? chat->mCore->getModel()->getMonitor() : nullptr;
return ToolModel::encodeTextToQmlRichFormat(text, textPartToBold, options, chatroom);
});
data->requestValue();
return data;

View file

@ -143,10 +143,10 @@ public:
Q_INVOKABLE static void useFetchConfig(const QString &configUrl);
Q_INVOKABLE void playDtmf(const QString &dtmf);
Q_INVOKABLE bool isInteger(const QString &text);
Q_INVOKABLE QString boldTextPart(const QString &text, const QString &regex);
Q_INVOKABLE static QString boldTextPart(const QString &text, const QString &regex);
Q_INVOKABLE static QString getFileChecksum(const QString &filePath);
Q_INVOKABLE QList<QVariant> append(const QList<QVariant> a, const QList<QVariant> b);
Q_INVOKABLE QString getAddressToDisplay(QVariantList addressList, QString filter, QString defaultAddress);
Q_INVOKABLE static QList<QVariant> append(const QList<QVariant> a, const QList<QVariant> b);
Q_INVOKABLE static QString getAddressToDisplay(QVariantList addressList, QString filter, QString defaultAddress);
Q_INVOKABLE static QColor getPresenceColor(LinphoneEnums::Presence presence);
Q_INVOKABLE static QUrl getPresenceIcon(LinphoneEnums::Presence presence);
Q_INVOKABLE static QString getPresenceStatus(LinphoneEnums::Presence presence);
@ -156,8 +156,10 @@ public:
Q_INVOKABLE static VariantObject *createGroupChat(QString subject, QStringList participantAddresses);
Q_INVOKABLE static void openChat(ChatGui *chat);
Q_INVOKABLE static bool isEmptyMessage(QString message);
Q_INVOKABLE static VariantObject *
encodeTextToQmlRichFormat(const QString &text, const QVariantMap &options = QVariantMap(), ChatGui *chat = nullptr);
Q_INVOKABLE static VariantObject *encodeTextToQmlRichFormat(const QString &text,
const QString &textPartToBold = QString(),
const QVariantMap &options = QVariantMap(),
ChatGui *chat = nullptr);
Q_INVOKABLE static QString encodeEmojiToQmlRichFormat(const QString &body);
Q_INVOKABLE static bool isOnlyEmojis(const QString &text);
Q_INVOKABLE static void openContactAtAddress(const QString &address);

View file

@ -26,9 +26,10 @@ TextEdit {
readOnly: true
selectByMouse: true
text: searchedTextPart !== ""
? UtilsCpp.boldTextPart(contentGui.core.richFormatText, searchedTextPart)
: contentGui.core.richFormatText
text: contentGui.core.richFormatText
onSearchedTextPartChanged: {
contentGui.core.setSearchedTextPart(searchedTextPart)
}
textFormat: Text.RichText // To supports links and imgs.
wrapMode: TextEdit.Wrap