forward message

This commit is contained in:
Gaelle Braud 2025-07-08 15:32:00 +02:00
parent b1ab4224ef
commit 1e5ec027bb
18 changed files with 805 additions and 566 deletions

View file

@ -196,19 +196,17 @@ void ChatCore::setSelf(QSharedPointer<ChatCore> me) {
});
// Events (excluding messages)
mChatModelConnection->makeConnectToModel(&ChatModel::newEvent,
[this](const std::shared_ptr<linphone::ChatRoom> &chatRoom,
const std::shared_ptr<const linphone::EventLog> &eventLog) {
if (mChatModel->getMonitor() != chatRoom) return;
qDebug() << "EVENT LOG RECEIVED IN CHATROOM" << mChatModel->getTitle();
auto event = EventLogCore::create(eventLog);
if (event->isHandled()) {
mChatModelConnection->invokeToCore([this, event]() {
appendEventLogToEventLogList(event);
emit lUpdateLastUpdatedTime();
});
}
});
mChatModelConnection->makeConnectToModel(
&ChatModel::newEvent, [this](const std::shared_ptr<linphone::ChatRoom> &chatRoom,
const std::shared_ptr<const linphone::EventLog> &eventLog) {
if (mChatModel->getMonitor() != chatRoom) return;
qDebug() << "EVENT LOG RECEIVED IN CHATROOM" << mChatModel->getTitle();
auto event = EventLogCore::create(eventLog);
if (event->isHandled()) {
mChatModelConnection->invokeToCore([this, event]() { appendEventLogToEventLogList(event); });
}
mChatModelConnection->invokeToCore([this, event]() { emit lUpdateLastUpdatedTime(); });
});
// Chat messages
mChatModelConnection->makeConnectToModel(

View file

@ -45,6 +45,7 @@ void ChatProxy::setSourceModel(QAbstractItemModel *model) {
[this, newChatList] { emit newChatList->filterChanged(getFilterText()); });
connect(newChatList, &ChatList::chatRemoved, this, &ChatProxy::chatRemoved);
connect(newChatList, &ChatList::chatAdded, this, [this] { invalidate(); });
connect(newChatList, &ChatList::dataChanged, this, [this] { invalidate(); });
}
auto firstList = new SortFilterList(model, Qt::AscendingOrder);
firstList->setDynamicSortFilter(true);

View file

