fix sending area wiped everytime we receive a message : set a sending text in chatcore (also allows to write something to someone and let it unfinished for later)

fix chat message insertion in list
This commit is contained in:
Gaelle Braud 2025-05-22 09:50:28 +02:00 committed by Gaëlle Braud
parent 7abfe4508c
commit 0614520e5a
14 changed files with 219 additions and 372 deletions

View file

@ -257,6 +257,17 @@ void ChatCore::setTitle(QString title) {
} }
} }
QString ChatCore::getSendingText() const {
return mSendingText;
}
void ChatCore::setSendingText(const QString &text) {
if (mSendingText != text) {
mSendingText = text;
emit sendingTextChanged(text);
}
}
bool ChatCore::isGroupChat() const { bool ChatCore::isGroupChat() const {
return mIsGroupChat; return mIsGroupChat;
} }

View file

@ -51,6 +51,7 @@ public:
Q_PROPERTY(bool isGroupChat READ isGroupChat CONSTANT) Q_PROPERTY(bool isGroupChat READ isGroupChat CONSTANT)
Q_PROPERTY(bool isEncrypted READ isEncrypted CONSTANT) Q_PROPERTY(bool isEncrypted READ isEncrypted CONSTANT)
Q_PROPERTY(bool isReadOnly READ getIsReadOnly WRITE setIsReadOnly NOTIFY readOnlyChanged) Q_PROPERTY(bool isReadOnly READ getIsReadOnly WRITE setIsReadOnly NOTIFY readOnlyChanged)
Q_PROPERTY(QString sendingText READ getSendingText WRITE setSendingText NOTIFY sendingTextChanged)
// Should be call from model Thread. Will be automatically in App thread after initialization // Should be call from model Thread. Will be automatically in App thread after initialization
static QSharedPointer<ChatCore> create(const std::shared_ptr<linphone::ChatRoom> &chatRoom); static QSharedPointer<ChatCore> create(const std::shared_ptr<linphone::ChatRoom> &chatRoom);
@ -70,6 +71,9 @@ public:
QString getIdentifier() const; QString getIdentifier() const;
QString getSendingText() const;
void setSendingText(const QString &text);
ChatMessageGui *getLastMessage() const; ChatMessageGui *getLastMessage() const;
QString getLastMessageText() const; QString getLastMessageText() const;
@ -122,6 +126,7 @@ signals:
void composingUserChanged(); void composingUserChanged();
void chatRoomStateChanged(); void chatRoomStateChanged();
void readOnlyChanged(); void readOnlyChanged();
void sendingTextChanged(QString text);
void lDeleteMessage(); void lDeleteMessage();
void lDelete(); void lDelete();
@ -142,6 +147,7 @@ private:
QString mTitle; QString mTitle;
QString mIdentifier; QString mIdentifier;
QString mAvatarUri; QString mAvatarUri;
QString mSendingText;
int mUnreadMessagesCount; int mUnreadMessagesCount;
QString mComposingName; QString mComposingName;
QString mComposingAddress; QString mComposingAddress;

View file

