hide group call button if no videoconference uri set

avoid displaying more messages when the list is not yet initialized

fix meeting form end hour combobox list display #LINQT-2127

check if at least one participant when creating group chat #LINQT-2134

display all the errors at a time if they all occur #LINQT-2133

add signal to add chat to list when state Created #LINQT-2131

fix chat deletion
This commit is contained in:
Gaelle Braud 2025-11-14 10:38:57 +01:00
parent a4b38e4fd1
commit e113058ae9
17 changed files with 220 additions and 159 deletions

View file

@ -167,6 +167,30 @@ void ChatList::setSelf(QSharedPointer<ChatList> me) {
addChatToList(core, room, message); addChatToList(core, room, message);
}); });
mModelConnection->makeConnectToModel(
&CoreModel::chatRoomStateChanged,
[this](const std::shared_ptr<linphone::Core> &core, const std::shared_ptr<linphone::ChatRoom> &chatRoom,
linphone::ChatRoom::State state) {
auto chatRoomAccount = chatRoom->getAccount();
auto currentAccount = CoreModel::getInstance()->getCore()->getDefaultAccount();
if (!chatRoomAccount || !currentAccount || !chatRoomAccount->getParams() || !currentAccount->getParams() ||
!chatRoomAccount->getParams()->getIdentityAddress()->weakEqual(
currentAccount->getParams()->getIdentityAddress())) {
lInfo() << "ChatRoom state of another account changed, return";
return;
}
if (chatRoom->getState() == linphone::ChatRoom::State::Created) {
lInfo() << "ChatRoom created, add it to the list" << chatRoom.get();
auto chatCore = ChatCore::create(chatRoom);
mModelConnection->invokeToCore([this, chatCore] {
if (chatCore) {
bool added = addChatInList(chatCore);
if (added) emit chatCreated(new ChatGui(chatCore));
}
});
}
});
connect(this, &ChatList::filterChanged, [this](QString filter) { connect(this, &ChatList::filterChanged, [this](QString filter) {
mFilter = filter; mFilter = filter;
lUpdate(); lUpdate();
@ -184,7 +208,8 @@ int ChatList::findChatIndex(ChatGui *chatGui) {
return it == chatList.end() ? -1 : std::distance(chatList.begin(), it); return it == chatList.end() ? -1 : std::distance(chatList.begin(), it);
} }
void ChatList::addChatInList(QSharedPointer<ChatCore> chatCore) { bool ChatList::addChatInList(QSharedPointer<ChatCore> chatCore) {
mustBeInMainThread(log().arg(Q_FUNC_INFO));
auto chatList = getSharedList<ChatCore>(); auto chatList = getSharedList<ChatCore>();
auto it = std::find_if(chatList.begin(), chatList.end(), [chatCore](const QSharedPointer<ChatCore> item) { auto it = std::find_if(chatList.begin(), chatList.end(), [chatCore](const QSharedPointer<ChatCore> item) {
return item && chatCore && item->getModel() && chatCore->getModel() && return item && chatCore && item->getModel() && chatCore->getModel() &&
@ -193,8 +218,10 @@ void ChatList::addChatInList(QSharedPointer<ChatCore> chatCore) {
if (it == chatList.end()) { if (it == chatList.end()) {
connectItem(chatCore); connectItem(chatCore);
add(chatCore); add(chatCore);
return true;
emit chatAdded(); emit chatAdded();
} }
return false;
} }
QVariant ChatList::data(const QModelIndex &index, int role) const { QVariant ChatList::data(const QModelIndex &index, int role) const {

View file

@ -42,7 +42,7 @@ public:
void connectItem(QSharedPointer<ChatCore> chat); void connectItem(QSharedPointer<ChatCore> chat);
int findChatIndex(ChatGui *chat); int findChatIndex(ChatGui *chat);
void addChatInList(QSharedPointer<ChatCore> chatCore); bool addChatInList(QSharedPointer<ChatCore> chatCore);
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
signals: signals:
@ -50,6 +50,9 @@ signals:
void filterChanged(QString filter); void filterChanged(QString filter);
void chatAdded(); void chatAdded();
void chatUpdated(); void chatUpdated();
// emit this signal to force selection when
// newly created chat added to the list
void chatCreated(ChatGui *chatGui);
private: private:
QString mFilter; QString mFilter;

View file

@ -46,6 +46,10 @@ void ChatProxy::setSourceModel(QAbstractItemModel *model) {
connect(this, &ChatProxy::filterTextChanged, newChatList, connect(this, &ChatProxy::filterTextChanged, newChatList,
[this, newChatList] { emit newChatList->filterChanged(getFilterText()); }); [this, newChatList] { emit newChatList->filterChanged(getFilterText()); });
connect(newChatList, &ChatList::chatAdded, this, [this] { invalidate(); }); connect(newChatList, &ChatList::chatAdded, this, [this] { invalidate(); });
connect(newChatList, &ChatList::chatCreated, this, [this](ChatGui *chatGui) {
invalidate();
emit chatCreated(chatGui);
});
connect(newChatList, &ChatList::dataChanged, this, [this] { invalidate(); }); connect(newChatList, &ChatList::dataChanged, this, [this] { invalidate(); });
} }
auto firstList = new SortFilterList(model, Qt::AscendingOrder); auto firstList = new SortFilterList(model, Qt::AscendingOrder);

View file

@ -41,6 +41,8 @@ public:
Q_INVOKABLE int findChatIndex(ChatGui *chatGui); Q_INVOKABLE int findChatIndex(ChatGui *chatGui);
Q_INVOKABLE void addChatInList(ChatGui *chatGui); Q_INVOKABLE void addChatInList(ChatGui *chatGui);
signals:
void chatCreated(ChatGui *chatGui);
protected: protected:
QSharedPointer<ChatList> mList; QSharedPointer<ChatList> mList;

View file

@ -2112,65 +2112,65 @@
<context> <context>
<name>ChatListView</name> <name>ChatListView</name>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="285"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="280"/>
<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>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="287"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="282"/>
<source>chat_message_draft_sending_text</source> <source>chat_message_draft_sending_text</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="430"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="425"/>
<source>chat_room_delete</source> <source>chat_room_delete</source>
<extracomment>&quot;Delete&quot;</extracomment> <extracomment>&quot;Delete&quot;</extracomment>
<translation>Löschen</translation> <translation>Löschen</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="369"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="364"/>
<source>chat_room_mute</source> <source>chat_room_mute</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="368"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="363"/>
<source>chat_room_unmute</source> <source>chat_room_unmute</source>
<extracomment>&quot;Mute&quot;</extracomment> <extracomment>&quot;Mute&quot;</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="382"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="377"/>
<source>chat_room_mark_as_read</source> <source>chat_room_mark_as_read</source>
<extracomment>&quot;Mark as read&quot;</extracomment> <extracomment>&quot;Mark as read&quot;</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="401"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="396"/>
<source>chat_room_leave</source> <source>chat_room_leave</source>
<extracomment>&quot;leave&quot;</extracomment> <extracomment>&quot;leave&quot;</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="407"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="402"/>
<source>chat_list_leave_chat_popup_title</source> <source>chat_list_leave_chat_popup_title</source>
<extracomment>leave the conversation ?</extracomment> <extracomment>leave the conversation ?</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="409"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="404"/>
<source>chat_list_leave_chat_popup_message</source> <source>chat_list_leave_chat_popup_message</source>
<extracomment>You will not be able to send or receive messages in this conversation anymore. Do You want to continue ?</extracomment> <extracomment>You will not be able to send or receive messages in this conversation anymore. Do You want to continue ?</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="436"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="431"/>
<source>chat_list_delete_chat_popup_title</source> <source>chat_list_delete_chat_popup_title</source>
<extracomment>Delete the conversation ?</extracomment> <extracomment>Delete the conversation ?</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="438"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="433"/>
<source>chat_list_delete_chat_popup_message</source> <source>chat_list_delete_chat_popup_message</source>
<extracomment>This conversation and all its messages will be deleted. Do You want to continue ?</extracomment> <extracomment>This conversation and all its messages will be deleted. Do You want to continue ?</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -2453,58 +2453,58 @@ Error</extracomment>
<context> <context>
<name>ChatMessagesListView</name> <name>ChatMessagesListView</name>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="112"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="115"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="123"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="126"/>
<source>popup_info_find_message_title</source> <source>popup_info_find_message_title</source>
<extracomment>Find message</extracomment> <extracomment>Find message</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="125"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="128"/>
<source>info_popup_no_result_message</source> <source>info_popup_no_result_message</source>
<extracomment>No result found</extracomment> <extracomment>No result found</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="117"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="120"/>
<source>info_popup_first_result_message</source> <source>info_popup_first_result_message</source>
<extracomment>First result reached</extracomment> <extracomment>First result reached</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="115"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="118"/>
<source>info_popup_last_result_message</source> <source>info_popup_last_result_message</source>
<extracomment>Last result reached</extracomment> <extracomment>Last result reached</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="162"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="165"/>
<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="164"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="167"/>
<source>unencrypted_conversation_warning</source> <source>unencrypted_conversation_warning</source>
<extracomment>This conversation is not encrypted !</extracomment> <extracomment>This conversation is not encrypted !</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="175"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="178"/>
<source>chat_message_list_encrypted_header_message</source> <source>chat_message_list_encrypted_header_message</source>
<extracomment>Messages in this conversation are e2e encrypted. <extracomment>Messages in this conversation are e2e encrypted.
Only your correspondent can decrypt them.</extracomment> Only your correspondent can decrypt them.</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="177"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="180"/>
<source>chat_message_list_not_encrypted_header_message</source> <source>chat_message_list_not_encrypted_header_message</source>
<extracomment>Messages are not end to end encrypted, <extracomment>Messages are not end to end encrypted,
may sure you don&apos;t share any sensitive information !</extracomment> may sure you don&apos;t share any sensitive information !</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="217"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="220"/>
<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>
@ -2567,32 +2567,32 @@ Error</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="253"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="255"/>
<source>chat_action_start_new_chat</source> <source>chat_action_start_new_chat</source>
<extracomment>&quot;New chat&quot;</extracomment> <extracomment>&quot;New chat&quot;</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="290"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="292"/>
<source>chat_start_group_chat_title</source> <source>chat_start_group_chat_title</source>
<extracomment>&quot;Nouveau groupe&quot;</extracomment> <extracomment>&quot;Nouveau groupe&quot;</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="292"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="294"/>
<source>chat_action_start_group_chat</source> <source>chat_action_start_group_chat</source>
<extracomment>&quot;Créer&quot;</extracomment> <extracomment>&quot;Créer&quot;</extracomment>
<translation>Erstellen</translation> <translation>Erstellen</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="308"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="310"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="326"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="333"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="330"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="338"/>
<source>information_popup_error_title</source> <source>information_popup_error_title</source>
<translation>Fehler</translation> <translation>Fehler</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="310"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="312"/>
<source>information_popup_chat_creation_failed_message</source> <source>information_popup_chat_creation_failed_message</source>
<extracomment>&quot;La création a échoué&quot;</extracomment> <extracomment>&quot;La création a échoué&quot;</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -2603,19 +2603,25 @@ Error</extracomment>
<translation type="obsolete">Der Codec konnte nicht installiert werden.</translation> <translation type="obsolete">Der Codec konnte nicht installiert werden.</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="328"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="330"/>
<source>group_chat_error_must_have_name</source> <source>group_chat_error_must_have_name</source>
<extracomment>&quot;Un nom doit être donné au groupe</extracomment> <extracomment>&quot;Un nom doit être donné au groupe</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="332"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="335"/>
<source>group_chat_error_no_participant</source>
<extracomment>&quot;Please select at least one participant</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="340"/>
<source>group_call_error_not_connected</source> <source>group_call_error_not_connected</source>
<extracomment>&quot;Vous n&apos;etes pas connecté&quot;</extracomment> <extracomment>&quot;Vous n&apos;etes pas connecté&quot;</extracomment>
<translation>Sie sind nicht verbunden</translation> <translation>Sie sind nicht verbunden</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="336"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="346"/>
<source>chat_creation_in_progress</source> <source>chat_creation_in_progress</source>
<extracomment>Creation de la conversation en cours </extracomment> <extracomment>Creation de la conversation en cours </extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -3543,7 +3549,7 @@ Error</extracomment>
<context> <context>
<name>CreationFormLayout</name> <name>CreationFormLayout</name>
<message> <message>
<location filename="../../view/Control/Container/CreationFormLayout.qml" line="46"/> <location filename="../../view/Control/Container/CreationFormLayout.qml" line="47"/>
<source>search_bar_look_for_contact_text</source> <source>search_bar_look_for_contact_text</source>
<extracomment>&quot;Rechercher un contact&quot;</extracomment> <extracomment>&quot;Rechercher un contact&quot;</extracomment>
<translation>Kontakt suchen</translation> <translation>Kontakt suchen</translation>
@ -3930,20 +3936,20 @@ Error</extracomment>
<translation type="obsolete">Gruppenname</translation> <translation type="obsolete">Gruppenname</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="39"/> <location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="40"/>
<source>return_accessible_name</source> <source>return_accessible_name</source>
<extracomment>Return</extracomment> <extracomment>Return</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="76"/> <location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="76"/>
<location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="95"/> <location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="85"/>
<source>group_start_dialog_subject_hint</source> <source>group_start_dialog_subject_hint</source>
<extracomment>&quot;Nom du groupe&quot;</extracomment> <extracomment>&quot;Nom du groupe&quot;</extracomment>
<translation>Gruppenname</translation> <translation>Gruppenname</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="85"/> <location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="78"/>
<source>required</source> <source>required</source>
<extracomment>&quot;Requis&quot;</extracomment> <extracomment>&quot;Requis&quot;</extracomment>
<translation>Erforderlich</translation> <translation>Erforderlich</translation>
@ -4955,7 +4961,7 @@ Error</extracomment>
<context> <context>
<name>NewCallForm</name> <name>NewCallForm</name>
<message> <message>
<location filename="../../view/Page/Form/Call/NewCallForm.qml" line="23"/> <location filename="../../view/Page/Form/Call/NewCallForm.qml" line="24"/>
<source>call_transfer_active_calls_label</source> <source>call_transfer_active_calls_label</source>
<extracomment>&quot;Appels en cours&quot;</extracomment> <extracomment>&quot;Appels en cours&quot;</extracomment>
<translation>Laufender Anruf</translation> <translation>Laufender Anruf</translation>

View file

@ -2089,65 +2089,65 @@
<context> <context>
<name>ChatListView</name> <name>ChatListView</name>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="285"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="280"/>
<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>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="287"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="282"/>
<source>chat_message_draft_sending_text</source> <source>chat_message_draft_sending_text</source>
<translation>Draft : %1</translation> <translation>Draft : %1</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="430"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="425"/>
<source>chat_room_delete</source> <source>chat_room_delete</source>
<extracomment>&quot;Delete&quot;</extracomment> <extracomment>&quot;Delete&quot;</extracomment>
<translation>Delete</translation> <translation>Delete</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="369"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="364"/>
<source>chat_room_mute</source> <source>chat_room_mute</source>
<translation>Mute</translation> <translation>Mute</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="368"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="363"/>
<source>chat_room_unmute</source> <source>chat_room_unmute</source>
<extracomment>&quot;Mute&quot;</extracomment> <extracomment>&quot;Mute&quot;</extracomment>
<translation>Unmute</translation> <translation>Unmute</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="382"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="377"/>
<source>chat_room_mark_as_read</source> <source>chat_room_mark_as_read</source>
<extracomment>&quot;Mark as read&quot;</extracomment> <extracomment>&quot;Mark as read&quot;</extracomment>
<translation>Mark as read</translation> <translation>Mark as read</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="401"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="396"/>
<source>chat_room_leave</source> <source>chat_room_leave</source>
<extracomment>&quot;leave&quot;</extracomment> <extracomment>&quot;leave&quot;</extracomment>
<translation>Leave</translation> <translation>Leave</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="407"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="402"/>
<source>chat_list_leave_chat_popup_title</source> <source>chat_list_leave_chat_popup_title</source>
<extracomment>leave the conversation ?</extracomment> <extracomment>leave the conversation ?</extracomment>
<translation>Leave the conversation ?</translation> <translation>Leave the conversation ?</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="409"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="404"/>
<source>chat_list_leave_chat_popup_message</source> <source>chat_list_leave_chat_popup_message</source>
<extracomment>You will not be able to send or receive messages in this conversation anymore. Do You want to continue ?</extracomment> <extracomment>You will not be able to send or receive messages in this conversation anymore. Do You want to continue ?</extracomment>
<translation>You will not be able to send or receive messages in this conversation anymore. Do You want to continue ?</translation> <translation>You will not be able to send or receive messages in this conversation anymore. Do You want to continue ?</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="436"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="431"/>
<source>chat_list_delete_chat_popup_title</source> <source>chat_list_delete_chat_popup_title</source>
<extracomment>Delete the conversation ?</extracomment> <extracomment>Delete the conversation ?</extracomment>
<translation>Delete the conversation ?</translation> <translation>Delete the conversation ?</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="438"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="433"/>
<source>chat_list_delete_chat_popup_message</source> <source>chat_list_delete_chat_popup_message</source>
<extracomment>This conversation and all its messages will be deleted. Do You want to continue ?</extracomment> <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> <translation>This conversation and all its messages will be deleted. Do You want to continue ?</translation>
@ -2425,44 +2425,44 @@ Error</extracomment>
<context> <context>
<name>ChatMessagesListView</name> <name>ChatMessagesListView</name>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="112"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="115"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="123"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="126"/>
<source>popup_info_find_message_title</source> <source>popup_info_find_message_title</source>
<extracomment>Find message</extracomment> <extracomment>Find message</extracomment>
<translation>Find message</translation> <translation>Find message</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="125"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="128"/>
<source>info_popup_no_result_message</source> <source>info_popup_no_result_message</source>
<extracomment>No result found</extracomment> <extracomment>No result found</extracomment>
<translation>No result found</translation> <translation>No result found</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="117"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="120"/>
<source>info_popup_first_result_message</source> <source>info_popup_first_result_message</source>
<extracomment>First result reached</extracomment> <extracomment>First result reached</extracomment>
<translation>First result reached</translation> <translation>First result reached</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="115"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="118"/>
<source>info_popup_last_result_message</source> <source>info_popup_last_result_message</source>
<extracomment>Last result reached</extracomment> <extracomment>Last result reached</extracomment>
<translation>Last result reached</translation> <translation>Last result reached</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="162"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="165"/>
<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="164"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="167"/>
<source>unencrypted_conversation_warning</source> <source>unencrypted_conversation_warning</source>
<extracomment>This conversation is not encrypted !</extracomment> <extracomment>This conversation is not encrypted !</extracomment>
<translation>This conversation is not encrypted !</translation> <translation>This conversation is not encrypted !</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="175"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="178"/>
<source>chat_message_list_encrypted_header_message</source> <source>chat_message_list_encrypted_header_message</source>
<extracomment>Messages in this conversation are e2e encrypted. <extracomment>Messages in this conversation are e2e encrypted.
Only your correspondent can decrypt them.</extracomment> Only your correspondent can decrypt them.</extracomment>
@ -2470,7 +2470,7 @@ Error</extracomment>
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="177"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="180"/>
<source>chat_message_list_not_encrypted_header_message</source> <source>chat_message_list_not_encrypted_header_message</source>
<extracomment>Messages are not end to end encrypted, <extracomment>Messages are not end to end encrypted,
may sure you don&apos;t share any sensitive information !</extracomment> may sure you don&apos;t share any sensitive information !</extracomment>
@ -2478,7 +2478,7 @@ Only your correspondent can decrypt them.</translation>
may sure you don&apos;t share any sensitive information !</translation> may sure you don&apos;t share any sensitive information !</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="217"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="220"/>
<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>
@ -2541,50 +2541,56 @@ Only your correspondent can decrypt them.</translation>
<translation>No conversation in history</translation> <translation>No conversation in history</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="253"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="255"/>
<source>chat_action_start_new_chat</source> <source>chat_action_start_new_chat</source>
<extracomment>&quot;New chat&quot;</extracomment> <extracomment>&quot;New chat&quot;</extracomment>
<translation>New conversation</translation> <translation>New conversation</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="290"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="292"/>
<source>chat_start_group_chat_title</source> <source>chat_start_group_chat_title</source>
<extracomment>&quot;Nouveau groupe&quot;</extracomment> <extracomment>&quot;Nouveau groupe&quot;</extracomment>
<translation>New group</translation> <translation>New group</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="292"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="294"/>
<source>chat_action_start_group_chat</source> <source>chat_action_start_group_chat</source>
<extracomment>&quot;Créer&quot;</extracomment> <extracomment>&quot;Créer&quot;</extracomment>
<translation>Create</translation> <translation>Create</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="308"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="310"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="326"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="333"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="330"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="338"/>
<source>information_popup_error_title</source> <source>information_popup_error_title</source>
<translation>Error</translation> <translation>Error</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="310"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="312"/>
<source>information_popup_chat_creation_failed_message</source> <source>information_popup_chat_creation_failed_message</source>
<extracomment>&quot;La création a échoué&quot;</extracomment> <extracomment>&quot;La création a échoué&quot;</extracomment>
<translation>Creation failed</translation> <translation>Creation failed</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="328"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="330"/>
<source>group_chat_error_must_have_name</source> <source>group_chat_error_must_have_name</source>
<extracomment>&quot;Un nom doit être donné au groupe</extracomment> <extracomment>&quot;Un nom doit être donné au groupe</extracomment>
<translation>A name must be set for the group</translation> <translation>A name must be set for the group</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="332"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="335"/>
<source>group_chat_error_no_participant</source>
<extracomment>&quot;Please select at least one participant</extracomment>
<translation>Please select at least one participant</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="340"/>
<source>group_call_error_not_connected</source> <source>group_call_error_not_connected</source>
<extracomment>&quot;Vous n&apos;etes pas connecté&quot;</extracomment> <extracomment>&quot;Vous n&apos;etes pas connecté&quot;</extracomment>
<translation>You are not connected</translation> <translation>You are not connected</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="336"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="346"/>
<source>chat_creation_in_progress</source> <source>chat_creation_in_progress</source>
<extracomment>Creation de la conversation en cours </extracomment> <extracomment>Creation de la conversation en cours </extracomment>
<translation>Chat creation pending</translation> <translation>Chat creation pending</translation>
@ -3462,7 +3468,7 @@ Only your correspondent can decrypt them.</translation>
<context> <context>
<name>CreationFormLayout</name> <name>CreationFormLayout</name>
<message> <message>
<location filename="../../view/Control/Container/CreationFormLayout.qml" line="46"/> <location filename="../../view/Control/Container/CreationFormLayout.qml" line="47"/>
<source>search_bar_look_for_contact_text</source> <source>search_bar_look_for_contact_text</source>
<extracomment>&quot;Rechercher un contact&quot;</extracomment> <extracomment>&quot;Rechercher un contact&quot;</extracomment>
<translation>Find contact</translation> <translation>Find contact</translation>
@ -3846,20 +3852,20 @@ Expiration : %1</translation>
<context> <context>
<name>GroupCreationFormLayout</name> <name>GroupCreationFormLayout</name>
<message> <message>
<location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="39"/> <location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="40"/>
<source>return_accessible_name</source> <source>return_accessible_name</source>
<extracomment>Return</extracomment> <extracomment>Return</extracomment>
<translation>Return</translation> <translation>Return</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="76"/> <location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="76"/>
<location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="95"/> <location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="85"/>
<source>group_start_dialog_subject_hint</source> <source>group_start_dialog_subject_hint</source>
<extracomment>&quot;Nom du groupe&quot;</extracomment> <extracomment>&quot;Nom du groupe&quot;</extracomment>
<translation>Group name</translation> <translation>Group name</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="85"/> <location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="78"/>
<source>required</source> <source>required</source>
<extracomment>&quot;Requis&quot;</extracomment> <extracomment>&quot;Requis&quot;</extracomment>
<translation>Required</translation> <translation>Required</translation>
@ -4867,7 +4873,7 @@ Expiration : %1</translation>
<context> <context>
<name>NewCallForm</name> <name>NewCallForm</name>
<message> <message>
<location filename="../../view/Page/Form/Call/NewCallForm.qml" line="23"/> <location filename="../../view/Page/Form/Call/NewCallForm.qml" line="24"/>
<source>call_transfer_active_calls_label</source> <source>call_transfer_active_calls_label</source>
<extracomment>&quot;Appels en cours&quot;</extracomment> <extracomment>&quot;Appels en cours&quot;</extracomment>
<translation>Ongoing call</translation> <translation>Ongoing call</translation>

View file

@ -2089,65 +2089,65 @@
<context> <context>
<name>ChatListView</name> <name>ChatListView</name>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="285"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="280"/>
<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>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="287"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="282"/>
<source>chat_message_draft_sending_text</source> <source>chat_message_draft_sending_text</source>
<translation>Brouillon : %1</translation> <translation>Brouillon : %1</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="430"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="425"/>
<source>chat_room_delete</source> <source>chat_room_delete</source>
<extracomment>&quot;Delete&quot;</extracomment> <extracomment>&quot;Delete&quot;</extracomment>
<translation>Supprimer</translation> <translation>Supprimer</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="369"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="364"/>
<source>chat_room_mute</source> <source>chat_room_mute</source>
<translation>Mettre en sourdine</translation> <translation>Mettre en sourdine</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="368"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="363"/>
<source>chat_room_unmute</source> <source>chat_room_unmute</source>
<extracomment>&quot;Mute&quot;</extracomment> <extracomment>&quot;Mute&quot;</extracomment>
<translation>Enlever la sourdine </translation> <translation>Enlever la sourdine </translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="382"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="377"/>
<source>chat_room_mark_as_read</source> <source>chat_room_mark_as_read</source>
<extracomment>&quot;Mark as read&quot;</extracomment> <extracomment>&quot;Mark as read&quot;</extracomment>
<translation>Marquer comme lu</translation> <translation>Marquer comme lu</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="401"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="396"/>
<source>chat_room_leave</source> <source>chat_room_leave</source>
<extracomment>&quot;leave&quot;</extracomment> <extracomment>&quot;leave&quot;</extracomment>
<translation>Quitter la conversation</translation> <translation>Quitter la conversation</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="407"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="402"/>
<source>chat_list_leave_chat_popup_title</source> <source>chat_list_leave_chat_popup_title</source>
<extracomment>leave the conversation ?</extracomment> <extracomment>leave the conversation ?</extracomment>
<translation>Quitter la conversation ?</translation> <translation>Quitter la conversation ?</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="409"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="404"/>
<source>chat_list_leave_chat_popup_message</source> <source>chat_list_leave_chat_popup_message</source>
<extracomment>You will not be able to send or receive messages in this conversation anymore. Do You want to continue ?</extracomment> <extracomment>You will not be able to send or receive messages in this conversation anymore. Do You want to continue ?</extracomment>
<translation>Vous ne pourrez plus envoyer ou recevoir de messages dans cette conversation. Souhaitez-vous continuer ?</translation> <translation>Vous ne pourrez plus envoyer ou recevoir de messages dans cette conversation. Souhaitez-vous continuer ?</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="436"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="431"/>
<source>chat_list_delete_chat_popup_title</source> <source>chat_list_delete_chat_popup_title</source>
<extracomment>Delete the conversation ?</extracomment> <extracomment>Delete the conversation ?</extracomment>
<translation>Supprimer la conversation ?</translation> <translation>Supprimer la conversation ?</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="438"/> <location filename="../../view/Control/Display/Chat/ChatListView.qml" line="433"/>
<source>chat_list_delete_chat_popup_message</source> <source>chat_list_delete_chat_popup_message</source>
<extracomment>This conversation and all its messages will be deleted. Do You want to continue ?</extracomment> <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> <translation>La conversation et tous ses messages seront supprimés. Souhaitez-vous continuer ?</translation>
@ -2425,44 +2425,44 @@ Error</extracomment>
<context> <context>
<name>ChatMessagesListView</name> <name>ChatMessagesListView</name>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="112"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="115"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="123"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="126"/>
<source>popup_info_find_message_title</source> <source>popup_info_find_message_title</source>
<extracomment>Find message</extracomment> <extracomment>Find message</extracomment>
<translation>Trouver un message</translation> <translation>Trouver un message</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="125"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="128"/>
<source>info_popup_no_result_message</source> <source>info_popup_no_result_message</source>
<extracomment>No result found</extracomment> <extracomment>No result found</extracomment>
<translation>Aucun résultat trouvé</translation> <translation>Aucun résultat trouvé</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="117"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="120"/>
<source>info_popup_first_result_message</source> <source>info_popup_first_result_message</source>
<extracomment>First result reached</extracomment> <extracomment>First result reached</extracomment>
<translation>Premier résultat atteint</translation> <translation>Premier résultat atteint</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="115"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="118"/>
<source>info_popup_last_result_message</source> <source>info_popup_last_result_message</source>
<extracomment>Last result reached</extracomment> <extracomment>Last result reached</extracomment>
<translation>Dernier résultat atteint</translation> <translation>Dernier résultat atteint</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="162"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="165"/>
<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="164"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="167"/>
<source>unencrypted_conversation_warning</source> <source>unencrypted_conversation_warning</source>
<extracomment>This conversation is not encrypted !</extracomment> <extracomment>This conversation is not encrypted !</extracomment>
<translation>Cette conversation n&apos;est pas chiffrée !</translation> <translation>Cette conversation n&apos;est pas chiffrée !</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="175"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="178"/>
<source>chat_message_list_encrypted_header_message</source> <source>chat_message_list_encrypted_header_message</source>
<extracomment>Messages in this conversation are e2e encrypted. <extracomment>Messages in this conversation are e2e encrypted.
Only your correspondent can decrypt them.</extracomment> Only your correspondent can decrypt them.</extracomment>
@ -2470,7 +2470,7 @@ Error</extracomment>
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="177"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="180"/>
<source>chat_message_list_not_encrypted_header_message</source> <source>chat_message_list_not_encrypted_header_message</source>
<extracomment>Messages are not end to end encrypted, <extracomment>Messages are not end to end encrypted,
may sure you don&apos;t share any sensitive information !</extracomment> may sure you don&apos;t share any sensitive information !</extracomment>
@ -2478,7 +2478,7 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
assurez-vous de ne pas partager dinformations sensibles !</translation> assurez-vous de ne pas partager dinformations sensibles !</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="217"/> <location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="220"/>
<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>
@ -2541,50 +2541,56 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
<translation>Aucune conversation dans votre historique</translation> <translation>Aucune conversation dans votre historique</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="253"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="255"/>
<source>chat_action_start_new_chat</source> <source>chat_action_start_new_chat</source>
<extracomment>&quot;New chat&quot;</extracomment> <extracomment>&quot;New chat&quot;</extracomment>
<translation>Nouvelle conversation</translation> <translation>Nouvelle conversation</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="290"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="292"/>
<source>chat_start_group_chat_title</source> <source>chat_start_group_chat_title</source>
<extracomment>&quot;Nouveau groupe&quot;</extracomment> <extracomment>&quot;Nouveau groupe&quot;</extracomment>
<translation>Nouveau groupe</translation> <translation>Nouveau groupe</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="292"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="294"/>
<source>chat_action_start_group_chat</source> <source>chat_action_start_group_chat</source>
<extracomment>&quot;Créer&quot;</extracomment> <extracomment>&quot;Créer&quot;</extracomment>
<translation>Créer</translation> <translation>Créer</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="308"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="310"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="326"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="333"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="330"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="338"/>
<source>information_popup_error_title</source> <source>information_popup_error_title</source>
<translation>Erreur</translation> <translation>Erreur</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="310"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="312"/>
<source>information_popup_chat_creation_failed_message</source> <source>information_popup_chat_creation_failed_message</source>
<extracomment>&quot;La création a échoué&quot;</extracomment> <extracomment>&quot;La création a échoué&quot;</extracomment>
<translation>La création a échoué</translation> <translation>La création a échoué</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="328"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="330"/>
<source>group_chat_error_must_have_name</source> <source>group_chat_error_must_have_name</source>
<extracomment>&quot;Un nom doit être donné au groupe</extracomment> <extracomment>&quot;Un nom doit être donné au groupe</extracomment>
<translation>Un nom doit être donné au groupe</translation> <translation>Un nom doit être donné au groupe</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="332"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="335"/>
<source>group_chat_error_no_participant</source>
<extracomment>&quot;Please select at least one participant</extracomment>
<translation>Veuillez sélectionner au moins un participant</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="340"/>
<source>group_call_error_not_connected</source> <source>group_call_error_not_connected</source>
<extracomment>&quot;Vous n&apos;etes pas connecté&quot;</extracomment> <extracomment>&quot;Vous n&apos;etes pas connecté&quot;</extracomment>
<translation>Vous n&apos;êtes pas connecté</translation> <translation>Vous n&apos;êtes pas connecté</translation>
</message> </message>
<message> <message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="336"/> <location filename="../../view/Page/Main/Chat/ChatPage.qml" line="346"/>
<source>chat_creation_in_progress</source> <source>chat_creation_in_progress</source>
<extracomment>Creation de la conversation en cours </extracomment> <extracomment>Creation de la conversation en cours </extracomment>
<translation>Création de la conversation en cours</translation> <translation>Création de la conversation en cours</translation>
@ -3462,7 +3468,7 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
<context> <context>
<name>CreationFormLayout</name> <name>CreationFormLayout</name>
<message> <message>
<location filename="../../view/Control/Container/CreationFormLayout.qml" line="46"/> <location filename="../../view/Control/Container/CreationFormLayout.qml" line="47"/>
<source>search_bar_look_for_contact_text</source> <source>search_bar_look_for_contact_text</source>
<extracomment>&quot;Rechercher un contact&quot;</extracomment> <extracomment>&quot;Rechercher un contact&quot;</extracomment>
<translation>Rechercher un contact</translation> <translation>Rechercher un contact</translation>
@ -3846,20 +3852,20 @@ Expiration : %1</translation>
<context> <context>
<name>GroupCreationFormLayout</name> <name>GroupCreationFormLayout</name>
<message> <message>
<location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="39"/> <location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="40"/>
<source>return_accessible_name</source> <source>return_accessible_name</source>
<extracomment>Return</extracomment> <extracomment>Return</extracomment>
<translation>Retour</translation> <translation>Retour</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="76"/> <location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="76"/>
<location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="95"/> <location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="85"/>
<source>group_start_dialog_subject_hint</source> <source>group_start_dialog_subject_hint</source>
<extracomment>&quot;Nom du groupe&quot;</extracomment> <extracomment>&quot;Nom du groupe&quot;</extracomment>
<translation>Nom du groupe</translation> <translation>Nom du groupe</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="85"/> <location filename="../../view/Control/Container/GroupCreationFormLayout.qml" line="78"/>
<source>required</source> <source>required</source>
<extracomment>&quot;Requis&quot;</extracomment> <extracomment>&quot;Requis&quot;</extracomment>
<translation>Requis</translation> <translation>Requis</translation>
@ -4867,7 +4873,7 @@ Expiration : %1</translation>
<context> <context>
<name>NewCallForm</name> <name>NewCallForm</name>
<message> <message>
<location filename="../../view/Page/Form/Call/NewCallForm.qml" line="23"/> <location filename="../../view/Page/Form/Call/NewCallForm.qml" line="24"/>
<source>call_transfer_active_calls_label</source> <source>call_transfer_active_calls_label</source>
<extracomment>&quot;Appels en cours&quot;</extracomment> <extracomment>&quot;Appels en cours&quot;</extracomment>
<translation>Appels en cours</translation> <translation>Appels en cours</translation>

View file

@ -760,6 +760,7 @@ ToolModel::createGroupChatRoom(QString subject, std::list<std::shared_ptr<linpho
auto accountParams = account->getParams(); auto accountParams = account->getParams();
auto chatRoom = core->createChatRoom(params, participantsAddresses); auto chatRoom = core->createChatRoom(params, participantsAddresses);
if (!chatRoom) lWarning() << ("[ToolModel] Failed to create group chat");
return chatRoom; return chatRoom;
} }

View file

@ -1435,9 +1435,9 @@ QDateTime Utils::addYears(QDateTime date, int years) {
return date; return date;
} }
int Utils::timeOffset(QDateTime start, QDateTime end) { int Utils::timeOffset(QTime start, QTime end) {
int offset = start.secsTo(end); int offset = start.secsTo(end);
return std::min(offset, INT_MAX); return std::max(std::min(offset, INT_MAX), INT_MIN);
} }
int Utils::daysOffset(QDateTime start, QDateTime end) { int Utils::daysOffset(QDateTime start, QDateTime end) {

View file

@ -126,7 +126,7 @@ public:
Q_INVOKABLE static int secsTo(const QString &start, const QString &end); Q_INVOKABLE static int secsTo(const QString &start, const QString &end);
Q_INVOKABLE static QDateTime addSecs(QDateTime date, int secs); Q_INVOKABLE static QDateTime addSecs(QDateTime date, int secs);
Q_INVOKABLE static QDateTime addYears(QDateTime date, int years); Q_INVOKABLE static QDateTime addYears(QDateTime date, int years);
Q_INVOKABLE static int timeOffset(QDateTime start, QDateTime end); Q_INVOKABLE static int timeOffset(QTime start, QTime end);
Q_INVOKABLE static int daysOffset(QDateTime start, QDateTime end); Q_INVOKABLE static int daysOffset(QDateTime start, QDateTime end);
Q_INVOKABLE static VariantObject *interpretUrl(QString uri); Q_INVOKABLE static VariantObject *interpretUrl(QString uri);
Q_INVOKABLE static bool isValidURL(const QString &url); Q_INVOKABLE static bool isValidURL(const QString &url);

View file

@ -14,6 +14,7 @@ FocusScope {
property color searchBarBorderColor: "transparent" property color searchBarBorderColor: "transparent"
property alias searchBar: searchBar property alias searchBar: searchBar
property string startGroupButtonText property string startGroupButtonText
property bool startGroupButtonVisible: true
property NumericPadPopup numPadPopup property NumericPadPopup numPadPopup
signal groupCreationRequested() signal groupCreationRequested()
signal contactClicked(FriendGui contact) signal contactClicked(FriendGui contact)
@ -52,6 +53,7 @@ FocusScope {
spacing: Utils.getSizeWithScreenRatio(32) spacing: Utils.getSizeWithScreenRatio(32)
Button { Button {
id: groupCreationButton id: groupCreationButton
visible: mainItem.startGroupButtonVisible
Layout.preferredWidth: Utils.getSizeWithScreenRatio(320) Layout.preferredWidth: Utils.getSizeWithScreenRatio(320)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(44) Layout.preferredHeight: Utils.getSizeWithScreenRatio(44)
padding: 0 padding: 0

View file

@ -9,6 +9,7 @@ FocusScope{
id: mainItem id: mainItem
property alias contentItem: contentItem.data property alias contentItem: contentItem.data
property string label: "" property string label: ""
property string labelIndication
property string tooltip: "" property string tooltip: ""
property bool mandatory: false property bool mandatory: false
@ -73,6 +74,12 @@ FocusScope{
text: mainItem.tooltip text: mainItem.tooltip
} }
} }
Text {
visible: mainItem.labelIndication !== undefined
font.pixelSize: Utils.getSizeWithScreenRatio(12)
font.weight: Utils.getSizeWithScreenRatio(300)
text: mainItem.labelIndication
}
} }
Item { Item {

View file

@ -12,6 +12,7 @@ import "qrc:/qt/qml/Linphone/view/Style/buttonStyle.js" as ButtonStyle
FocusScope { FocusScope {
id: mainItem id: mainItem
property alias addParticipantsLayout: addParticipantsLayout property alias addParticipantsLayout: addParticipantsLayout
property alias groupNameItem: groupNameItem
property alias groupName: groupName property alias groupName: groupName
property string formTitle property string formTitle
property string createGroupButtonText property string createGroupButtonText
@ -65,34 +66,24 @@ FocusScope {
} }
} }
} }
RowLayout { FormItemLayout {
spacing: 0 id: groupNameItem
enableErrorText: true
Layout.fillWidth: true
Layout.topMargin: Utils.getSizeWithScreenRatio(18) Layout.topMargin: Utils.getSizeWithScreenRatio(18)
Layout.rightMargin: Utils.getSizeWithScreenRatio(38) Layout.rightMargin: Utils.getSizeWithScreenRatio(38)
Text { //: "Nom du groupe"
font.pixelSize: Typography.p2.pixelSize label: qsTr("group_start_dialog_subject_hint")
font.weight: Typography.p2.weight //: "Requis"
//: "Nom du groupe" labelIndication: qsTr("required")
text: qsTr("group_start_dialog_subject_hint") contentItem: TextField {
} id: groupName
Item {
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredHeight: Utils.getSizeWithScreenRatio(49)
focus: true
KeyNavigation.down: addParticipantsLayout //participantList.count > 0 ? participantList : searchbar
Accessible.name: qsTr("group_start_dialog_subject_hint")
} }
Text {
font.pixelSize: Utils.getSizeWithScreenRatio(12)
font.weight: Utils.getSizeWithScreenRatio(300)
//: "Requis"
text: qsTr("required")
}
}
TextField {
id: groupName
Layout.fillWidth: true
Layout.rightMargin: Utils.getSizeWithScreenRatio(38)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(49)
focus: true
KeyNavigation.down: addParticipantsLayout //participantList.count > 0 ? participantList : searchbar
Accessible.name: qsTr("group_start_dialog_subject_hint")
} }
AddParticipantsForm { AddParticipantsForm {
id: addParticipantsLayout id: addParticipantsLayout

View file

@ -60,6 +60,9 @@ ListView {
onLayoutChanged: { onLayoutChanged: {
selectChat(mainItem.currentChatGui) selectChat(mainItem.currentChatGui)
} }
onChatCreated: (chat) => {
selectChat(chat)
}
} }
// flickDeceleration: 10000 // flickDeceleration: 10000
spacing: Utils.getSizeWithScreenRatio(10) spacing: Utils.getSizeWithScreenRatio(10)
@ -67,14 +70,6 @@ ListView {
function selectChat(chatGui) { function selectChat(chatGui) {
var index = chatProxy.findChatIndex(chatGui) var index = chatProxy.findChatIndex(chatGui)
mainItem.currentIndex = index mainItem.currentIndex = index
// if the chat exists, it may not be displayed
// in list if hide_empty_chatrooms is set. Thus, we need
// to force adding it in the list so it is displayed
if (index === -1 && chatGui) {
chatProxy.addChatInList(chatGui)
var index = chatProxy.findChatIndex(chatGui)
mainItem.currentIndex = index
}
} }
Component.onCompleted: cacheBuffer = Math.max(contentHeight, 0) //contentHeight>0 ? contentHeight : 0// cache all items Component.onCompleted: cacheBuffer = Math.max(contentHeight, 0) //contentHeight>0 ? contentHeight : 0// cache all items

View file

@ -73,7 +73,10 @@ ListView {
onAtYEndChanged: if (atYEnd && chat) { onAtYEndChanged: if (atYEnd && chat) {
chat.core.lMarkAsRead() chat.core.lMarkAsRead()
} }
onAtYBeginningChanged: if (atYBeginning) { // Workaround : check if there is already items in the list
// so this function is only called when the user actually scroll
// the view till the begining
onAtYBeginningChanged: if (atYBeginning && count !== 0) {
eventLogProxy.displayMore() eventLogProxy.displayMore()
} }

View file

@ -15,6 +15,7 @@ CreationFormLayout {
//: Appel de groupe //: Appel de groupe
startGroupButtonText: qsTr("call_start_group_call_title") startGroupButtonText: qsTr("call_start_group_call_title")
startGroupButtonVisible: !SettingsCpp.disableMeetingsFeature
topLayoutVisible: mainItem.displayCurrentCalls && callList.count > 0 topLayoutVisible: mainItem.displayCurrentCalls && callList.count > 0
topContent: [ topContent: [

View file

@ -198,8 +198,8 @@ AbstractMainPage {
Connections { Connections {
target: mainItem target: mainItem
function onSelectedChatGuiChanged() { function onRemoteChatChanged() {
chatListView.selectChat(mainItem.selectedChatGui) if (mainItem.remoteChat) chatListView.chatToSelect = mainItem.remoteChat
} }
function onOpenChatRequested(chat) { function onOpenChatRequested(chat) {
chatListView.chatToSelect = chat chatListView.chatToSelect = chat
@ -322,22 +322,29 @@ AbstractMainPage {
} }
onGroupCreationRequested: { onGroupCreationRequested: {
var hasError = false
if (groupName.text.length === 0) { if (groupName.text.length === 0) {
//: "Un nom doit être donné au groupe
groupNameItem.errorMessage = qsTr("group_chat_error_must_have_name")
hasError = true
} if (addParticipantsLayout.selectedParticipantsCount === 0) {
UtilsCpp.showInformationPopup(qsTr("information_popup_error_title"), UtilsCpp.showInformationPopup(qsTr("information_popup_error_title"),
//: "Un nom doit être donné au groupe //: "Please select at least one participant
qsTr("group_chat_error_must_have_name"), false) qsTr("group_chat_error_no_participant"), false)
} else if (!mainItem.isRegistered) { hasError = true
} if (!mainItem.isRegistered) {
UtilsCpp.showInformationPopup(qsTr("information_popup_error_title"), UtilsCpp.showInformationPopup(qsTr("information_popup_error_title"),
//: "Vous n'etes pas connecté" //: "Vous n'etes pas connecté"
qsTr("group_call_error_not_connected"), false) qsTr("group_call_error_not_connected"), false)
} else { hasError = true
console.log("create group chat") }
//: Creation de la conversation en cours if (hasError) return
mainWindow.showLoadingPopup(qsTr("chat_creation_in_progress"), true, function () { console.log("Create group chat")
if (chatCreationLayout.groupChat) chatCreationLayout.groupChat.core.lDelete() //: Creation de la conversation en cours
}) mainWindow.showLoadingPopup(qsTr("chat_creation_in_progress"), true, function () {
chatCreationLayout.groupChatObj = UtilsCpp.createGroupChat(chatCreationLayout.groupName.text, addParticipantsLayout.selectedParticipants) if (chatCreationLayout.groupChat) chatCreationLayout.groupChat.core.lDelete()
} })
chatCreationLayout.groupChatObj = UtilsCpp.createGroupChat(chatCreationLayout.groupName.text, addParticipantsLayout.selectedParticipants)
} }
} }
} }