@ -691,7 +691,7 @@
<location filename="../../core/call/CallCore.cpp" line="653"/>
<source>media_encryption_dtls</source>
<extracomment>DTLS</extracomment>
<translation type="unfinished"></translation>
<translation type="unfinished">DTLS</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="656"/>
@ -703,7 +703,7 @@
<location filename="../../core/call/CallCore.cpp" line="659"/>
<source>media_encryption_srtp</source>
<extracomment>SRTP</extracomment>
<translation type="unfinished"></translation>
<translation type="unfinished">SRTP</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="662"/>
@ -788,26 +788,6 @@
</context>
<context>
<name>CallHistoryLayout</name>
<message>
<source>contact_presence_status_online</source>
<extracomment>&quot;En ligne&quot;</extracomment>
<translation type="vanished">Online</translation>
</message>
<message>
<source>contact_presence_status_busy</source>
<extracomment>&quot;Occupé&quot;</extracomment>
<translation type="vanished">Beschäftigt</translation>
</message>
<message>
<source>contact_presence_status_do_not_disturb</source>
<extracomment>&quot;Ne pas déranger&quot;</extracomment>
<translation type="vanished">Nicht stören</translation>
</message>
<message>
<source>contact_presence_status_offline</source>
<extracomment>&quot;Hors ligne&quot;</extracomment>
<translation type="vanished">Offline</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="117"/>
<source>meeting_info_join_title</source>
@ -1054,16 +1034,6 @@
<extracomment>&quot;Lancer&quot;</extracomment>
<translation>Starten</translation>
</message>
<message>
<source>history_group_call_start_dialog_subject_hint</source>
<extracomment>&quot;Nom du groupe&quot;</extracomment>
<translation type="vanished">Gruppenname</translation>
</message>
<message>
<source>required</source>
<extracomment>&quot;Requis&quot;</extracomment>
<translation type="vanished">Erforderlich</translation>
</message>
<message>
<location filename="../../view/Page/Main/Call/CallPage.qml" line="404"/>
<location filename="../../view/Page/Main/Call/CallPage.qml" line="408"/>
@ -1758,47 +1728,47 @@
<context>
<name>ChatListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="275"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="276"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="277"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="278"/>
<source>chat_message_draft_sending_text</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="368"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="369"/>
<source>chat_room_delete</source>
<extracomment>&quot;Delete&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="346"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="347"/>
<source>chat_room_mute</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="346"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="347"/>
<source>chat_room_unmute</source>
<extracomment>&quot;Mute&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="357"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="358"/>
<source>chat_room_mark_as_read</source>
<extracomment>&quot;Mark as read&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="374"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="375"/>
<source>chat_list_delete_chat_popup_title</source>
<extracomment>Delete the conversation ?</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="376"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="377"/>
<source>chat_list_delete_chat_popup_message</source>
<extracomment>This conversation and all its messages will be deleted. Do You want to continue ?</extracomment>
<translation type="unfinished"></translation>
@ -1807,67 +1777,79 @@
<context>
<name>ChatMessage</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="341"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="388"/>
<source>chat_message_copy_selection</source>
<extracomment>&quot;Copy selection&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="343"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="390"/>
<source>chat_message_copy</source>
<extracomment>&quot;Copy&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="351"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="398"/>
<source>chat_message_copied_to_clipboard_title</source>
<extracomment>Copied</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="353"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="400"/>
<source>chat_message_copied_to_clipboard_toast</source>
<extracomment>&quot;to clipboard&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="90"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="114"/>
<source>chat_message_remote_replied</source>
<extracomment>%1 replied</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="88"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="407"/>
<source>chat_message_forward</source>
<extracomment>Forward</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="112"/>
<source>chat_message_remote_replied_to</source>
<extracomment>%1 replied to %2</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="93"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="81"/>
<source>chat_message_forwarded</source>
<extracomment>Forwarded</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="117"/>
<source>chat_message_user_replied_to</source>
<extracomment>You replied to %1</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="95"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="119"/>
<source>chat_message_user_replied</source>
<extracomment>You replied</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="316"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="363"/>
<source>chat_message_reception_info</source>
<extracomment>&quot;Reception info&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="328"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="375"/>
<source>chat_message_reply</source>
<extracomment>Reply</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="365"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="424"/>
<source>chat_message_delete</source>
<extracomment>&quot;Delete&quot;</extracomment>
<translation type="unfinished"></translation>
@ -1963,13 +1945,13 @@ Error</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="196"/>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="198"/>
<source>info_toast_deleted_title</source>
<extracomment>Deleted</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="198"/>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="200"/>
<source>info_toast_deleted_message</source>
<extracomment>The message has been deleted</extracomment>
<translation type="unfinished"></translation>
@ -2022,20 +2004,20 @@ Error</extracomment>
<context>
<name>ChatMessagesListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="92"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="93"/>
<source>chat_message_list_encrypted_header_title</source>
<extracomment>End to end encrypted chat</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="102"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="103"/>
<source>chat_message_list_encrypted_header_message</source>
<extracomment>Les messages de cette conversation sont chiffrés de bout
en bout. Seul votre correspondant peut les déchiffrer.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="231"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="233"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation type="unfinished"></translation>
@ -2098,37 +2080,37 @@ Error</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="246"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="248"/>
<source>chat_action_start_new_chat</source>
<extracomment>&quot;New chat&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="282"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="284"/>
<source>chat_start_group_chat_title</source>
<extracomment>&quot;Nouveau groupe&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="284"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="286"/>
<source>chat_action_start_group_chat</source>
<extracomment>&quot;Créer&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="310"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="314"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="312"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="316"/>
<source>information_popup_error_title</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="312"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="314"/>
<source>group_chat_error_must_have_name</source>
<extracomment>&quot;Un nom doit être donné au groupe</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="316"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="318"/>
<source>group_call_error_not_connected</source>
<extracomment>&quot;Vous n&apos;etes pas connecté&quot;</extracomment>
<translation type="unfinished">Sie sind nicht verbunden</translation>
@ -2205,26 +2187,6 @@ Error</extracomment>
</context>
<context>
<name>Contact</name>
<message>
<source>drawer_menu_account_connection_status_connected</source>
<extracomment>&quot;Connecté&quot;</extracomment>
<translation type="vanished">Verbunden</translation>
</message>
<message>
<source>drawer_menu_account_connection_status_cleared</source>
<extracomment>&quot;Désactivé&quot;</extracomment>
<translation type="vanished">Deaktiviert</translation>
</message>
<message>
<source>drawer_menu_account_connection_status_refreshing</source>
<extracomment>&quot;Connexion&quot;</extracomment>
<translation type="vanished">Verbinden</translation>
</message>
<message>
<source>drawer_menu_account_connection_status_failed</source>
<extracomment>&quot;Erreur&quot;</extracomment>
<translation type="vanished">Fehler</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/Contact.qml" line="194"/>
<source>information_popup_error_title</source>
@ -2330,53 +2292,53 @@ Error</extracomment>
<context>
<name>ContactListItem</name>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="192"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="193"/>
<source>contact_details_remove_from_favourites</source>
<extracomment>&quot;Enlever des favoris&quot;</extracomment>
<translation>Aus Favoriten entfernen</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="194"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="195"/>
<source>contact_details_add_to_favourites</source>
<extracomment>&quot;Ajouter aux favoris&quot;</extracomment>
<translation>Zu Favoriten hinzufügen</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="208"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="209"/>
<source>Partager</source>
<translation>Teilen</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="221"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="222"/>
<source>information_popup_error_title</source>
<translation>Fehler</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="223"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="224"/>
<source>information_popup_vcard_creation_error</source>
<extracomment>La création du fichier vcard a échoué</extracomment>
<translation>VCard-Erstellung fehlgeschlagen</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="227"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="228"/>
<source>information_popup_vcard_creation_title</source>
<extracomment>VCard créée</extracomment>
<translation>VCard erstellt</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="229"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="230"/>
<source>information_popup_vcard_creation_success</source>
<extracomment>&quot;VCard du contact enregistrée dans %1&quot;</extracomment>
<translation>VCard in %1 gespeichert</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="231"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="232"/>
<source>contact_sharing_email_title</source>
<extracomment>Partage de contact</extracomment>
<translation>Kontakt teilen</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="237"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="238"/>
<source>contact_details_delete</source>
<extracomment>&quot;Supprimer&quot;</extracomment>
<translation>Löschen</translation>
@ -2538,26 +2500,6 @@ Error</extracomment>
<extracomment>&quot;Appel vidéo&quot;</extracomment>
<translation>Videoanruf</translation>
</message>
<message>
<source>contact_presence_status_online</source>
<extracomment>&quot;En ligne&quot;</extracomment>
<translation type="vanished">Online</translation>
</message>
<message>
<source>contact_presence_status_busy</source>
<extracomment>&quot;Occupé&quot;</extracomment>
<translation type="vanished">Beschäftigt</translation>
</message>
<message>
<source>contact_presence_status_do_not_disturb</source>
<extracomment>&quot;Ne pas déranger&quot;</extracomment>
<translation type="vanished">Nicht stören</translation>
</message>
<message>
<source>contact_presence_status_offline</source>
<extracomment>&quot;Hors ligne&quot;</extracomment>
<translation type="vanished">Offline</translation>
</message>
<message>
<location filename="../../view/Page/Main/Contact/ContactPage.qml" line="482"/>
<source>contact_details_numbers_and_addresses_title</source>
@ -3159,11 +3101,6 @@ Error</extracomment>
<extracomment>Medias &amp; documents</extracomment>
<translation>Medien &amp; Dokumente</translation>
</message>
<message>
<source>group_infos_shared_media</source>
<extracomment>Shared medias</extracomment>
<translation type="vanished">Geteilte Medien</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="223"/>
<source>group_infos_shared_docs</source>
@ -4006,10 +3943,6 @@ Error</extracomment>
<source>meeting_schedule_add_participants_apply</source>
<translation>Apply</translation>
</message>
<message>
<source>add</source>
<translation type="vanished">Hinzufügen</translation>
</message>
<message numerus="yes">
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="545"/>
<source>group_call_participant_selected</source>
@ -4145,11 +4078,6 @@ Error</extracomment>
<extracomment>&quot;Appels en cours&quot;</extracomment>
<translation>Laufender Anruf</translation>
</message>
<message>
<source>search_bar_look_for_contact_text</source>
<extracomment>&quot;Rechercher un contact&quot;</extracomment>
<translation type="vanished">Kontakt suchen</translation>
</message>
<message>
<location filename="../../view/Page/Form/Call/NewCallForm.qml" line="17"/>
<source>call_start_group_call_title</source>
@ -4477,22 +4405,10 @@ Error</extracomment>
</context>
<context>
<name>QObject</name>
<message>
<source>DTLS</source>
<translation type="vanished">DTLS</translation>
</message>
<message>
<source>None</source>
<translation type="vanished">Nichts</translation>
</message>
<message>
<source>SRTP</source>
<translation type="vanished">SRTP</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="62"/>
<source>media_encryption_dtls</source>
<translation type="unfinished"></translation>
<translation>DTLS</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="64"/>
@ -4502,7 +4418,7 @@ Error</extracomment>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="66"/>
<source>media_encryption_srtp</source>
<translation type="unfinished"></translation>
<translation>SRTP</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="69"/>
@ -4949,28 +4865,40 @@ Pour les activer dans un projet commercial, merci de nous contacter.</source>
<context>
<name>SelectedChatView</name>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="36"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="37"/>
<source>chat_view_group_call_toast_message</source>
<translation>Start a group call ?</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="311"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="317"/>
<source>reply_to_label</source>
<extracomment>Reply to %1</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="517"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="518"/>
<source>shared_medias_title</source>
<extracomment>Shared medias</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="519"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="520"/>
<source>shared_documents_title</source>
<extracomment>Shared documents</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="549"/>
<source>forward_to_title</source>
<extracomment>Transfer to...</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="581"/>
<source>conversations_title</source>
<extracomment>Conversations</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsPage</name>
@ -5109,7 +5037,7 @@ Pour les activer dans un projet commercial, merci de nous contacter.</source>
<context>
<name>Utils</name>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2184"/>
<location filename="../../tool/Utils.cpp" line="2216"/>
<source>nMinute</source>
<translation type="unfinished">
<numerusform></numerusform>
@ -5117,7 +5045,7 @@ Pour les activer dans un projet commercial, merci de nous contacter.</source>
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2185"/>
<location filename="../../tool/Utils.cpp" line="2217"/>
<source>nHour</source>
<translation type="unfinished">
<numerusform></numerusform>
@ -5125,8 +5053,8 @@ Pour les activer dans un projet commercial, merci de nous contacter.</source>
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2186"/>
<location filename="../../tool/Utils.cpp" line="2187"/>
<location filename="../../tool/Utils.cpp" line="2218"/>
<location filename="../../tool/Utils.cpp" line="2219"/>
<source>nDay</source>
<translation type="unfinished">
<numerusform></numerusform>
@ -5134,7 +5062,7 @@ Pour les activer dans un projet commercial, merci de nous contacter.</source>
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2188"/>
<location filename="../../tool/Utils.cpp" line="2220"/>
<source>nWeek</source>
<translation type="unfinished">
<numerusform></numerusform>
@ -5142,7 +5070,7 @@ Pour les activer dans un projet commercial, merci de nous contacter.</source>
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2189"/>
<location filename="../../tool/Utils.cpp" line="2221"/>
<source>nSeconds</source>
<translation type="unfinished">
<numerusform></numerusform>
@ -5273,42 +5201,73 @@ Failed to create 1-1 conversation with %1 !</extracomment>
<translation type="unfinished">Offline</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2036"/>
<source>chatMessage_error</source>
<extracomment>Cannot reply to invalid message</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2101"/>
<location filename="../../tool/Utils.cpp" line="2133"/>
<source>recorder_error</source>
<extracomment>Error with the recorder</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2038"/>
<location filename="../../tool/Utils.cpp" line="2103"/>
<location filename="../../tool/Utils.cpp" line="2070"/>
<location filename="../../tool/Utils.cpp" line="2135"/>
<source>chat_error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2036"/>
<source>chat_message_forward_error</source>
<extracomment>Cannot forward an invalid message</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2040"/>
<location filename="../../tool/Utils.cpp" line="2067"/>
<location filename="../../tool/Utils.cpp" line="2105"/>
<location filename="../../tool/Utils.cpp" line="2119"/>
<location filename="../../tool/Utils.cpp" line="2055"/>
<location filename="../../tool/Utils.cpp" line="2072"/>
<location filename="../../tool/Utils.cpp" line="2099"/>
<location filename="../../tool/Utils.cpp" line="2137"/>
<location filename="../../tool/Utils.cpp" line="2151"/>
<source>info_popup_error_title</source>
<extracomment>Error</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2042"/>
<location filename="../../tool/Utils.cpp" line="2107"/>
<source>info_popup_forward_message_error</source>
<extracomment>Could not forward message : %1</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2057"/>
<source>info_popup_send_forward_message_error_message</source>
<extracomment>Failed to create forward message</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2068"/>
<source>chat_message_reply_error</source>
<extracomment>Cannot reply to invalid message</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2074"/>
<source>info_popup_reply_message_error</source>
<extracomment>Could not send reply message : %1</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2101"/>
<source>info_popup_send_reply_message_error_message</source>
<extracomment>Failed to create reply message</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2139"/>
<source>info_popup_send_voice_message_error_message</source>
<extracomment>Could not send voice message : %1</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2069"/>
<location filename="../../tool/Utils.cpp" line="2121"/>
<location filename="../../tool/Utils.cpp" line="2153"/>
<source>info_popup_send_voice_message_sending_error_message</source>
<extracomment>Failed to create message from record</extracomment>
<translation type="unfinished"></translation>

View file