@ -74,10 +74,9 @@ void ChatMessageList::setChatCore(QSharedPointer<ChatCore> core) {
[this](QList<QSharedPointer<ChatMessageCore>> list) { [this](QList<QSharedPointer<ChatMessageCore>> list) {
auto chatList = getSharedList<ChatMessageCore>(); auto chatList = getSharedList<ChatMessageCore>();
for (auto &message : list) { for (auto &message : list) {
auto it = std::find_if(chatList.begin(), chatList.end(), auto it = std::find_if(
[message](const QSharedPointer<ChatMessageCore> item) { chatList.begin(), chatList.end(),
return item->getMessageId() == message->getMessageId(); [message](const QSharedPointer<ChatMessageCore> item) { return item == message; });
});
if (it == chatList.end()) { if (it == chatList.end()) {
add(message); add(message);
int index; int index;

View file

@ -809,25 +809,25 @@
<translation type="vanished">Offline</translation> <translation type="vanished">Offline</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="147"/> <location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="149"/>
<source>meeting_info_join_title</source> <source>meeting_info_join_title</source>
<extracomment>&quot;Rejoindre la réunion&quot;</extracomment> <extracomment>&quot;Rejoindre la réunion&quot;</extracomment>
<translation>Besprechung beitreten</translation> <translation>Besprechung beitreten</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="165"/> <location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="167"/>
<source>contact_call_action</source> <source>contact_call_action</source>
<extracomment>&quot;Appel&quot;</extracomment> <extracomment>&quot;Appel&quot;</extracomment>
<translation>Anrufen</translation> <translation>Anrufen</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="179"/> <location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="181"/>
<source>contact_message_action</source> <source>contact_message_action</source>
<extracomment>&quot;Message&quot;</extracomment> <extracomment>&quot;Message&quot;</extracomment>
<translation>Nachricht</translation> <translation>Nachricht</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="195"/> <location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="197"/>
<source>contact_video_call_action</source> <source>contact_video_call_action</source>
<extracomment>&quot;Appel Video&quot;</extracomment> <extracomment>&quot;Appel Video&quot;</extracomment>
<translation>Videoanruf</translation> <translation>Videoanruf</translation>
@ -1712,13 +1712,13 @@
<context> <context>
<name>ChatCore</name> <name>ChatCore</name>
<message> <message>
<location filename="../../core/chat/ChatCore.cpp" line="114"/> <location filename="../../core/chat/ChatCore.cpp" line="117"/>
<source>info_toast_deleted_title</source> <source>info_toast_deleted_title</source>
<extracomment>Deleted</extracomment> <extracomment>Deleted</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../core/chat/ChatCore.cpp" line="116"/> <location filename="../../core/chat/ChatCore.cpp" line="119"/>
<source>info_toast_deleted_message_history</source> <source>info_toast_deleted_message_history</source>
<extracomment>Message history has been deleted</extracomment> <extracomment>Message history has been deleted</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1727,19 +1727,31 @@
<context> <context>
<name>ChatListView</name> <name>ChatListView</name>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="260"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="217"/>
<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="227"/>
<source>chat_message_draft_sending_text</source>
<extracomment>Draft : %1</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="281"/>
<source>chat_room_delete</source> <source>chat_room_delete</source>
<extracomment>&quot;Supprimer&quot;</extracomment> <extracomment>&quot;Supprimer&quot;</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="266"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="287"/>
<source>chat_list_delete_chat_popup_title</source> <source>chat_list_delete_chat_popup_title</source>
<extracomment>Delete the chat ?</extracomment> <extracomment>Delete the chat ?</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="268"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="289"/>
<source>chat_list_delete_chat_popup_message</source> <source>chat_list_delete_chat_popup_message</source>
<extracomment>This chat and all its messages will be deleted. Do You want to continue ?</extracomment> <extracomment>This chat and all its messages will be deleted. Do You want to continue ?</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1748,25 +1760,25 @@
<context> <context>
<name>ChatMessage</name> <name>ChatMessage</name>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="267"/> <location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="266"/>
<source>chat_message_copy</source> <source>chat_message_copy</source>
<extracomment>&quot;Copy&quot;</extracomment> <extracomment>&quot;Copy&quot;</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="275"/> <location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="274"/>
<source>chat_message_copied_to_clipboard_title</source> <source>chat_message_copied_to_clipboard_title</source>
<extracomment>Copied</extracomment> <extracomment>Copied</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="277"/> <location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="276"/>
<source>chat_message_copied_to_clipboard_toast</source> <source>chat_message_copied_to_clipboard_toast</source>
<extracomment>&quot;to clipboard&quot;</extracomment> <extracomment>&quot;to clipboard&quot;</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="283"/> <location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="282"/>
<source>chat_message_delete</source> <source>chat_message_delete</source>
<extracomment>&quot;Delete&quot;</extracomment> <extracomment>&quot;Delete&quot;</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1834,20 +1846,20 @@
<context> <context>
<name>ChatMessagesListView</name> <name>ChatMessagesListView</name>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="89"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="88"/>
<source>chat_message_list_encrypted_header_title</source> <source>chat_message_list_encrypted_header_title</source>
<extracomment>End to end encrypted chat</extracomment> <extracomment>End to end encrypted chat</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="99"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="98"/>
<source>chat_message_list_encrypted_header_message</source> <source>chat_message_list_encrypted_header_message</source>
<extracomment>Les messages de cette conversation sont chiffrés de bout <extracomment>Les messages de cette conversation sont chiffrés de bout
en bout. Seul votre correspondant peut les déchiffrer.</extracomment> en bout. Seul votre correspondant peut les déchiffrer.</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="160"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="155"/>
<source>chat_message_is_writing_info</source> <source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment> <extracomment>%1 is writing</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -4294,31 +4306,49 @@ Pour les activer dans un projet commercial, merci de nous contacter.</source>
<context> <context>
<name>SelectedChatView</name> <name>SelectedChatView</name>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="227"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="229"/>
<source>chat_view_send_area_placeholder_text</source> <source>chat_view_send_area_placeholder_text</source>
<extracomment>Say something : placeholder text for sending message text area</extracomment> <extracomment>Say something : placeholder text for sending message text area</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="302"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="306"/>
<source>chat_view_detail_other_actions_title</source> <source>chat_view_detail_other_actions_title</source>
<extracomment>Other actions</extracomment> <extracomment>Other actions</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="320"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="324"/>
<source>chat_view_detail_leave_room_toast_button</source>
<extracomment>&quot;Leave Chat Room&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="328"/>
<source>chat_view_detail_leave_room_toast_title</source>
<extracomment>Leave Chat Room ?</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="330"/>
<source>chat_view_detail_leave_room_toast_message</source>
<extracomment>All the messages will be removed from the chat room. Do you want to continue ?</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="345"/>
<source>chat_view_detail_delete_history_button</source> <source>chat_view_detail_delete_history_button</source>
<extracomment>&quot;Delete history&quot;</extracomment> <extracomment>&quot;Delete history&quot;</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="323"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="348"/>
<source>chat_view_detail_delete_history_toast_title</source> <source>chat_view_detail_delete_history_toast_title</source>
<extracomment>Delete history ?</extracomment> <extracomment>Delete history ?</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="325"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="350"/>
<source>chat_view_detail_delete_history_toast_message</source> <source>chat_view_detail_delete_history_toast_message</source>
<extracomment>All the messages will be removed from the chat room. Do you want to continue ?</extracomment> <extracomment>All the messages will be removed from the chat room. Do you want to continue ?</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>

View file

@ -397,9 +397,9 @@
<source>add_participant_selected_count</source> <source>add_participant_selected_count</source>
<comment>0</comment> <comment>0</comment>
<extracomment>&quot;%n participant(s) sélectionné(s)&quot;</extracomment> <extracomment>&quot;%n participant(s) sélectionné(s)&quot;</extracomment>
<translation type="unfinished"> <translation>
<numerusform>1 selected participant</numerusform> <numerusform>%1 selected participant</numerusform>
<numerusform>%n selected participants</numerusform> <numerusform>%1 selected participants</numerusform>
</translation> </translation>
</message> </message>
<message> <message>
@ -789,25 +789,25 @@
<context> <context>
<name>CallHistoryLayout</name> <name>CallHistoryLayout</name>
<message> <message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="147"/> <location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="149"/>
<source>meeting_info_join_title</source> <source>meeting_info_join_title</source>
<extracomment>&quot;Rejoindre la réunion&quot;</extracomment> <extracomment>&quot;Rejoindre la réunion&quot;</extracomment>
<translation>Join meeting</translation> <translation>Join meeting</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="165"/> <location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="167"/>
<source>contact_call_action</source> <source>contact_call_action</source>
<extracomment>&quot;Appel&quot;</extracomment> <extracomment>&quot;Appel&quot;</extracomment>
<translation>Call</translation> <translation>Call</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="179"/> <location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="181"/>
<source>contact_message_action</source> <source>contact_message_action</source>
<extracomment>&quot;Message&quot;</extracomment> <extracomment>&quot;Message&quot;</extracomment>
<translation>Message</translation> <translation>Message</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="195"/> <location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="197"/>
<source>contact_video_call_action</source> <source>contact_video_call_action</source>
<extracomment>&quot;Appel Video&quot;</extracomment> <extracomment>&quot;Appel Video&quot;</extracomment>
<translation>Video call</translation> <translation>Video call</translation>
@ -1412,8 +1412,8 @@
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1004"/> <location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1004"/>
<source>group_call_participant_selected</source> <source>group_call_participant_selected</source>
<translation> <translation>
<numerusform>1 selected participant</numerusform> <numerusform>%1 selected participant</numerusform>
<numerusform>%n selected participants</numerusform> <numerusform>%1 selected participants</numerusform>
</translation> </translation>
</message> </message>
<message> <message>
@ -1674,13 +1674,13 @@
<context> <context>
<name>ChatCore</name> <name>ChatCore</name>
<message> <message>
<location filename="../../core/chat/ChatCore.cpp" line="114"/> <location filename="../../core/chat/ChatCore.cpp" line="117"/>
<source>info_toast_deleted_title</source> <source>info_toast_deleted_title</source>
<extracomment>Deleted</extracomment> <extracomment>Deleted</extracomment>
<translation>Deleted</translation> <translation>Deleted</translation>
</message> </message>
<message> <message>
<location filename="../../core/chat/ChatCore.cpp" line="116"/> <location filename="../../core/chat/ChatCore.cpp" line="119"/>
<source>info_toast_deleted_message_history</source> <source>info_toast_deleted_message_history</source>
<extracomment>Message history has been deleted</extracomment> <extracomment>Message history has been deleted</extracomment>
<translation>Message history has been deleted</translation> <translation>Message history has been deleted</translation>
@ -1689,19 +1689,31 @@
<context> <context>
<name>ChatListView</name> <name>ChatListView</name>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="260"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="217"/>
<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="227"/>
<source>chat_message_draft_sending_text</source>
<extracomment>Draft : %1</extracomment>
<translation>Draft : %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="281"/>
<source>chat_room_delete</source> <source>chat_room_delete</source>
<extracomment>&quot;Supprimer&quot;</extracomment> <extracomment>&quot;Supprimer&quot;</extracomment>
<translation>Delete</translation> <translation>Delete</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="266"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="287"/>
<source>chat_list_delete_chat_popup_title</source> <source>chat_list_delete_chat_popup_title</source>
<extracomment>Delete the chat ?</extracomment> <extracomment>Delete the chat ?</extracomment>
<translation>Delete the chat ?</translation> <translation>Delete the chat ?</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="268"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="289"/>
<source>chat_list_delete_chat_popup_message</source> <source>chat_list_delete_chat_popup_message</source>
<extracomment>This chat and all its messages will be deleted. Do You want to continue ?</extracomment> <extracomment>This chat and all its messages will be deleted. Do You want to continue ?</extracomment>
<translation>This chat and all its messages will be deleted. Do You want to continue ?</translation> <translation>This chat and all its messages will be deleted. Do You want to continue ?</translation>
@ -1710,25 +1722,25 @@
<context> <context>
<name>ChatMessage</name> <name>ChatMessage</name>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="267"/> <location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="266"/>
<source>chat_message_copy</source> <source>chat_message_copy</source>
<extracomment>&quot;Copy&quot;</extracomment> <extracomment>&quot;Copy&quot;</extracomment>
<translation>Copy</translation> <translation>Copy</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="275"/> <location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="274"/>
<source>chat_message_copied_to_clipboard_title</source> <source>chat_message_copied_to_clipboard_title</source>
<extracomment>Copied</extracomment> <extracomment>Copied</extracomment>
<translation>Copied</translation> <translation>Copied</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="277"/> <location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="276"/>
<source>chat_message_copied_to_clipboard_toast</source> <source>chat_message_copied_to_clipboard_toast</source>
<extracomment>&quot;to clipboard&quot;</extracomment> <extracomment>&quot;to clipboard&quot;</extracomment>
<translation>in clipboard</translation> <translation>in clipboard</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="283"/> <location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="282"/>
<source>chat_message_delete</source> <source>chat_message_delete</source>
<extracomment>&quot;Delete&quot;</extracomment> <extracomment>&quot;Delete&quot;</extracomment>
<translation>Delete</translation> <translation>Delete</translation>
@ -1796,13 +1808,13 @@
<context> <context>
<name>ChatMessagesListView</name> <name>ChatMessagesListView</name>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="89"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="88"/>
<source>chat_message_list_encrypted_header_title</source> <source>chat_message_list_encrypted_header_title</source>
<extracomment>End to end encrypted chat</extracomment> <extracomment>End to end encrypted chat</extracomment>
<translation>End to end encrypted chat</translation> <translation>End to end encrypted chat</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="99"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="98"/>
<source>chat_message_list_encrypted_header_message</source> <source>chat_message_list_encrypted_header_message</source>
<extracomment>Les messages de cette conversation sont chiffrés de bout <extracomment>Les messages de cette conversation sont chiffrés de bout
en bout. Seul votre correspondant peut les déchiffrer.</extracomment> en bout. Seul votre correspondant peut les déchiffrer.</extracomment>
@ -1810,7 +1822,7 @@
Only your correspondent can decrypt them.</translation> Only your correspondent can decrypt them.</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="160"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="155"/>
<source>chat_message_is_writing_info</source> <source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment> <extracomment>%1 is writing</extracomment>
<translation>%1 is writing</translation> <translation>%1 is writing</translation>
@ -3453,8 +3465,8 @@ Only your correspondent can decrypt them.</translation>
<source>group_call_participant_selected</source> <source>group_call_participant_selected</source>
<extracomment>&quot;%n participant(s) sélectionné(s)&quot;</extracomment> <extracomment>&quot;%n participant(s) sélectionné(s)&quot;</extracomment>
<translation> <translation>
<numerusform>1 selected participant</numerusform> <numerusform>%1 selected participant</numerusform>
<numerusform>%n selected participants</numerusform> <numerusform>%1 selected participants</numerusform>
</translation> </translation>
</message> </message>
<message> <message>
@ -4213,53 +4225,53 @@ To enable them in a commercial project, please contact us.</translation>
<translation type="obsolete">Other actions</translation> <translation type="obsolete">Other actions</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="227"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="229"/>
<source>chat_view_send_area_placeholder_text</source> <source>chat_view_send_area_placeholder_text</source>
<extracomment>Say something : placeholder text for sending message text area</extracomment> <extracomment>Say something : placeholder text for sending message text area</extracomment>
<translation>Say something</translation> <translation>Say something</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="302"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="306"/>
<source>chat_view_detail_other_actions_title</source> <source>chat_view_detail_other_actions_title</source>
<extracomment>Other actions</extracomment> <extracomment>Other actions</extracomment>
<translation>Other actions</translation> <translation>Other actions</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="320"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="345"/>
<source>chat_view_detail_delete_history_button</source> <source>chat_view_detail_delete_history_button</source>
<extracomment>&quot;Delete history&quot;</extracomment> <extracomment>&quot;Delete history&quot;</extracomment>
<translation>Delete history</translation> <translation>Delete history</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="323"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="348"/>
<source>chat_view_detail_delete_history_toast_title</source> <source>chat_view_detail_delete_history_toast_title</source>
<extracomment>Delete history ?</extracomment> <extracomment>Delete history ?</extracomment>
<translation>Delete history ?</translation> <translation>Delete history ?</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="325"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="350"/>
<source>chat_view_detail_delete_history_toast_message</source> <source>chat_view_detail_delete_history_toast_message</source>
<extracomment>All the messages will be removed from the chat room. Do you want to continue ?</extracomment> <extracomment>All the messages will be removed from the chat room. Do you want to continue ?</extracomment>
<translation>All the messages will be removed from the chat room. Do you want to continue ?</translation> <translation>All the messages will be removed from the chat room. Do you want to continue ?</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="292"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="324"/>
<source>chat_view_detail_leave_room_toast_button</source> <source>chat_view_detail_leave_room_toast_button</source>
<extracomment>&quot;Leave chat room&quot;</extracomment> <extracomment>&quot;Leave Chat Room&quot;</extracomment>
<translation>Leave chat room</translation> <translation>Leave chat room</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="295"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="328"/>
<source>chat_view_detail_leave_room_toast_title</source> <source>chat_view_detail_leave_room_toast_title</source>
<extracomment>Leave chat room ?</extracomment> <extracomment>Leave Chat Room ?</extracomment>
<translation>Leave chat room ?</translation> <translation>Leave chat room ?</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="297"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="330"/>
<source>chat_view_detail_leave_room_toast_message</source> <source>chat_view_detail_leave_room_toast_message</source>
<extracomment>You will not be able to send or receive messages in this room anymore, leave ?</extracomment> <extracomment>All the messages will be removed from the chat room. Do you want to continue ?</extracomment>
<translation>You will not be able to send or receive messages in this room anymore, leave ?</translation> <translation>You will not be able to send or receive messages in this room anymore, leave ?</translation>
</message> </message>
</context> </context>
<context> <context>
<name>SettingsPage</name> <name>SettingsPage</name>
@ -4450,7 +4462,7 @@ Failed to create 1-1 conversation with %1 !</extracomment>
<extracomment>%n an(s)</extracomment> <extracomment>%n an(s)</extracomment>
<translation> <translation>
<numerusform>one year</numerusform> <numerusform>one year</numerusform>
<numerusform>%n years</numerusform> <numerusform>%1 years</numerusform>
</translation> </translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
@ -4459,7 +4471,7 @@ Failed to create 1-1 conversation with %1 !</extracomment>
<extracomment>&quot;%n mois&quot;</extracomment> <extracomment>&quot;%n mois&quot;</extracomment>
<translation> <translation>
<numerusform>one month</numerusform> <numerusform>one month</numerusform>
<numerusform>%n months</numerusform> <numerusform>%1 months</numerusform>
</translation> </translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
@ -4468,7 +4480,7 @@ Failed to create 1-1 conversation with %1 !</extracomment>
<extracomment>%n semaine(s)</extracomment> <extracomment>%n semaine(s)</extracomment>
<translation> <translation>
<numerusform>one week</numerusform> <numerusform>one week</numerusform>
<numerusform>%n weeks</numerusform> <numerusform>%1 weeks</numerusform>
</translation> </translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
@ -4477,7 +4489,7 @@ Failed to create 1-1 conversation with %1 !</extracomment>
<extracomment>%n jour(s)</extracomment> <extracomment>%n jour(s)</extracomment>
<translation> <translation>
<numerusform>one day</numerusform> <numerusform>one day</numerusform>
<numerusform>%n days</numerusform> <numerusform>%1 days</numerusform>
</translation> </translation>
</message> </message>
<message> <message>

View file

@ -397,7 +397,7 @@
<source>add_participant_selected_count</source> <source>add_participant_selected_count</source>
<comment>0</comment> <comment>0</comment>
<extracomment>&quot;%n participant(s) sélectionné(s)&quot;</extracomment> <extracomment>&quot;%n participant(s) sélectionné(s)&quot;</extracomment>
<translation type="unfinished"> <translation>
<numerusform>%1 participant sélectionné</numerusform> <numerusform>%1 participant sélectionné</numerusform>
<numerusform>%1 participants sélectionnés</numerusform> <numerusform>%1 participants sélectionnés</numerusform>
</translation> </translation>
@ -789,25 +789,25 @@
<context> <context>
<name>CallHistoryLayout</name> <name>CallHistoryLayout</name>
<message> <message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="147"/> <location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="149"/>
<source>meeting_info_join_title</source> <source>meeting_info_join_title</source>
<extracomment>&quot;Rejoindre la réunion&quot;</extracomment> <extracomment>&quot;Rejoindre la réunion&quot;</extracomment>
<translation>Rejoindre la réunion</translation> <translation>Rejoindre la réunion</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="165"/> <location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="167"/>
<source>contact_call_action</source> <source>contact_call_action</source>
<extracomment>&quot;Appel&quot;</extracomment> <extracomment>&quot;Appel&quot;</extracomment>
<translation>Appel</translation> <translation>Appel</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="179"/> <location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="181"/>
<source>contact_message_action</source> <source>contact_message_action</source>
<extracomment>&quot;Message&quot;</extracomment> <extracomment>&quot;Message&quot;</extracomment>
<translation>Message</translation> <translation>Message</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="195"/> <location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="197"/>
<source>contact_video_call_action</source> <source>contact_video_call_action</source>
<extracomment>&quot;Appel Video&quot;</extracomment> <extracomment>&quot;Appel Video&quot;</extracomment>
<translation>Appel Vidéo</translation> <translation>Appel Vidéo</translation>
@ -1684,13 +1684,13 @@
<context> <context>
<name>ChatCore</name> <name>ChatCore</name>
<message> <message>
<location filename="../../core/chat/ChatCore.cpp" line="114"/> <location filename="../../core/chat/ChatCore.cpp" line="117"/>
<source>info_toast_deleted_title</source> <source>info_toast_deleted_title</source>
<extracomment>Deleted</extracomment> <extracomment>Deleted</extracomment>
<translation>Supprimé</translation> <translation>Supprimé</translation>
</message> </message>
<message> <message>
<location filename="../../core/chat/ChatCore.cpp" line="116"/> <location filename="../../core/chat/ChatCore.cpp" line="119"/>
<source>info_toast_deleted_message_history</source> <source>info_toast_deleted_message_history</source>
<extracomment>Message history has been deleted</extracomment> <extracomment>Message history has been deleted</extracomment>
<translation>L&apos;historique des messages a é supprimé</translation> <translation>L&apos;historique des messages a é supprimé</translation>
@ -1699,19 +1699,31 @@
<context> <context>
<name>ChatListView</name> <name>ChatListView</name>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="260"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="217"/>
<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="227"/>
<source>chat_message_draft_sending_text</source>
<extracomment>Draft : %1</extracomment>
<translation>Brouillon : %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="281"/>
<source>chat_room_delete</source> <source>chat_room_delete</source>
<extracomment>&quot;Supprimer&quot;</extracomment> <extracomment>&quot;Supprimer&quot;</extracomment>
<translation>Supprimer</translation> <translation>Supprimer</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="266"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="287"/>
<source>chat_list_delete_chat_popup_title</source> <source>chat_list_delete_chat_popup_title</source>
<extracomment>Delete the chat ?</extracomment> <extracomment>Delete the chat ?</extracomment>
<translation>Supprimer la conversation ?</translation> <translation>Supprimer la conversation ?</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="268"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="289"/>
<source>chat_list_delete_chat_popup_message</source> <source>chat_list_delete_chat_popup_message</source>
<extracomment>This chat and all its messages will be deleted. Do You want to continue ?</extracomment> <extracomment>This chat 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> <translation>La conversation et tous ses messages seront supprimés. Souhaitez-vous continuer ?</translation>
@ -1720,25 +1732,25 @@
<context> <context>
<name>ChatMessage</name> <name>ChatMessage</name>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="267"/> <location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="266"/>
<source>chat_message_copy</source> <source>chat_message_copy</source>
<extracomment>&quot;Copy&quot;</extracomment> <extracomment>&quot;Copy&quot;</extracomment>
<translation>Copier</translation> <translation>Copier</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="275"/> <location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="274"/>
<source>chat_message_copied_to_clipboard_title</source> <source>chat_message_copied_to_clipboard_title</source>
<extracomment>Copied</extracomment> <extracomment>Copied</extracomment>
<translation>Copié</translation> <translation>Copié</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="277"/> <location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="276"/>
<source>chat_message_copied_to_clipboard_toast</source> <source>chat_message_copied_to_clipboard_toast</source>
<extracomment>&quot;to clipboard&quot;</extracomment> <extracomment>&quot;to clipboard&quot;</extracomment>
<translation>dans le presse-papiers</translation> <translation>dans le presse-papiers</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="283"/> <location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="282"/>
<source>chat_message_delete</source> <source>chat_message_delete</source>
<extracomment>&quot;Delete&quot;</extracomment> <extracomment>&quot;Delete&quot;</extracomment>
<translation>Supprimer</translation> <translation>Supprimer</translation>
@ -1806,13 +1818,13 @@
<context> <context>
<name>ChatMessagesListView</name> <name>ChatMessagesListView</name>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="89"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="88"/>
<source>chat_message_list_encrypted_header_title</source> <source>chat_message_list_encrypted_header_title</source>
<extracomment>End to end encrypted chat</extracomment> <extracomment>End to end encrypted chat</extracomment>
<translation>Conversation chiffrée de bout en bout</translation> <translation>Conversation chiffrée de bout en bout</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="99"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="98"/>
<source>chat_message_list_encrypted_header_message</source> <source>chat_message_list_encrypted_header_message</source>
<extracomment>Les messages de cette conversation sont chiffrés de bout <extracomment>Les messages de cette conversation sont chiffrés de bout
en bout. Seul votre correspondant peut les déchiffrer.</extracomment> en bout. Seul votre correspondant peut les déchiffrer.</extracomment>
@ -1820,7 +1832,7 @@
en bout. Seul votre correspondant peut les déchiffrer.</translation> en bout. Seul votre correspondant peut les déchiffrer.</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="160"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="155"/>
<source>chat_message_is_writing_info</source> <source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment> <extracomment>%1 is writing</extracomment>
<translation>%1 est en train d&apos;écrire</translation> <translation>%1 est en train d&apos;écrire</translation>
@ -4215,53 +4227,53 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
<context> <context>
<name>SelectedChatView</name> <name>SelectedChatView</name>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="227"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="229"/>
<source>chat_view_send_area_placeholder_text</source> <source>chat_view_send_area_placeholder_text</source>
<extracomment>Say something : placeholder text for sending message text area</extracomment> <extracomment>Say something : placeholder text for sending message text area</extracomment>
<translation>Dites quelque chose</translation> <translation>Dites quelque chose</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="302"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="306"/>
<source>chat_view_detail_other_actions_title</source> <source>chat_view_detail_other_actions_title</source>
<extracomment>Other actions</extracomment> <extracomment>Other actions</extracomment>
<translation>Autres actions</translation> <translation>Autres actions</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="320"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="345"/>
<source>chat_view_detail_delete_history_button</source> <source>chat_view_detail_delete_history_button</source>
<extracomment>&quot;Delete history&quot;</extracomment> <extracomment>&quot;Delete history&quot;</extracomment>
<translation>Supprimer l&apos;historique</translation> <translation>Supprimer l&apos;historique</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="323"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="348"/>
<source>chat_view_detail_delete_history_toast_title</source> <source>chat_view_detail_delete_history_toast_title</source>
<extracomment>Delete history ?</extracomment> <extracomment>Delete history ?</extracomment>
<translation>Supprimer l&apos;historique ?</translation> <translation>Supprimer l&apos;historique ?</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="325"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="350"/>
<source>chat_view_detail_delete_history_toast_message</source> <source>chat_view_detail_delete_history_toast_message</source>
<extracomment>All the messages will be removed from the chat room. Do you want to continue ?</extracomment> <extracomment>All the messages will be removed from the chat room. Do you want to continue ?</extracomment>
<translation>Tous les messages seront supprimés. Souhaitez-vous continuer ?</translation> <translation>Tous les messages seront supprimés. Souhaitez-vous continuer ?</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="292"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="324"/>
<source>chat_view_detail_leave_room_toast_button</source> <source>chat_view_detail_leave_room_toast_button</source>
<extracomment>&quot;Leave chat room&quot;</extracomment> <extracomment>&quot;Leave Chat Room&quot;</extracomment>
<translation>Quitter la conversation</translation> <translation>Quitter la conversation</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="295"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="328"/>
<source>chat_view_detail_leave_room_toast_title</source> <source>chat_view_detail_leave_room_toast_title</source>
<extracomment>Leave chat room ?</extracomment> <extracomment>Leave Chat Room ?</extracomment>
<translation>Quitter la conversation ?</translation> <translation>Quitter la conversation ?</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="297"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="330"/>
<source>chat_view_detail_leave_room_toast_message</source> <source>chat_view_detail_leave_room_toast_message</source>
<extracomment>You will not be able to send or receive messages in this room anymore, leave ?</extracomment> <extracomment>All the messages will be removed from the chat room. Do you want to continue ?</extracomment>
<translation>Vous ne recevrez ni pourrez envoyer des messages dans cette conversation, quitter ?</translation> <translation>Vous ne recevrez ni pourrez envoyer des messages dans cette conversation, quitter ?</translation>
</message> </message>
</context> </context>
<context> <context>
<name>SettingsPage</name> <name>SettingsPage</name>

View file

@ -52,6 +52,7 @@ list(APPEND _LINPHONEAPP_QML_FILES
view/Control/Display/Call/CallListView.qml view/Control/Display/Call/CallListView.qml
view/Control/Display/Call/CallHistoryListView.qml view/Control/Display/Call/CallHistoryListView.qml
view/Control/Display/Call/CallStatistics.qml view/Control/Display/Call/CallStatistics.qml
view/Control/Display/Chat/Emoji/EmojiPicker.qml
view/Control/Display/Chat/ChatListView.qml view/Control/Display/Chat/ChatListView.qml
view/Control/Display/Chat/ChatMessage.qml view/Control/Display/Chat/ChatMessage.qml
view/Control/Display/Chat/ChatMessageInvitationBubble.qml view/Control/Display/Chat/ChatMessageInvitationBubble.qml
@ -65,7 +66,6 @@ list(APPEND _LINPHONEAPP_QML_FILES
view/Control/Display/Contact/ContactListView.qml view/Control/Display/Contact/ContactListView.qml
view/Control/Display/Contact/AllContactListView.qml view/Control/Display/Contact/AllContactListView.qml
view/Control/Display/Contact/Voicemail.qml view/Control/Display/Contact/Voicemail.qml
view/Control/Display/Conversation/Emoji/EmojiPicker.qml
view/Control/Display/Meeting/MeetingListView.qml view/Control/Display/Meeting/MeetingListView.qml
view/Control/Display/Participant/ParticipantDeviceListView.qml view/Control/Display/Participant/ParticipantDeviceListView.qml
view/Control/Display/Participant/ParticipantListView.qml view/Control/Display/Participant/ParticipantListView.qml

View file

@ -171,6 +171,7 @@ Button {
} }
} }
background: Item { background: Item {
anchors.fill: parent anchors.fill: parent
Rectangle { Rectangle {
@ -187,6 +188,9 @@ Button {
shadowColor: DefaultStyle.grey_1000 shadowColor: DefaultStyle.grey_1000
shadowOpacity: 0.4 shadowOpacity: 0.4
} }
MouseArea{
anchors.fill: parent
}
} }
} }
} }

View file

@ -197,6 +197,7 @@ ListView {
Text { Text {
Layout.fillWidth: true Layout.fillWidth: true
maximumLineCount: 1 maximumLineCount: 1
visible: !remoteComposingInfo.visible
text: modelData.core.lastMessageText text: modelData.core.lastMessageText
color: DefaultStyle.main2_400 color: DefaultStyle.main2_400
font { font {
@ -204,7 +205,22 @@ ListView {
weight: unreadCount.unread > 0 ? Typography.p2.weight : Typography.p1.weight weight: unreadCount.unread > 0 ? Typography.p2.weight : Typography.p1.weight
} }
} }
Text {
id: remoteComposingInfo
visible: mainItem.currentIndex !== model.index && (modelData.core.composingName !== "" || modelData.core.sendingText !== "")
Layout.fillWidth: true
maximumLineCount: 1
font {
pixelSize: Typography.p3.pixelSize
weight: Typography.p3.weight
}
//: %1 is writing
text: modelData.core.composingName !== ""
? qsTr("chat_message_is_writing_info").arg(modelData.core.composingName)
: modelData.core.sendingText !== ""
? qsTr("chat_message_draft_sending_text").arg(modelData.core.sendingText)
: ""
}
} }
ColumnLayout { ColumnLayout {
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignRight

View file

@ -170,7 +170,8 @@ ColumnLayout {
property int columnCount: Math.round(list.width / 50 * DefaultStyle.dp) property int columnCount: Math.round(list.width / 50 * DefaultStyle.dp)
property int sc: grid.category === 'People & Body' ? mainItem.skinColor : -1 property int sc: grid.category === 'People & Body' ? mainItem.skinColor : -1
columns: columnCount columns: columnCount
columnSpacing: Math.round(8 * DefaultStyle.dp) width: list.width
columnSpacing: Math.round(5 * DefaultStyle.dp)
Text { Text {
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredHeight: Math.round(20 * DefaultStyle.dp) Layout.preferredHeight: Math.round(20 * DefaultStyle.dp)

View file

@ -77,7 +77,9 @@ Control.Control{
smooth: false smooth: false
Layout.preferredWidth: 11 * DefaultStyle.dp Layout.preferredWidth: 11 * DefaultStyle.dp
Layout.preferredHeight: 11 * DefaultStyle.dp Layout.preferredHeight: 11 * DefaultStyle.dp
source: presenceBar.isRegistered ? mainItem.account.core.presenceIcon : mainItem.account?.core.registrationStateIcon source: presenceBar.isRegistered
? mainItem.account.core.presenceIcon
: mainItem.account?.core.registrationStateIcon || ""
Layout.leftMargin: 8 * DefaultStyle.dp Layout.leftMargin: 8 * DefaultStyle.dp
} }
Text { Text {
@ -110,7 +112,6 @@ Control.Control{
popup.contentItem: Rectangle { popup.contentItem: Rectangle {
implicitWidth: 280 * DefaultStyle.dp implicitWidth: 280 * DefaultStyle.dp
implicitHeight: 20 * DefaultStyle.dp + (setCustomStatus.visible ? 240 * DefaultStyle.dp : setPresence.implicitHeight) implicitHeight: 20 * DefaultStyle.dp + (setCustomStatus.visible ? 240 * DefaultStyle.dp : setPresence.implicitHeight)
MouseArea{anchors.fill: parent}
Presence { Presence {
id: setPresence id: setPresence
anchors.fill: parent anchors.fill: parent

View file

@ -5,7 +5,7 @@ import Linphone
import SettingsCpp import SettingsCpp
import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle
ColumnLayout { Column {
id: mainItem id: mainItem
spacing: 20 * DefaultStyle.dp spacing: 20 * DefaultStyle.dp
anchors.centerIn: parent anchors.centerIn: parent

View file

@ -1,247 +0,0 @@
import QtQuick
import QtQuick.Effects
import QtQuick.Layouts
import QtQuick.Controls.Basic as Control
import Linphone
import UtilsCpp
import SettingsCpp
import "qrc:/qt/qml/Linphone/view/Style/buttonStyle.js" as ButtonStyle
import "qrc:/qt/qml/Linphone/view/Control/Tool/Helper/utils.js" as Utils
ListView {
id: mainItem
clip: true
property SearchBar searchBar
property bool loading: false
property string searchText: searchBar?.text
property real busyIndicatorSize: Math.round(60 * DefaultStyle.dp)
signal resultsReceived
onResultsReceived: {
loading = false
// contentY = 0
}
model: CallHistoryProxy {
id: callHistoryProxy
Component.onCompleted: {
loading = true
}
filterText: mainItem.searchText
onFilterTextChanged: maxDisplayItems = initialDisplayItems
initialDisplayItems: Math.max(
20,
2 * mainItem.height / (Math.round(56 * DefaultStyle.dp)))
displayItemsStep: 3 * initialDisplayItems / 2
onModelReset: {
mainItem.resultsReceived()
}
}
flickDeceleration: 10000
spacing: Math.round(10 * DefaultStyle.dp)
Keys.onPressed: event => {
if (event.key == Qt.Key_Escape) {
console.log("Back")
searchBar.forceActiveFocus()
event.accepted = true
}
}
Component.onCompleted: cacheBuffer = Math.max(
contentHeight,
0) //contentHeight>0 ? contentHeight : 0// cache all items
// remove binding loop
onContentHeightChanged: Qt.callLater(function () {
if (mainItem)
mainItem.cacheBuffer = Math?.max(contentHeight, 0) || 0
})
onActiveFocusChanged: if (activeFocus && currentIndex < 0 && count > 0)
currentIndex = 0
onCountChanged: {
if (currentIndex < 0 && count > 0) {
mainItem.currentIndex = 0 // Select first item after loading model
}
if (atYBeginning)
positionViewAtBeginning() // Stay at beginning
}
Connections {
target: deleteHistoryPopup
function onAccepted() {
mainItem.model.removeAllEntries()
}
}
onAtYEndChanged: {
if (atYEnd && count > 0) {
callHistoryProxy.displayMore()
}
}
//----------------------------------------------------------------
function moveToCurrentItem() {
if (mainItem.currentIndex >= 0)
Utils.updatePosition(mainItem, mainItem)
}
onCurrentItemChanged: {
moveToCurrentItem()
}
// Update position only if we are moving to current item and its position is changing.
property var _currentItemY: currentItem?.y
on_CurrentItemYChanged: if (_currentItemY && moveAnimation.running) {
moveToCurrentItem()
}
Behavior on contentY {
NumberAnimation {
id: moveAnimation
duration: 500
easing.type: Easing.OutExpo
alwaysRunToEnd: true
}
}
//----------------------------------------------------------------
onVisibleChanged: {
// if (!visible)
// currentIndex = -1
}
BusyIndicator {
anchors.horizontalCenter: mainItem.horizontalCenter
visible: mainItem.loading
height: visible ? mainItem.busyIndicatorSize : 0
width: mainItem.busyIndicatorSize
indicatorHeight: mainItem.busyIndicatorSize
indicatorWidth: mainItem.busyIndicatorSize
indicatorColor: DefaultStyle.main1_500_main
}
// Qt bug: sometimes, containsMouse may not be send and update on each MouseArea.
// So we need to use this variable to switch off all hovered items.
property int lastMouseContainsIndex: -1
delegate: FocusScope {
width: mainItem.width
height: Math.round(56 * DefaultStyle.dp)
RowLayout {
z: 1
anchors.fill: parent
anchors.leftMargin: Math.round(10 * DefaultStyle.dp)
spacing: Math.round(10 * DefaultStyle.dp)
Avatar {
id: historyAvatar
property var contactObj: UtilsCpp.findFriendByAddress(
modelData.core.remoteAddress)
contact: contactObj?.value || null
displayNameVal: modelData.core.displayName
secured: securityLevel === LinphoneEnums.SecurityLevel.EndToEndEncryptedAndVerified
width: Math.round(45 * DefaultStyle.dp)
height: Math.round(45 * DefaultStyle.dp)
isConference: modelData.core.isConference
shadowEnabled: false
asynchronous: false
}
ColumnLayout {
Layout.fillHeight: true
Layout.fillWidth: true
spacing: Math.round(5 * DefaultStyle.dp)
Text {
id: friendAddress
Layout.fillWidth: true
maximumLineCount: 1
text: historyAvatar.displayNameVal
font {
pixelSize: Typography.p1.pixelSize
weight: Typography.p1.weight
capitalization: Font.Capitalize
}
}
RowLayout {
spacing: Math.round(6 * DefaultStyle.dp)
EffectImage {
id: statusIcon
imageSource: modelData.core.status === LinphoneEnums.CallStatus.Declined
|| modelData.core.status
=== LinphoneEnums.CallStatus.DeclinedElsewhere
|| modelData.core.status === LinphoneEnums.CallStatus.Aborted
|| modelData.core.status === LinphoneEnums.CallStatus.EarlyAborted ? AppIcons.arrowElbow : modelData.core.isOutgoing ? AppIcons.arrowUpRight : AppIcons.arrowDownLeft
colorizationColor: modelData.core.status
=== LinphoneEnums.CallStatus.Declined
|| modelData.core.status
=== LinphoneEnums.CallStatus.DeclinedElsewhere
|| modelData.core.status
=== LinphoneEnums.CallStatus.Aborted
|| modelData.core.status
=== LinphoneEnums.CallStatus.EarlyAborted
|| modelData.core.status === LinphoneEnums.CallStatus.Missed ? DefaultStyle.danger_500main : modelData.core.isOutgoing ? DefaultStyle.info_500_main : DefaultStyle.success_500main
Layout.preferredWidth: Math.round(12 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(12 * DefaultStyle.dp)
transform: Rotation {
angle: modelData.core.isOutgoing
&& (modelData.core.status === LinphoneEnums.CallStatus.Declined
|| modelData.core.status
=== LinphoneEnums.CallStatus.DeclinedElsewhere
|| modelData.core.status === LinphoneEnums.CallStatus.Aborted
|| modelData.core.status
=== LinphoneEnums.CallStatus.EarlyAborted) ? 180 : 0
origin {
x: statusIcon.width / 2
y: statusIcon.height / 2
}
}
}
Text {
// text: modelData.core.date
text: UtilsCpp.formatDate(modelData.core.date)
font {
pixelSize: Math.round(12 * DefaultStyle.dp)
weight: Math.round(300 * DefaultStyle.dp)
}
}
}
}
BigButton {
style: ButtonStyle.noBackground
icon.source: AppIcons.phone
focus: true
activeFocusOnTab: false
asynchronous: false
onClicked: {
if (modelData.core.isConference) {
var callsWindow = UtilsCpp.getCallsWindow()
callsWindow.setupConference(
modelData.core.conferenceInfo)
UtilsCpp.smartShowWindow(callsWindow)
} else {
UtilsCpp.createCall(modelData.core.remoteAddress)
}
}
}
}
MouseArea {
hoverEnabled: true
anchors.fill: parent
focus: true
onContainsMouseChanged: {
if (containsMouse)
mainItem.lastMouseContainsIndex = index
else if (mainItem.lastMouseContainsIndex == index)
mainItem.lastMouseContainsIndex = -1
}
Rectangle {
anchors.fill: parent
opacity: 0.7
radius: Math.round(8 * DefaultStyle.dp)
color: mainItem.currentIndex
=== index ? DefaultStyle.main2_200 : DefaultStyle.main2_100
visible: mainItem.lastMouseContainsIndex === index
|| mainItem.currentIndex === index
}
onPressed: {
mainItem.currentIndex = model.index
mainItem.forceActiveFocus()
}
}
}
}

View file

@ -101,6 +101,7 @@ RowLayout {
visible: emojiPickerButton.checked visible: emojiPickerButton.checked
closePolicy: Popup.CloseOnPressOutside closePolicy: Popup.CloseOnPressOutside
onClosed: emojiPickerButton.checked = false onClosed: emojiPickerButton.checked = false
padding: 10 * DefaultStyle.dp
background: Item { background: Item {
anchors.fill: parent anchors.fill: parent
Rectangle { Rectangle {
@ -234,13 +235,14 @@ RowLayout {
} }
onCursorRectangleChanged: sendingAreaFlickable.ensureVisible(cursorRectangle) onCursorRectangleChanged: sendingAreaFlickable.ensureVisible(cursorRectangle)
wrapMode: TextEdit.WordWrap wrapMode: TextEdit.WordWrap
property string previousText Component.onCompleted: {
Component.onCompleted: previousText = text if (mainItem.chat) text = mainItem.chat.core.sendingText
}
onTextChanged: { onTextChanged: {
if (previousText === "" && text !== "") { if (text !== "" && mainItem.chat.core.composingName !== "") {
mainItem.chat.core.lCompose() mainItem.chat.core.lCompose()
} }
previousText = text mainItem.chat.core.sendingText = text
} }
Keys.onPressed: (event) => { Keys.onPressed: (event) => {
event.accepted = false event.accepted = false