@ -1720,47 +1720,47 @@
<context>
<name>ChatListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="275"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="276"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation>%1 is writing</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="277"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="278"/>
<source>chat_message_draft_sending_text</source>
<translation>Draft : %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="368"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="369"/>
<source>chat_room_delete</source>
<extracomment>&quot;Delete&quot;</extracomment>
<translation>Delete</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="346"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="347"/>
<source>chat_room_mute</source>
<translation>Mute</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="346"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="347"/>
<source>chat_room_unmute</source>
<extracomment>&quot;Mute&quot;</extracomment>
<translation>Unmute</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="357"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="358"/>
<source>chat_room_mark_as_read</source>
<extracomment>&quot;Mark as read&quot;</extracomment>
<translation>Mark as read</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="374"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="375"/>
<source>chat_list_delete_chat_popup_title</source>
<extracomment>Delete the conversation ?</extracomment>
<translation>Delete the conversation ?</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="376"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="377"/>
<source>chat_list_delete_chat_popup_message</source>
<extracomment>This conversation and all its messages will be deleted. Do You want to continue ?</extracomment>
<translation>This conversation and all its messages will be deleted. Do You want to continue ?</translation>
@ -1769,67 +1769,79 @@
<context>
<name>ChatMessage</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="341"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="388"/>
<source>chat_message_copy_selection</source>
<extracomment>&quot;Copy selection&quot;</extracomment>
<translation>Copy selection</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="343"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="390"/>
<source>chat_message_copy</source>
<extracomment>&quot;Copy&quot;</extracomment>
<translation>Copy</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="351"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="398"/>
<source>chat_message_copied_to_clipboard_title</source>
<extracomment>Copied</extracomment>
<translation>Copied</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="353"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="400"/>
<source>chat_message_copied_to_clipboard_toast</source>
<extracomment>&quot;to clipboard&quot;</extracomment>
<translation>in clipboard</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="90"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="114"/>
<source>chat_message_remote_replied</source>
<extracomment>%1 replied</extracomment>
<translation>%1 replied to</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="88"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="407"/>
<source>chat_message_forward</source>
<extracomment>Forward</extracomment>
<translation>Forward</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="112"/>
<source>chat_message_remote_replied_to</source>
<extracomment>%1 replied to %2</extracomment>
<translation>%1 replied to %2</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="93"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="81"/>
<source>chat_message_forwarded</source>
<extracomment>Forwarded</extracomment>
<translation>Forwarded</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="117"/>
<source>chat_message_user_replied_to</source>
<extracomment>You replied to %1</extracomment>
<translation>You replied to %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="95"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="119"/>
<source>chat_message_user_replied</source>
<extracomment>You replied</extracomment>
<translation>You replied</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="316"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="363"/>
<source>chat_message_reception_info</source>
<extracomment>&quot;Reception info&quot;</extracomment>
<translation>Reception info</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="328"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="375"/>
<source>chat_message_reply</source>
<extracomment>Reply</extracomment>
<translation>Reply</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="365"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="424"/>
<source>chat_message_delete</source>
<extracomment>&quot;Delete&quot;</extracomment>
<translation>Delete</translation>
@ -1925,13 +1937,13 @@ Error</extracomment>
<translation>Reactions</translation>
</message>
<message>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="196"/>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="198"/>
<source>info_toast_deleted_title</source>
<extracomment>Deleted</extracomment>
<translation>Deleted</translation>
</message>
<message>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="198"/>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="200"/>
<source>info_toast_deleted_message</source>
<extracomment>The message has been deleted</extracomment>
<translation>The message has been deleted</translation>
@ -1984,13 +1996,13 @@ Error</extracomment>
<context>
<name>ChatMessagesListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="92"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="93"/>
<source>chat_message_list_encrypted_header_title</source>
<extracomment>End to end encrypted chat</extracomment>
<translation>End to end encrypted chat</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="102"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="103"/>
<source>chat_message_list_encrypted_header_message</source>
<extracomment>Les messages de cette conversation sont chiffrés de bout
en bout. Seul votre correspondant peut les déchiffrer.</extracomment>
@ -1998,7 +2010,7 @@ Error</extracomment>
Only your correspondent can decrypt them.</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="231"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="233"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation>%1 is writing</translation>
@ -2061,37 +2073,37 @@ Only your correspondent can decrypt them.</translation>
<translation>No conversation in history</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="246"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="248"/>
<source>chat_action_start_new_chat</source>
<extracomment>&quot;New chat&quot;</extracomment>
<translation>New conversation</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="282"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="284"/>
<source>chat_start_group_chat_title</source>
<extracomment>&quot;Nouveau groupe&quot;</extracomment>
<translation>New group</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="284"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="286"/>
<source>chat_action_start_group_chat</source>
<extracomment>&quot;Créer&quot;</extracomment>
<translation>Create</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="310"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="314"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="312"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="316"/>
<source>information_popup_error_title</source>
<translation>Error</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="312"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="314"/>
<source>group_chat_error_must_have_name</source>
<extracomment>&quot;Un nom doit être donné au groupe</extracomment>
<translation>A name must be set for the group</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="316"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="318"/>
<source>group_call_error_not_connected</source>
<extracomment>&quot;Vous n&apos;etes pas connecté&quot;</extracomment>
<translation>You are not connected</translation>
@ -2273,53 +2285,53 @@ Only your correspondent can decrypt them.</translation>
<context>
<name>ContactListItem</name>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="192"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="193"/>
<source>contact_details_remove_from_favourites</source>
<extracomment>&quot;Enlever des favoris&quot;</extracomment>
<translation>Remove from favorites</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="194"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="195"/>
<source>contact_details_add_to_favourites</source>
<extracomment>&quot;Ajouter aux favoris&quot;</extracomment>
<translation>Add to favorites</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="208"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="209"/>
<source>Partager</source>
<translation>Share</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="221"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="222"/>
<source>information_popup_error_title</source>
<translation>Error</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="223"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="224"/>
<source>information_popup_vcard_creation_error</source>
<extracomment>La création du fichier vcard a échoué</extracomment>
<translation>VCard creation failed</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="227"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="228"/>
<source>information_popup_vcard_creation_title</source>
<extracomment>VCard créée</extracomment>
<translation>VCard created</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="229"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="230"/>
<source>information_popup_vcard_creation_success</source>
<extracomment>&quot;VCard du contact enregistrée dans %1&quot;</extracomment>
<translation>VCard has been saved in %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="231"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="232"/>
<source>contact_sharing_email_title</source>
<extracomment>Partage de contact</extracomment>
<translation>Share contact</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="237"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="238"/>
<source>contact_details_delete</source>
<extracomment>&quot;Supprimer&quot;</extracomment>
<translation>Delete</translation>
@ -4843,28 +4855,40 @@ To enable them in a commercial project, please contact us.</translation>
<context>
<name>SelectedChatView</name>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="36"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="37"/>
<source>chat_view_group_call_toast_message</source>
<translation>Start a group call ?</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="311"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="317"/>
<source>reply_to_label</source>
<extracomment>Reply to %1</extracomment>
<translation>Reply to %1</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="517"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="518"/>
<source>shared_medias_title</source>
<extracomment>Shared medias</extracomment>
<translation>Shared medias</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="519"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="520"/>
<source>shared_documents_title</source>
<extracomment>Shared documents</extracomment>
<translation>Shared documents</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="549"/>
<source>forward_to_title</source>
<extracomment>Transfer to...</extracomment>
<translation>Transfer to</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="581"/>
<source>conversations_title</source>
<extracomment>Conversations</extracomment>
<translation>Conversations</translation>
</message>
</context>
<context>
<name>SettingsPage</name>
@ -5003,7 +5027,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="2189"/>
<location filename="../../tool/Utils.cpp" line="2221"/>
<source>nSeconds</source>
<translation>
<numerusform>%1 second</numerusform>
@ -5011,15 +5035,51 @@ To enable them in a commercial project, please contact us.</translation>
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2184"/>
<location filename="../../tool/Utils.cpp" line="2216"/>
<source>nMinute</source>
<translation>
<numerusform>%1 minute</numerusform>
<numerusform>%1 minutes</numerusform>
</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2036"/>
<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="2042"/>
<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="2057"/>
<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="2068"/>
<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="2074"/>
<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="2101"/>
<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="2185"/>
<location filename="../../tool/Utils.cpp" line="2217"/>
<source>nHour</source>
<translation>
<numerusform>%1 hour</numerusform>
@ -5027,8 +5087,8 @@ To enable them in a commercial project, please contact us.</translation>
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2186"/>
<location filename="../../tool/Utils.cpp" line="2187"/>
<location filename="../../tool/Utils.cpp" line="2218"/>
<location filename="../../tool/Utils.cpp" line="2219"/>
<source>nDay</source>
<translation>
<numerusform>%1 day</numerusform>
@ -5036,7 +5096,7 @@ To enable them in a commercial project, please contact us.</translation>
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2188"/>
<location filename="../../tool/Utils.cpp" line="2220"/>
<source>nWeek</source>
<translation>
<numerusform>%1 week</numerusform>
@ -5167,42 +5227,37 @@ Failed to create 1-1 conversation with %1 !</extracomment>
<translation>Failed to create 1-1 conversation with %1 !</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2036"/>
<source>chatMessage_error</source>
<extracomment>Cannot reply to invalid message</extracomment>
<translation>Cannot reply to invalid message</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2101"/>
<location filename="../../tool/Utils.cpp" line="2133"/>
<source>recorder_error</source>
<extracomment>Error with the recorder</extracomment>
<translation>Error with the recorder</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2038"/>
<location filename="../../tool/Utils.cpp" line="2103"/>
<location filename="../../tool/Utils.cpp" line="2070"/>
<location filename="../../tool/Utils.cpp" line="2135"/>
<source>chat_error</source>
<translation>Error in the chat</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2040"/>
<location filename="../../tool/Utils.cpp" line="2067"/>
<location filename="../../tool/Utils.cpp" line="2105"/>
<location filename="../../tool/Utils.cpp" line="2119"/>
<location filename="../../tool/Utils.cpp" line="2055"/>
<location filename="../../tool/Utils.cpp" line="2072"/>
<location filename="../../tool/Utils.cpp" line="2099"/>
<location filename="../../tool/Utils.cpp" line="2137"/>
<location filename="../../tool/Utils.cpp" line="2151"/>
<source>info_popup_error_title</source>
<extracomment>Error</extracomment>
<translation>Error</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2042"/>
<location filename="../../tool/Utils.cpp" line="2107"/>
<location filename="../../tool/Utils.cpp" line="2139"/>
<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="2069"/>
<location filename="../../tool/Utils.cpp" line="2121"/>
<location filename="../../tool/Utils.cpp" line="2153"/>
<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

@ -1720,47 +1720,47 @@
<context>
<name>ChatListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="275"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="276"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation>%1 est en train d&apos;écrire</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="277"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="278"/>
<source>chat_message_draft_sending_text</source>
<translation>Brouillon : %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="368"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="369"/>
<source>chat_room_delete</source>
<extracomment>&quot;Delete&quot;</extracomment>
<translation>Supprimer</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="346"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="347"/>
<source>chat_room_mute</source>
<translation>Mettre en sourdine</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="346"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="347"/>
<source>chat_room_unmute</source>
<extracomment>&quot;Mute&quot;</extracomment>
<translation>Enlever la sourdine </translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="357"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="358"/>
<source>chat_room_mark_as_read</source>
<extracomment>&quot;Mark as read&quot;</extracomment>
<translation>Marquer comme lu</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="374"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="375"/>
<source>chat_list_delete_chat_popup_title</source>
<extracomment>Delete the conversation ?</extracomment>
<translation>Supprimer la conversation ?</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="376"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="377"/>
<source>chat_list_delete_chat_popup_message</source>
<extracomment>This conversation and all its messages will be deleted. Do You want to continue ?</extracomment>
<translation>La conversation et tous ses messages seront supprimés. Souhaitez-vous continuer ?</translation>
@ -1769,67 +1769,79 @@
<context>
<name>ChatMessage</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="341"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="388"/>
<source>chat_message_copy_selection</source>
<extracomment>&quot;Copy selection&quot;</extracomment>
<translation>Copier la sélection</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="343"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="390"/>
<source>chat_message_copy</source>
<extracomment>&quot;Copy&quot;</extracomment>
<translation>Copier</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="351"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="398"/>
<source>chat_message_copied_to_clipboard_title</source>
<extracomment>Copied</extracomment>
<translation>Copié</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="353"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="400"/>
<source>chat_message_copied_to_clipboard_toast</source>
<extracomment>&quot;to clipboard&quot;</extracomment>
<translation>dans le presse-papiers</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="90"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="114"/>
<source>chat_message_remote_replied</source>
<extracomment>%1 replied</extracomment>
<translation>%1 a répondu</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="88"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="407"/>
<source>chat_message_forward</source>
<extracomment>Forward</extracomment>
<translation>Transférer</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="112"/>
<source>chat_message_remote_replied_to</source>
<extracomment>%1 replied to %2</extracomment>
<translation>%1 a répondu à %2</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="93"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="81"/>
<source>chat_message_forwarded</source>
<extracomment>Forwarded</extracomment>
<translation>Transféré</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="117"/>
<source>chat_message_user_replied_to</source>
<extracomment>You replied to %1</extracomment>
<translation>Vous avez répondu à %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="95"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="119"/>
<source>chat_message_user_replied</source>
<extracomment>You replied</extracomment>
<translation>Vous avez répondu</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="316"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="363"/>
<source>chat_message_reception_info</source>
<extracomment>&quot;Reception info&quot;</extracomment>
<translation>Info de réception</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="328"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="375"/>
<source>chat_message_reply</source>
<extracomment>Reply</extracomment>
<translation>Répondre</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="365"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="424"/>
<source>chat_message_delete</source>
<extracomment>&quot;Delete&quot;</extracomment>
<translation>Supprimer</translation>
@ -1925,13 +1937,13 @@ Error</extracomment>
<translation>Réactions</translation>
</message>
<message>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="196"/>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="198"/>
<source>info_toast_deleted_title</source>
<extracomment>Deleted</extracomment>
<translation>Supprimé</translation>
</message>
<message>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="198"/>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="200"/>
<source>info_toast_deleted_message</source>
<extracomment>The message has been deleted</extracomment>
<translation>Le message a é supprimé</translation>
@ -1984,13 +1996,13 @@ Error</extracomment>
<context>
<name>ChatMessagesListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="92"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="93"/>
<source>chat_message_list_encrypted_header_title</source>
<extracomment>End to end encrypted chat</extracomment>
<translation>Conversation chiffrée de bout en bout</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="102"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="103"/>
<source>chat_message_list_encrypted_header_message</source>
<extracomment>Les messages de cette conversation sont chiffrés de bout
en bout. Seul votre correspondant peut les déchiffrer.</extracomment>
@ -1998,7 +2010,7 @@ Error</extracomment>
en bout. Seul votre correspondant peut les déchiffrer.</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="231"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="233"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation>%1 est en train d&apos;écrire</translation>
@ -2061,37 +2073,37 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
<translation>Aucune conversation dans votre historique</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="246"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="248"/>
<source>chat_action_start_new_chat</source>
<extracomment>&quot;New chat&quot;</extracomment>
<translation>Nouvelle conversation</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="282"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="284"/>
<source>chat_start_group_chat_title</source>
<extracomment>&quot;Nouveau groupe&quot;</extracomment>
<translation>Nouveau groupe</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="284"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="286"/>
<source>chat_action_start_group_chat</source>
<extracomment>&quot;Créer&quot;</extracomment>
<translation>Créer</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="310"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="314"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="312"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="316"/>
<source>information_popup_error_title</source>
<translation>Erreur</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="312"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="314"/>
<source>group_chat_error_must_have_name</source>
<extracomment>&quot;Un nom doit être donné au groupe</extracomment>
<translation>Un nom doit être donné au groupe</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="316"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="318"/>
<source>group_call_error_not_connected</source>
<extracomment>&quot;Vous n&apos;etes pas connecté&quot;</extracomment>
<translation>Vous n&apos;êtes pas connecté</translation>
@ -2273,53 +2285,53 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
<context>
<name>ContactListItem</name>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="192"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="193"/>
<source>contact_details_remove_from_favourites</source>
<extracomment>&quot;Enlever des favoris&quot;</extracomment>
<translation>Enlever des favoris</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="194"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="195"/>
<source>contact_details_add_to_favourites</source>
<extracomment>&quot;Ajouter aux favoris&quot;</extracomment>
<translation>Ajouter aux favoris</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="208"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="209"/>
<source>Partager</source>
<translation>Partager</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="221"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="222"/>
<source>information_popup_error_title</source>
<translation>Erreur</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="223"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="224"/>
<source>information_popup_vcard_creation_error</source>
<extracomment>La création du fichier vcard a échoué</extracomment>
<translation>La création du fichier vcard a échoué</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="227"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="228"/>
<source>information_popup_vcard_creation_title</source>
<extracomment>VCard créée</extracomment>
<translation>VCard créée</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="229"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="230"/>
<source>information_popup_vcard_creation_success</source>
<extracomment>&quot;VCard du contact enregistrée dans %1&quot;</extracomment>
<translation>VCard du contact enregistrée dans %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="231"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="232"/>
<source>contact_sharing_email_title</source>
<extracomment>Partage de contact</extracomment>
<translation>Partage de contact</translation>
</message>
<message>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="237"/>
<location filename="../../view/Control/Display/Contact/ContactListItem.qml" line="238"/>
<source>contact_details_delete</source>
<extracomment>&quot;Supprimer&quot;</extracomment>
<translation>Supprimer</translation>
@ -4843,28 +4855,40 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
<context>
<name>SelectedChatView</name>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="36"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="37"/>
<source>chat_view_group_call_toast_message</source>
<translation>Démarrer un appel de groupe ?</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="311"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="317"/>
<source>reply_to_label</source>
<extracomment>Reply to %1</extracomment>
<translation>Réponse à %1</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="517"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="518"/>
<source>shared_medias_title</source>
<extracomment>Shared medias</extracomment>
<translation>Médias partagés</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="519"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="520"/>
<source>shared_documents_title</source>
<extracomment>Shared documents</extracomment>
<translation>Documents partagés</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="549"/>
<source>forward_to_title</source>
<extracomment>Transfer to...</extracomment>
<translation>Transférer à</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="581"/>
<source>conversations_title</source>
<extracomment>Conversations</extracomment>
<translation>Conversations</translation>
</message>
</context>
<context>
<name>SettingsPage</name>
@ -5003,7 +5027,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="2184"/>
<location filename="../../tool/Utils.cpp" line="2216"/>
<source>nMinute</source>
<translation>
<numerusform>%1 minute</numerusform>
@ -5011,7 +5035,7 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2185"/>
<location filename="../../tool/Utils.cpp" line="2217"/>
<source>nHour</source>
<translation>
<numerusform>%1 heure</numerusform>
@ -5019,8 +5043,8 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2186"/>
<location filename="../../tool/Utils.cpp" line="2187"/>
<location filename="../../tool/Utils.cpp" line="2218"/>
<location filename="../../tool/Utils.cpp" line="2219"/>
<source>nDay</source>
<translation>
<numerusform>%1 jour</numerusform>
@ -5028,7 +5052,7 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2188"/>
<location filename="../../tool/Utils.cpp" line="2220"/>
<source>nWeek</source>
<translation>
<numerusform>%1 semaine</numerusform>
@ -5036,7 +5060,7 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
</translation>
</message>
<message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2189"/>
<location filename="../../tool/Utils.cpp" line="2221"/>
<source>nSeconds</source>
<translation>
<numerusform>%1 seconde</numerusform>
@ -5167,42 +5191,73 @@ Failed to create 1-1 conversation with %1 !</extracomment>
<translation>Erreur lors de la création de la conversation avec %1</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2036"/>
<source>chatMessage_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="2101"/>
<location filename="../../tool/Utils.cpp" line="2133"/>
<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="2038"/>
<location filename="../../tool/Utils.cpp" line="2103"/>
<location filename="../../tool/Utils.cpp" line="2070"/>
<location filename="../../tool/Utils.cpp" line="2135"/>
<source>chat_error</source>
<translation>Erreur dans le chat</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2036"/>
<source>chat_message_forward_error</source>
<extracomment>Cannot forward an invalid message</extracomment>
<translation>Transfert impossible: message invalide</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2040"/>
<location filename="../../tool/Utils.cpp" line="2067"/>
<location filename="../../tool/Utils.cpp" line="2105"/>
<location filename="../../tool/Utils.cpp" line="2119"/>
<location filename="../../tool/Utils.cpp" line="2055"/>
<location filename="../../tool/Utils.cpp" line="2072"/>
<location filename="../../tool/Utils.cpp" line="2099"/>
<location filename="../../tool/Utils.cpp" line="2137"/>
<location filename="../../tool/Utils.cpp" line="2151"/>
<source>info_popup_error_title</source>
<extracomment>Error</extracomment>
<translation>Erreur</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2042"/>
<location filename="../../tool/Utils.cpp" line="2107"/>
<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="2057"/>
<source>info_popup_send_forward_message_error_message</source>
<extracomment>Failed to create forward message</extracomment>
<translation>Le transfert du message a échoué</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2068"/>
<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="2074"/>
<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="2101"/>
<source>info_popup_send_reply_message_error_message</source>
<extracomment>Failed to create reply message</extracomment>
<translation>La création du message a échoué</translation>
</message>
<message>
<location filename="../../tool/Utils.cpp" line="2139"/>
<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="2069"/>
<location filename="../../tool/Utils.cpp" line="2121"/>
<location filename="../../tool/Utils.cpp" line="2153"/>
<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

@ -148,6 +148,11 @@ ChatModel::createReplyMessage(const std::shared_ptr<linphone::ChatMessage> &mess
return mMonitor->createReplyMessage(message);
}
std::shared_ptr<linphone::ChatMessage>
ChatModel::createForwardMessage(const std::shared_ptr<linphone::ChatMessage> &message) {
return mMonitor->createForwardMessage(message);
}
std::shared_ptr<linphone::ChatMessage> ChatModel::createTextMessageFromText(QString text) {
return mMonitor->createMessageFromUtf8(Utils::appStringToCoreString(text));
}

View file

@ -54,6 +54,7 @@ public:
createVoiceRecordingMessage(const std::shared_ptr<linphone::Recorder> &recorder);
std::shared_ptr<linphone::ChatMessage> createReplyMessage(const std::shared_ptr<linphone::ChatMessage> &message);
std::shared_ptr<linphone::ChatMessage> createForwardMessage(const std::shared_ptr<linphone::ChatMessage> &message);
std::shared_ptr<linphone::ChatMessage> createTextMessageFromText(QString text);
std::shared_ptr<linphone::ChatMessage> createMessage(QString text,

View file

@ -2028,18 +2028,50 @@ QString Utils::getSafeFilePath(const QString &filePath, bool *soFarSoGood) {
return QString("");
}
void Utils::forwardMessageTo(ChatMessageGui *message, ChatGui *chatGui) {
auto chatModel = chatGui && chatGui->mCore ? chatGui->mCore->getModel() : nullptr;
auto chatMessageModel = message && message->mCore ? message->mCore->getModel() : nullptr;
if (!chatModel || !chatMessageModel) {
//: Cannot forward an invalid message
QString error = !chatMessageModel ? tr("chat_message_forward_error")
//: Error creating or opening the chat
: tr("chat_error");
//: Error
showInformationPopup(tr("info_popup_error_title"),
//: Could not forward message : %1
tr("info_popup_forward_message_error").arg(error));
return;
}
App::postModelAsync([chatModel, chatMessageModel] {
mustBeInLinphoneThread(sLog().arg(Q_FUNC_INFO));
auto chat = chatModel->getMonitor();
auto messageToForward = chatMessageModel->getMonitor();
auto linMessage = chatModel->createForwardMessage(messageToForward);
if (linMessage) {
linMessage->send();
} else {
App::postCoreAsync([] {
//: Error
showInformationPopup(tr("info_popup_error_title"),
//: Failed to create forward message
tr("info_popup_send_forward_message_error_message"));
});
}
});
}
void Utils::sendReplyMessage(ChatMessageGui *message, ChatGui *chatGui, QString text, QVariantList files) {
auto chatModel = chatGui && chatGui->mCore ? chatGui->mCore->getModel() : nullptr;
auto chatMessageModel = message && message->mCore ? message->mCore->getModel() : nullptr;
if (!chatModel || !chatMessageModel) {
//: Cannot reply to invalid message
QString error = !chatMessageModel ? tr("chatMessage_error")
QString error = !chatMessageModel ? tr("chat_message_reply_error")
//: Error in the chat
: tr("chat_error");
//: Error
showInformationPopup(tr("info_popup_error_title"),
//: Could not send voice message : %1
tr("info_popup_send_voice_message_error_message").arg(error));
//: Could not send reply message : %1
tr("info_popup_reply_message_error").arg(error));
return;
}
QList<std::shared_ptr<ChatMessageContentModel>> filesContent;
@ -2065,8 +2097,8 @@ void Utils::sendReplyMessage(ChatMessageGui *message, ChatGui *chatGui, QString
App::postCoreAsync([] {
//: Error
showInformationPopup(tr("info_popup_error_title"),
//: Failed to create message from record
tr("info_popup_send_voice_message_sending_error_message"));
//: Failed to create reply message
tr("info_popup_send_reply_message_error_message"));
});
}
});

View file

@ -180,6 +180,8 @@ public:
Q_INVOKABLE static VariantObject *createVoiceRecordingMessage(RecorderGui *recorderGui, ChatGui *chatGui);
Q_INVOKABLE static void
sendReplyMessage(ChatMessageGui *message, ChatGui *chatGui, QString text, QVariantList files);
Q_INVOKABLE static void forwardMessageTo(ChatMessageGui *message, ChatGui *chatGui);
Q_INVOKABLE static void sendVoiceRecordingMessage(RecorderGui *recorderGui, ChatGui *chatGui);
Q_INVOKABLE static QString getEphemeralFormatedTime(int selectedTime);

View file

@ -22,6 +22,7 @@ ListView {
signal resultsReceived()
signal markAllAsRead()
signal chatClicked(ChatGui chat)
onResultsReceived: {
loading = false
@ -411,6 +412,7 @@ ListView {
if (pressedButtons & Qt.RightButton) {
chatroomPopup.open()
} else {
mainItem.chatClicked(modelData)
mainItem.currentIndex = model.index
mainItem.forceActiveFocus()
}

View file

@ -21,6 +21,7 @@ Control.Control {
property bool isRemoteMessage: chatMessage? chatMessage.core.isRemoteMessage : false
property bool isFromChatGroup: chatMessage? chatMessage.core.isFromChatGroup : false
property bool isReply: chatMessage? chatMessage.core.isReply : false
property bool isForward: chatMessage? chatMessage.core.isForward : false
property string replyText: chatMessage? chatMessage.core.replyText : false
property var msgState: chatMessage ? chatMessage.core.messageState : LinphoneEnums.ChatMessageState.StateIdle
hoverEnabled: true
@ -34,6 +35,7 @@ Control.Control {
signal showReactionsForMessageRequested()
signal showImdnStatusForMessageRequested()
signal replyToMessageRequested()
signal forwardMessageRequested()
background: Item {
anchors.fill: parent
@ -62,6 +64,28 @@ Control.Control {
weight: Typography.p4.weight
}
}
RowLayout {
id: forwardLayout
spacing: Math.round(8 * DefaultStyle.dp)
visible: mainItem.isForward
Layout.leftMargin: mainItem.isFromChatGroup ? Math.round(9 * DefaultStyle.dp) + avatar.width : 0
Layout.alignment: mainItem.isRemoteMessage ? Qt.AlignLeft: Qt.AlignRight
EffectImage {
imageSource: AppIcons.forward
colorizationColor: DefaultStyle.main2_500main
Layout.preferredWidth: Math.round(12 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(12 * DefaultStyle.dp)
}
Text {
//: Forwarded
text: qsTr("chat_message_forwarded")
color: DefaultStyle.main2_600
font {
pixelSize: Typography.p4.pixelSize
weight: Typography.p4.weight
}
}
}
RowLayout {
id: replyLayout
visible: mainItem.isReply
@ -377,6 +401,18 @@ Control.Control {
optionsMenu.close()
}
}
IconLabelButton {
inverseLayout: true
//: Forward
text: qsTr("chat_message_forward")
icon.source: AppIcons.forward
Layout.fillWidth: true
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
onClicked: {
mainItem.forwardMessageRequested()
optionsMenu.close()
}
}
Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: Math.min(1, Math.round(1 * DefaultStyle.dp))

View file

@ -18,6 +18,7 @@ ListView {
signal showReactionsForMessageRequested(ChatMessageGui chatMessage)
signal showImdnStatusForMessageRequested(ChatMessageGui chatMessage)
signal replyToMessageRequested(ChatMessageGui chatMessage)
signal forwardMessageRequested(ChatMessageGui chatMessage)
Component.onCompleted: {
Qt.callLater(function() {
@ -64,7 +65,7 @@ ListView {
header: Item {
visible: mainItem.chat && mainItem.chat.core.isEncrypted
height: visible ? headerMessage.height + Math.round(50 * DefaultStyle.dp) : 0
height: visible ? headerMessage.height + Math.round(50 * DefaultStyle.dp) : Math.round(30 * DefaultStyle.dp)
width: headerMessage.width
anchors.horizontalCenter: parent.horizontalCenter
Control.Control {
@ -150,6 +151,7 @@ ListView {
onShowReactionsForMessageRequested: mainItem.showReactionsForMessageRequested(modelData)
onShowImdnStatusForMessageRequested: mainItem.showImdnStatusForMessageRequested(modelData)
onReplyToMessageRequested: mainItem.replyToMessageRequested(modelData)
onForwardMessageRequested: mainItem.forwardMessageRequested(modelData)
}
}

View file

@ -40,225 +40,224 @@ FocusScope {
signal contactDeletionRequested(FriendGui contact)
signal containsMouseChanged(bool containsMouse)
Text {
id: initial
anchors.left: parent.left
visible: mainItem.showInitials
anchors.verticalCenter: parent.verticalCenter
anchors.rightMargin: Math.round(15 * DefaultStyle.dp)
verticalAlignment: Text.AlignVCenter
width: Math.round(20 * DefaultStyle.dp)
opacity: previousInitial != mainItem.initial ? 1 : 0
text: mainItem.initial || ""
color: DefaultStyle.main2_400
font {
pixelSize: Math.round(20 * DefaultStyle.dp)
weight: Math.round(500 * DefaultStyle.dp)
capitalization: Font.AllUppercase
}
}
RowLayout {
id: contactDelegate
anchors.left: initial.visible ? initial.right : parent.left
anchors.right: parent.right
anchors.rightMargin: mainItem.itemsRightMargin
anchors.top: parent.top
anchors.bottom: parent.bottom
spacing: Math.round(16 * DefaultStyle.dp)
z: 1
Avatar {
Layout.preferredWidth: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
Layout.leftMargin: Math.round(5 * DefaultStyle.dp)
contact: searchResultItem
shadowEnabled: false
}
ColumnLayout {
spacing: 0
Text {
text: UtilsCpp.boldTextPart(mainItem.displayName,
mainItem.highlightText)
font {
pixelSize: mainItem.showDefaultAddress ? Typography.h4.pixelSize : Typography.p1.pixelSize
capitalization: mainItem.displayNameCapitalization ? Font.Capitalize : Font.MixedCase
weight: mainItem.showDefaultAddress ? Typography.h4.weight : Typography.p1.weight
}
maximumLineCount: 1
Layout.fillWidth: true
MouseArea {
Text {
id: initial
anchors.left: parent.left
visible: mainItem.showInitials
anchors.verticalCenter: parent.verticalCenter
anchors.rightMargin: Math.round(15 * DefaultStyle.dp)
verticalAlignment: Text.AlignVCenter
width: Math.round(20 * DefaultStyle.dp)
opacity: previousInitial != mainItem.initial ? 1 : 0
text: mainItem.initial || ""
color: DefaultStyle.main2_400
font {
pixelSize: Math.round(20 * DefaultStyle.dp)
weight: Math.round(500 * DefaultStyle.dp)
capitalization: Font.AllUppercase
}
Text {
Layout.topMargin: Math.round(2 * DefaultStyle.dp)
Layout.fillWidth: true
visible: mainItem.showDefaultAddress
property string address: SettingsCpp.onlyDisplaySipUriUsername
? UtilsCpp.getUsername(mainItem.addressFromFilter)
: mainItem.addressFromFilter
text: UtilsCpp.boldTextPart(address, mainItem.highlightText)
maximumLineCount: 1
elide: Text.ElideRight
font {
weight: Math.round(300 * DefaultStyle.dp)
pixelSize: Math.round(12 * DefaultStyle.dp)
}
}
}
Item {
Layout.fillWidth: true
}
RowLayout {
id: actionsRow
z: 1
visible: mainItem.showActions || actionButtons.visible || mainItem.showContactMenu || mainItem.multiSelectionEnabled
spacing: visible ? Math.round(16 * DefaultStyle.dp) : 0
enabled: visible
Layout.rightMargin: Math.round(5 * DefaultStyle.dp)
EffectImage {
id: isSelectedCheck
visible: mainItem.multiSelectionEnabled
&& (mainItem.selectedContacts.indexOf(mainItem.addressFromFilter) != -1)
Layout.preferredWidth: Math.round(24 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(24 * DefaultStyle.dp)
imageSource: AppIcons.check
colorizationColor: DefaultStyle.main1_500_main
id: contactDelegate
anchors.left: initial.visible ? initial.right : parent.left
anchors.right: parent.right
anchors.rightMargin: mainItem.itemsRightMargin
anchors.top: parent.top
anchors.bottom: parent.bottom
spacing: Math.round(16 * DefaultStyle.dp)
z: contactArea.z + 1
Avatar {
Layout.preferredWidth: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
Layout.leftMargin: Math.round(5 * DefaultStyle.dp)
contact: searchResultItem
shadowEnabled: false
}
ColumnLayout {
spacing: 0
Text {
text: UtilsCpp.boldTextPart(mainItem.displayName,
mainItem.highlightText)
font {
pixelSize: mainItem.showDefaultAddress ? Typography.h4.pixelSize : Typography.p1.pixelSize
capitalization: mainItem.displayNameCapitalization ? Font.Capitalize : Font.MixedCase
weight: mainItem.showDefaultAddress ? Typography.h4.weight : Typography.p1.weight
}
maximumLineCount: 1
Layout.fillWidth: true
}
Text {
Layout.topMargin: Math.round(2 * DefaultStyle.dp)
Layout.fillWidth: true
visible: mainItem.showDefaultAddress
property string address: SettingsCpp.onlyDisplaySipUriUsername
? UtilsCpp.getUsername(mainItem.addressFromFilter)
: mainItem.addressFromFilter
text: UtilsCpp.boldTextPart(address, mainItem.highlightText)
maximumLineCount: 1
elide: Text.ElideRight
font {
weight: Math.round(300 * DefaultStyle.dp)
pixelSize: Math.round(12 * DefaultStyle.dp)
}
}
}
Item {
Layout.fillWidth: true
}
RowLayout {
id: actionButtons
visible: mainItem.showActions
spacing: visible ? Math.round(10 * DefaultStyle.dp) : 0
IconButton {
id: callButton
Layout.preferredWidth: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
icon.width: Math.round(24 * DefaultStyle.dp)
icon.height: Math.round(24 * DefaultStyle.dp)
icon.source: AppIcons.phone
focus: visible
radius: Math.round(40 * DefaultStyle.dp)
style: ButtonStyle.grey
onClicked: UtilsCpp.createCall(mainItem.addressFromFilter)
KeyNavigation.left: chatButton
KeyNavigation.right: videoCallButton
}
IconButton {
id: videoCallButton
visible: SettingsCpp.videoEnabled
Layout.preferredWidth: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
icon.width: Math.round(24 * DefaultStyle.dp)
icon.height: Math.round(24 * DefaultStyle.dp)
icon.source: AppIcons.videoCamera
focus: visible && !callButton.visible
radius: Math.round(40 * DefaultStyle.dp)
style: ButtonStyle.grey
onClicked: UtilsCpp.createCall(mainItem.addressFromFilter, {"localVideoEnabled": true})
KeyNavigation.left: callButton
KeyNavigation.right: chatButton
}
IconButton {
id: chatButton
visible: actionButtons.visible
&& !SettingsCpp.disableChatFeature
Layout.preferredWidth: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
icon.width: Math.round(24 * DefaultStyle.dp)
icon.height: Math.round(24 * DefaultStyle.dp)
icon.source: AppIcons.chatTeardropText
focus: visible && !callButton.visible
&& !videoCallButton.visible
radius: Math.round(40 * DefaultStyle.dp)
style: ButtonStyle.grey
KeyNavigation.left: videoCallButton
KeyNavigation.right: callButton
onClicked: {
console.debug("[ContactListItem.qml] Open conversation")
mainWindow.displayChatPage(mainItem.addressFromFilter)
}
}
}
PopupButton {
id: friendPopup
z: 1
popup.x: 0
popup.padding: Math.round(10 * DefaultStyle.dp)
visible: mainItem.showContactMenu && (contactArea.containsMouse || mainItem.isLastHovered || hovered || popup.opened)
id: actionsRow
z: contactArea.z + 1
visible: mainItem.showActions || actionButtons.visible || mainItem.showContactMenu || mainItem.multiSelectionEnabled
spacing: visible ? Math.round(16 * DefaultStyle.dp) : 0
enabled: visible
Layout.rightMargin: Math.round(5 * DefaultStyle.dp)
EffectImage {
id: isSelectedCheck
visible: mainItem.multiSelectionEnabled
&& (mainItem.selectedContacts.indexOf(mainItem.addressFromFilter) != -1)
Layout.preferredWidth: Math.round(24 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(24 * DefaultStyle.dp)
imageSource: AppIcons.check
colorizationColor: DefaultStyle.main1_500_main
}
RowLayout {
id: actionButtons
visible: mainItem.showActions
spacing: visible ? Math.round(10 * DefaultStyle.dp) : 0
IconButton {
id: callButton
Layout.preferredWidth: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
icon.width: Math.round(24 * DefaultStyle.dp)
icon.height: Math.round(24 * DefaultStyle.dp)
icon.source: AppIcons.phone
focus: visible
radius: Math.round(40 * DefaultStyle.dp)
style: ButtonStyle.grey
onClicked: UtilsCpp.createCall(mainItem.addressFromFilter)
KeyNavigation.left: chatButton
KeyNavigation.right: videoCallButton
}
IconButton {
id: videoCallButton
visible: SettingsCpp.videoEnabled
Layout.preferredWidth: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
icon.width: Math.round(24 * DefaultStyle.dp)
icon.height: Math.round(24 * DefaultStyle.dp)
icon.source: AppIcons.videoCamera
focus: visible && !callButton.visible
radius: Math.round(40 * DefaultStyle.dp)
style: ButtonStyle.grey
onClicked: UtilsCpp.createCall(mainItem.addressFromFilter, {"localVideoEnabled": true})
KeyNavigation.left: callButton
KeyNavigation.right: chatButton
}
IconButton {
id: chatButton
visible: actionButtons.visible
&& !SettingsCpp.disableChatFeature
Layout.preferredWidth: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
icon.width: Math.round(24 * DefaultStyle.dp)
icon.height: Math.round(24 * DefaultStyle.dp)
icon.source: AppIcons.chatTeardropText
focus: visible && !callButton.visible
&& !videoCallButton.visible
radius: Math.round(40 * DefaultStyle.dp)
style: ButtonStyle.grey
KeyNavigation.left: videoCallButton
KeyNavigation.right: callButton
onClicked: {
console.debug("[ContactListItem.qml] Open conversation")
mainWindow.displayChatPage(mainItem.addressFromFilter)
}
}
}
PopupButton {
id: friendPopup
z: contactArea.z + 1
popup.x: 0
popup.padding: Math.round(10 * DefaultStyle.dp)
visible: mainItem.showContactMenu && (contactArea.containsMouse || mainItem.isLastHovered || hovered || popup.opened)
enabled: visible
popup.contentItem: ColumnLayout {
IconLabelButton {
Layout.fillWidth: true
visible: searchResultItem.core.isStored
&& !searchResultItem.core.readOnly
//: "Enlever des favoris"
text: searchResultItem.core.starred ? qsTr("contact_details_remove_from_favourites")
//: "Ajouter aux favoris"
: qsTr("contact_details_add_to_favourites")
icon.source: searchResultItem.core.starred ? AppIcons.heartFill : AppIcons.heart
spacing: Math.round(10 * DefaultStyle.dp)
textColor: DefaultStyle.main2_500main
hoveredImageColor: searchResultItem.core.starred ? DefaultStyle.main1_700 : DefaultStyle.danger_700
contentImageColor: searchResultItem.core.starred ? DefaultStyle.danger_500main : DefaultStyle.main2_600
onClicked: {
searchResultItem.core.lSetStarred(
!searchResultItem.core.starred)
friendPopup.close()
popup.contentItem: ColumnLayout {
IconLabelButton {
Layout.fillWidth: true
visible: searchResultItem.core.isStored
&& !searchResultItem.core.readOnly
//: "Enlever des favoris"
text: searchResultItem.core.starred ? qsTr("contact_details_remove_from_favourites")
//: "Ajouter aux favoris"
: qsTr("contact_details_add_to_favourites")
icon.source: searchResultItem.core.starred ? AppIcons.heartFill : AppIcons.heart
spacing: Math.round(10 * DefaultStyle.dp)
textColor: DefaultStyle.main2_500main
hoveredImageColor: searchResultItem.core.starred ? DefaultStyle.main1_700 : DefaultStyle.danger_700
contentImageColor: searchResultItem.core.starred ? DefaultStyle.danger_500main : DefaultStyle.main2_600
onClicked: {
searchResultItem.core.lSetStarred(
!searchResultItem.core.starred)
friendPopup.close()
}
style: ButtonStyle.noBackground
}
style: ButtonStyle.noBackground
}
IconLabelButton {
text: qsTr("Partager")
Layout.fillWidth: true
icon.source: AppIcons.shareNetwork
spacing: Math.round(10 * DefaultStyle.dp)
textColor: DefaultStyle.main2_500main
onClicked: {
var vcard = searchResultItem.core.getVCard()
var username = searchResultItem.core.givenName
+ searchResultItem.core.familyName
var filepath = UtilsCpp.createVCardFile(
username, vcard)
if (filepath == "")
UtilsCpp.showInformationPopup(
qsTr("information_popup_error_title"),
//: La création du fichier vcard a échoué
qsTr("information_popup_vcard_creation_error"),
false)
else
//: VCard créée
mainWindow.showInformationPopup(qsTr("information_popup_vcard_creation_title"),
//: "VCard du contact enregistrée dans %1"
qsTr("information_popup_vcard_creation_success").arg(filepath))
//: Partage de contact
UtilsCpp.shareByEmail(qsTr("contact_sharing_email_title"),vcard, filepath)
IconLabelButton {
text: qsTr("Partager")
Layout.fillWidth: true
icon.source: AppIcons.shareNetwork
spacing: Math.round(10 * DefaultStyle.dp)
textColor: DefaultStyle.main2_500main
onClicked: {
var vcard = searchResultItem.core.getVCard()
var username = searchResultItem.core.givenName
+ searchResultItem.core.familyName
var filepath = UtilsCpp.createVCardFile(
username, vcard)
if (filepath == "")
UtilsCpp.showInformationPopup(
qsTr("information_popup_error_title"),
//: La création du fichier vcard a échoué
qsTr("information_popup_vcard_creation_error"),
false)
else
//: VCard créée
mainWindow.showInformationPopup(qsTr("information_popup_vcard_creation_title"),
//: "VCard du contact enregistrée dans %1"
qsTr("information_popup_vcard_creation_success").arg(filepath))
//: Partage de contact
UtilsCpp.shareByEmail(qsTr("contact_sharing_email_title"),vcard, filepath)
}
style: ButtonStyle.noBackground
}
style: ButtonStyle.noBackground
}
IconLabelButton {
//: "Supprimer"
text: qsTr("contact_details_delete")
icon.source: AppIcons.trashCan
spacing: Math.round(10 * DefaultStyle.dp)
visible: !searchResultItem.core.readOnly
Layout.fillWidth: true
onClicked: {
mainItem.contactDeletionRequested(
searchResultItem)
friendPopup.close()
IconLabelButton {
//: "Supprimer"
text: qsTr("contact_details_delete")
icon.source: AppIcons.trashCan
spacing: Math.round(10 * DefaultStyle.dp)
visible: !searchResultItem.core.readOnly
Layout.fillWidth: true
onClicked: {
mainItem.contactDeletionRequested(
searchResultItem)
friendPopup.close()
}
style: ButtonStyle.noBackgroundRed
}
style: ButtonStyle.noBackgroundRed
}
}
}
}
}
MouseArea {
id: contactArea
enabled: mainItem.selectionEnabled
anchors.fill: contactDelegate
anchors.fill: parent
//height: mainItem.height
hoverEnabled: true
acceptedButtons: Qt.AllButtons
z: -1
focus: !actionButtons.visible
onContainsMouseChanged: {
mainItem.containsMouseChanged(containsMouse)
@ -271,21 +270,21 @@ FocusScope {
visible: mainItem.isLastHovered || mainItem.isSelected || friendPopup.hovered
}
Keys.onPressed: event => {
if (event.key == Qt.Key_Space
|| event.key == Qt.Key_Enter
|| event.key == Qt.Key_Return) {
contactArea.clicked(undefined)
event.accepted = true
}
}
if (event.key == Qt.Key_Space
|| event.key == Qt.Key_Enter
|| event.key == Qt.Key_Return) {
contactArea.clicked(undefined)
event.accepted = true
}
}
onClicked: mouse => {
forceActiveFocus()
if (mouse && mouse.button == Qt.RightButton
&& mainItem.showContactMenu) {
if (friendPopup) friendPopup.open()
} else {
mainItem.clicked(mouse)
}
}
forceActiveFocus()
if (mouse && mouse.button == Qt.RightButton
&& mainItem.showContactMenu) {
if (friendPopup) friendPopup.open()
} else {
mainItem.clicked(mouse)
}
}
}
}

View file

@ -170,15 +170,11 @@ ListView {
Item {
Layout.fillWidth: true
}
Button {
RoundButton {
id: headerExpandButton
style: ButtonStyle.noBackground
icon.source: mainItem.expanded ? AppIcons.upArrow : AppIcons.downArrow
Layout.fillHeight: true
Layout.preferredWidth: height
Layout.rightMargin: Math.round(23 * DefaultStyle.dp)
icon.width: Math.round(24 * DefaultStyle.dp)
icon.height: Math.round(24 * DefaultStyle.dp)
Layout.rightMargin: mainItem.itemsRightMargin
focus: true
onClicked: mainItem.expanded = !mainItem.expanded
}

View file

@ -20,6 +20,7 @@ RowLayout {
property alias callHeaderContent: splitPanel.headerContent
property bool replyingToMessage: false
spacing: 0
enum PanelType { MessageReactions, SharedFiles, Medias, ImdnStatus, ForwardToList, ManageParticipants, EphemeralSettings, None}
signal oneOneCall(bool video)
signal groupCall()
@ -154,18 +155,23 @@ RowLayout {
Control.ScrollBar.vertical: scrollbar
onShowReactionsForMessageRequested: (chatMessage) => {
mainItem.chatMessage = chatMessage
contentLoader.showingMessageReactions = true
contentLoader.panelType = SelectedChatView.PanelType.MessageReactions
detailsPanel.visible = true
}
onShowImdnStatusForMessageRequested: (chatMessage) => {
mainItem.chatMessage = chatMessage
contentLoader.showingImdnStatus = true
contentLoader.panelType = SelectedChatView.PanelType.ImdnStatus
detailsPanel.visible = true
}
onReplyToMessageRequested: (chatMessage) => {
mainItem.chatMessage = chatMessage
mainItem.replyingToMessage = true
}
onForwardMessageRequested: (chatMessage) => {
mainItem.chatMessage = chatMessage
contentLoader.panelType = SelectedChatView.PanelType.ForwardToList
detailsPanel.visible = true
}
Popup {
id: emojiPickerPopup
@ -422,8 +428,7 @@ RowLayout {
Layout.fillHeight: true
Layout.preferredWidth: Math.round(387 * DefaultStyle.dp)
onVisibleChanged: if(!visible) {
contentLoader.showingMessageReactions = false
contentLoader.showingImdnStatus = false
contentLoader.panelType = SelectedChatView.PanelType.None
}
background: Rectangle {
@ -433,27 +438,25 @@ RowLayout {
contentItem: Loader {
id: contentLoader
property bool showingMessageReactions: false
property bool showingSharedFiles: false
property bool showingMedias: false
property bool showingImdnStatus: false
property bool showingManageParticipants: false
property bool showingEphemeralSettings: false
anchors.top: parent.top
property int panelType: SelectedChatView.PanelType.None
// anchors.top: parent.top
anchors.fill: parent
anchors.topMargin: Math.round(39 * DefaultStyle.dp)
sourceComponent: showingEphemeralSettings
sourceComponent: panelType === SelectedChatView.PanelType.EphemeralSettings
? ephemeralSettingsComponent
: showingMessageReactions
: panelType === SelectedChatView.PanelType.MessageReactions
? messageReactionsComponent
: showingImdnStatus
: panelType === SelectedChatView.PanelType.ImdnStatus
? messageImdnStatusComponent
: showingSharedFiles
: panelType === SelectedChatView.PanelType.SharedFiles || panelType === SelectedChatView.PanelType.Medias
? sharedFilesComponent
: showingManageParticipants
? manageParticipantsComponent
: mainItem.chat.core.isGroupChat
? groupInfoComponent
: oneToOneInfoComponent
: panelType === SelectedChatView.PanelType.ForwardToList
? forwardToListsComponent
: panelType === SelectedChatView.PanelType.ManageParticipants
? manageParticipantsComponent
: mainItem.chat.core.isGroupChat
? groupInfoComponent
: oneToOneInfoComponent
active: detailsPanel.visible
onLoaded: {
if (contentLoader.item && contentLoader.item.parentView) {
@ -466,10 +469,9 @@ RowLayout {
id: oneToOneInfoComponent
OneOneConversationInfos {
chatGui: mainItem.chat
onEphemeralSettingsRequested: contentLoader.showingEphemeralSettings = true
onEphemeralSettingsRequested: contentLoader.panelType = SelectedChatView.PanelType.EphemeralSettings
onShowSharedFilesRequested: (showMedias) => {
contentLoader.showingSharedFiles = true
contentLoader.showingMedias = showMedias
contentLoader.panelType = showMedias ? SelectedChatView.PanelType.SharedFiles : SelectedChatView.PanelType.Medias
}
}
}
@ -478,12 +480,11 @@ RowLayout {
id: groupInfoComponent
GroupConversationInfos {
chatGui: mainItem.chat
onManageParticipantsRequested: contentLoader.showingManageParticipants = true
onManageParticipantsRequested: contentLoader.panelType = SelectedChatView.PanelType.ManageParticipants
onShowSharedFilesRequested: (showMedias) => {
contentLoader.showingSharedFiles = true
contentLoader.showingMedias = showMedias
contentLoader.panelType = showMedias ? SelectedChatView.PanelType.SharedFiles : SelectedChatView.PanelType.Medias
}
onEphemeralSettingsRequested: contentLoader.showingEphemeralSettings = true
onEphemeralSettingsRequested: contentLoader.panelType = SelectedChatView.PanelType.EphemeralSettings
}
}
@ -512,15 +513,15 @@ RowLayout {
id: sharedFilesComponent
MessageSharedFilesInfos {
chatGui: mainItem.chat
title: contentLoader.showingMedias
title: contentLoader.panelType === SelectedChatView.PanelType.Medias
//: Shared medias
? qsTr("shared_medias_title")
//: Shared documents
: qsTr("shared_documents_title")
filter: contentLoader.showingMedias ? ChatMessageFileProxy.FilterContentType.Medias : ChatMessageFileProxy.FilterContentType.Documents
filter: contentLoader.panelType === SelectedChatView.PanelType.Medias ? ChatMessageFileProxy.FilterContentType.Medias : ChatMessageFileProxy.FilterContentType.Documents
onGoBackRequested: {
// detailsPanel.visible = false
contentLoader.showingSharedFiles = false
contentLoader.panelType = SelectedChatView.PanelType.SharedFiles
}
}
}
@ -529,7 +530,7 @@ RowLayout {
id: manageParticipantsComponent
ManageParticipants {
chatGui: mainItem.chat
onDone: contentLoader.showingManageParticipants = false
onDone: contentLoader.panelType = SelectedChatView.PanelType.None
}
}
@ -537,8 +538,98 @@ RowLayout {
id: ephemeralSettingsComponent
EphemeralSettings {
chatGui: mainItem.chat
onDone: contentLoader.showingEphemeralSettings = false
onDone: contentLoader.panelType = SelectedChatView.PanelType.None
}
}
Component {
id: forwardToListsComponent
MessageInfosLayout {
//: Transfer to...
title: qsTr("forward_to_title")
// width: detailsPanel.width
// RectangleTest{anchors.fill: parent}
onGoBackRequested: {
detailsPanel.visible = false
mainItem.chatMessage = null
}
content: ColumnLayout {
spacing: Math.round(31 * DefaultStyle.dp)
SearchBar {
id: forwardSearchBar
Layout.fillWidth: true
}
Flickable {
Layout.fillWidth: true
Layout.fillHeight: true
contentWidth: parent.width
// width: parent.width
// Control.ScrollBar.vertical: ScrollBar {
// id: scrollbar
// topPadding: Math.round(24 * DefaultStyle.dp) // Avoid to be on top of collapse button
// active: true
// interactive: true
// visible: parent.contentHeight > parent.height
// policy: Control.ScrollBar.AsNeeded
// }
ColumnLayout {
anchors.left: parent.left
anchors.right: parent.right
spacing: Math.round(8 * DefaultStyle.dp)
// width: parent.width //- scrollbar.width - Math.round(5 * DefaultStyle.dp)
RowLayout {
Text {
//: Conversations
text: qsTr("conversations_title")
font {
pixelSize: Typography.h4.pixelSize
weight: Typography.h4.weight
}
}
Item{Layout.fillWidth: true}
RoundButton {
id: expandChatButton
style: ButtonStyle.noBackground
checkable: true
checked: true
icon.source: checked ? AppIcons.upArrow : AppIcons.downArrow
KeyNavigation.down: contentControl
}
}
ChatListView {
visible: expandChatButton.checked
searchBar: forwardSearchBar
Layout.fillWidth: true
Layout.preferredHeight: contentHeight
onChatClicked: (chat) => {
UtilsCpp.forwardMessageTo(mainItem.chatMessage, chat)
mainItem.chat = chat
detailsPanel.visible = false
}
}
AllContactListView {
visible: expandContactButton.checked
Layout.fillWidth: true
itemsRightMargin: 0
showActions: false
showContactMenu: false
showFavorites: false
searchBarText: forwardSearchBar.text
Layout.preferredHeight: contentHeight
onContactSelected: contact => selectedFriend = contact
property FriendGui selectedFriend
property var chatForSelectedAddressObj: selectedFriend ? UtilsCpp.getChatForAddress(selectedFriend.core.defaultAddress) : null
property ChatGui chatForAddress: chatForSelectedAddressObj ? chatForSelectedAddressObj.value : null
onChatForAddressChanged: if(chatForAddress) {
UtilsCpp.forwardMessageTo(mainItem.chatMessage, chatForAddress)
mainItem.chat = chatForAddress
detailsPanel.visible = false
}
}
}
}
}
}
}
}
}

View file

@ -12,7 +12,7 @@ MessageInfosLayout {
tabbarModel: chatMessageGui ? chatMessageGui.core.imdnStatusListAsString : []
listModel: ImdnStatusProxy {
imdnStatusList: chatMessageGui ? chatMessageGui.core.imdnStatusList : []
filter: chatMessageGui ? chatMessageGui.core.imdnStatusAsSingletons[mainItem.tabbar.currentIndex].state : ""
filter: chatMessageGui && chatMessageGui.core.imdnStatusAsSingletons[mainItem.tabbar.currentIndex]?.state || ""
}
listView.delegate: Item {

View file

@ -48,6 +48,7 @@ ColumnLayout {
Layout.rightMargin: Math.round(16 * DefaultStyle.dp)
TabBar {
id: tabbar
visible: mainItem.tabbarModel !== undefined
Layout.fillWidth: true
model: mainItem.tabbarModel
pixelSize: Typography.h3m.pixelSize
@ -56,6 +57,7 @@ ColumnLayout {
ListView {
id: listView
visible: mainItem.listModel !== undefined
Layout.fillWidth: true
Layout.fillHeight: true
spacing: Math.round(11 * DefaultStyle.dp)

View file

@ -196,7 +196,9 @@ AbstractMainPage {
Connections {
target: mainItem
onSelectedChatGuiChanged: chatListView.selectChat(mainItem.selectedChatGui)
onSelectedChatGuiChanged: {
chatListView.selectChat(mainItem.selectedChatGui)
}
}
}
}
@ -334,6 +336,7 @@ AbstractMainPage {
SelectedChatView {
anchors.fill: parent
chat: mainItem.selectedChatGui || null
onChatChanged: if (mainItem.selectedChatGui !== chat) mainItem.selectedChatGui = chat
}
}
}