From 5da7a9fd6b1025e0e663ebd2bed521eff939bfbe Mon Sep 17 00:00:00 2001 From: Gaelle Braud Date: Mon, 15 Sep 2025 10:42:57 +0200 Subject: [PATCH] fix has file content chat message only show address for suggestions do not refresh devices if current account is null fix crash add error message on account parameters saved and apply changes on text changed instead of edited (fix #LINQT-1935) fix disable meeting feature setting in wrong thread destroy parameter page when closed (to avoid multiplied connections) fix show/add contact in conversation info --- Linphone/core/account/AccountCore.cpp | 35 ++- Linphone/core/account/AccountCore.hpp | 3 + Linphone/core/account/AccountDeviceList.cpp | 2 +- .../core/chat/message/ChatMessageCore.cpp | 2 +- Linphone/core/chat/message/EventLogList.cpp | 2 +- Linphone/data/languages/de.ts | 282 ++++++++++-------- Linphone/data/languages/en.ts | 282 ++++++++++-------- Linphone/data/languages/fr_FR.ts | 282 ++++++++++-------- Linphone/model/account/AccountModel.cpp | 29 +- Linphone/model/account/AccountModel.hpp | 2 + Linphone/model/setting/SettingsModel.cpp | 11 +- Linphone/model/setting/SettingsModel.hpp | 6 +- .../Display/Contact/ContactListView.qml | 1 + .../view/Control/Input/DecoratedTextField.qml | 3 +- Linphone/view/Control/Input/TextField.qml | 5 +- .../Page/Layout/Chat/ConversationInfos.qml | 18 +- Linphone/view/Page/Layout/Main/MainLayout.qml | 5 + .../AccountSettingsParametersLayout.qml | 45 ++- 18 files changed, 613 insertions(+), 402 deletions(-) diff --git a/Linphone/core/account/AccountCore.cpp b/Linphone/core/account/AccountCore.cpp index 6fb83d3d8..c5ba9d7ab 100644 --- a/Linphone/core/account/AccountCore.cpp +++ b/Linphone/core/account/AccountCore.cpp @@ -296,6 +296,10 @@ void AccountCore::setSelf(QSharedPointer me) { mCoreModelConnection = SafeConnection::create(me, CoreModel::getInstance()); mCoreModelConnection->makeConnectToModel(&CoreModel::messageReadInChatRoom, [this] { mAccountModel->refreshUnreadNotifications(); }); + + mAccountModelConnection->makeConnectToModel(&AccountModel::setValueFailed, [this](const QString &errorMessage) { + mAccountModelConnection->invokeToCore([this, errorMessage]() { emit setValueFailed(errorMessage); }); + }); } void AccountCore::reset(const AccountCore &accountCore) { @@ -806,22 +810,21 @@ void AccountCore::writeIntoModel(std::shared_ptr model) const { void AccountCore::writeFromModel(const std::shared_ptr &model) { mustBeInLinphoneThread(getClassName() + Q_FUNC_INFO); - - mUnreadCallNotifications = model->getMissedCallsCount(); - mUnreadMessageNotifications = model->getUnreadMessagesCount(); - mMwiServerAddress = model->getMwiServerAddress(); - mTransport = LinphoneEnums::toString(LinphoneEnums::fromLinphone(model->getTransport())); - mServerAddress = model->getServerAddress(); - mOutboundProxyEnabled = model->getOutboundProxyEnabled(); - mStunServer = model->getStunServer(); - mIceEnabled = model->getIceEnabled(); - mAvpfEnabled = model->getAvpfEnabled(); - mBundleModeEnabled = model->getBundleModeEnabled(); - mExpire = model->getExpire(); - mConferenceFactoryAddress = model->getConferenceFactoryAddress(); - mAudioVideoConferenceFactoryAddress = model->getAudioVideoConferenceFactoryAddress(); - mLimeServerUrl = model->getLimeServerUrl(); - mVoicemailAddress = model->getVoicemailAddress(); + setUnreadCallNotifications(model->getMissedCallsCount()); + setUnreadMessageNotifications(model->getUnreadMessagesCount()); + setMwiServerAddress(model->getMwiServerAddress()); + setTransport(LinphoneEnums::toString(LinphoneEnums::fromLinphone(model->getTransport()))); + setServerAddress(model->getServerAddress()); + setOutboundProxyEnabled(model->getOutboundProxyEnabled()); + setStunServer(model->getStunServer()); + setIceEnabled(model->getIceEnabled()); + setAvpfEnabled(model->getAvpfEnabled()); + setBundleModeEnabled(model->getBundleModeEnabled()); + setExpire(model->getExpire()); + setConferenceFactoryAddress(model->getConferenceFactoryAddress()); + setAudioVideoConferenceFactoryAddress(model->getAudioVideoConferenceFactoryAddress()); + setLimeServerUrl(model->getLimeServerUrl()); + setVoicemailAddress(model->getVoicemailAddress()); } void AccountCore::save() { diff --git a/Linphone/core/account/AccountCore.hpp b/Linphone/core/account/AccountCore.hpp index 70bf45107..bcf6b086c 100644 --- a/Linphone/core/account/AccountCore.hpp +++ b/Linphone/core/account/AccountCore.hpp @@ -220,6 +220,8 @@ signals: void voicemailAddressChanged(); void presenceChanged(); + void setValueFailed(const QString &error); + // Account requests void lSetPictureUri(QString pictureUri); void lSetDefaultAccount(); @@ -271,6 +273,7 @@ private: int mMaxPresenceNoteSize; bool mIsSaved = true; + std::shared_ptr mAccountModel; QSharedPointer> mAccountModelConnection; QSharedPointer> mCoreModelConnection; diff --git a/Linphone/core/account/AccountDeviceList.cpp b/Linphone/core/account/AccountDeviceList.cpp index 42447ce88..6b72a5e11 100644 --- a/Linphone/core/account/AccountDeviceList.cpp +++ b/Linphone/core/account/AccountDeviceList.cpp @@ -69,7 +69,7 @@ void AccountDeviceList::setAccount(const QSharedPointer &accountCor mAccountCore = accountCore; lDebug() << log().arg("Set account model") << mAccountCore.get(); // oldConnect.unlock(); - refreshDevices(); + if (mAccountCore) refreshDevices(); // } } } diff --git a/Linphone/core/chat/message/ChatMessageCore.cpp b/Linphone/core/chat/message/ChatMessageCore.cpp index 4de3cb55d..9a8375610 100644 --- a/Linphone/core/chat/message/ChatMessageCore.cpp +++ b/Linphone/core/chat/message/ChatMessageCore.cpp @@ -142,7 +142,7 @@ ChatMessageCore::ChatMessageCore(const std::shared_ptr &c for (auto content : chatmessage->getContents()) { auto contentCore = ChatMessageContentCore::create(content, mChatMessageModel); mChatMessageContentList.push_back(contentCore); - if (content->isFile() && !content->isVoiceRecording()) mHasFileContent = true; + if ((content->isFile() || content->isFileTransfer()) && !content->isVoiceRecording()) mHasFileContent = true; if (content->isIcalendar()) mIsCalendarInvite = true; if (content->isVoiceRecording()) { mIsVoiceRecording = true; diff --git a/Linphone/core/chat/message/EventLogList.cpp b/Linphone/core/chat/message/EventLogList.cpp index 521992dfa..7486c5c05 100644 --- a/Linphone/core/chat/message/EventLogList.cpp +++ b/Linphone/core/chat/message/EventLogList.cpp @@ -63,7 +63,7 @@ void EventLogList::connectItem(const QSharedPointer &item) { auto message = item->getChatMessageCore(); if (message) { connect(message.get(), &ChatMessageCore::deleted, this, [this, item] { - emit mChatCore->lUpdateLastMessage(); + if (mChatCore) emit mChatCore->lUpdateLastMessage(); remove(item); }); connect(message.get(), &ChatMessageCore::ephemeralDurationChanged, this, [this, item](int duration) { diff --git a/Linphone/data/languages/de.ts b/Linphone/data/languages/de.ts index 603cf07ba..c2b9253e3 100644 --- a/Linphone/data/languages/de.ts +++ b/Linphone/data/languages/de.ts @@ -27,45 +27,45 @@ AccountCore - + drawer_menu_account_connection_status_connected "Connecté" Verbunden - + drawer_menu_account_connection_status_refreshing Aktualisiere… - + drawer_menu_account_connection_status_progress Verbinde… - + drawer_menu_account_connection_status_failed Fehler - + drawer_menu_account_connection_status_cleared Deaktiviert - + manage_account_status_connected_summary "Vous êtes en ligne et joignable." Sie sind online und erreichbar. - + manage_account_status_failed_summary "Erreur de connexion, vérifiez vos paramètres." Verbindungsfehler, überprüfen Sie Ihre Einstellungen. - + manage_account_status_cleared_summary "Compte désactivé, vous ne recevrez ni appel ni message." Konto deaktiviert, Sie erhalten keine Anrufe oder Nachrichten. @@ -125,6 +125,39 @@ Konto konnte nicht hinzugefügt werden. + + AccountModel + + + set_mwi_server_address_failed_error_message + "Unable to set voicemail server address, failed creating address from %1" : %1 is address + + + + + set_server_address_failed_error_message + "Unable to set server address, failed creating address from %1" + + + + + set_conference_factory_address_failed_error_message + "Unable to set the conversation server address, failed creating address from %1" + + + + + set_audio_conference_factory_address_failed_error_message + "Unable to set the meeting server address, failed creating address from %1" + + + + + set_voicemail_address_failed_error_message + Unable to set voicemail address, failed creating address from %1 + + + AccountSettingsGeneralLayout @@ -296,89 +329,94 @@ Kontoeinstellungen - + information_popup_success_title Erfolg - + contact_editor_saved_changes_toast "Modifications sauvegardés" Änderungen gespeichert - + + information_popup_error_title + + + + account_settings_mwi_uri_title "URI du serveur de messagerie vocale" Voicemail-Server-URI - + account_settings_voicemail_uri_title "URI de messagerie vocale" Voicemail-URI - + account_settings_transport_title "Transport" Transport - + account_settings_sip_proxy_url_title Proxy-Server-URL - + account_settings_outbound_proxy_title "Serveur mandataire sortant" Ausgehender Proxy-Server - + account_settings_stun_server_url_title "Adresse du serveur STUN" STUN-Server-Adresse - + account_settings_enable_ice_title "Activer ICE" ICE aktivieren - + account_settings_avpf_title "AVPF" AVPF - + account_settings_bundle_mode_title "Mode bundle" Bundle-Modus - + account_settings_expire_title "Expiration (en seconde)" Ablaufzeit (in Sekunden) - + account_settings_conference_factory_uri_title "URI du serveur de conversations" Konferenz-Factory-URI - + account_settings_audio_video_conference_factory_uri_title "URI du serveur de réunions" Video-Konferenz-Factory-URI - + account_settings_lime_server_url_title "URL du serveur d’échange de clés de chiffrement" Lime-Server-URL @@ -2064,40 +2102,40 @@ Error ChatMessageInvitationBubble - + ics_bubble_meeting_from - + ics_bubble_meeting_to - + ics_bubble_meeting_modified Meeting has been updated - + ics_bubble_meeting_cancelled Meeting has been canceled - + - + ics_bubble_description_title Description - + ics_bubble_participants %n participant(s) @@ -2106,7 +2144,7 @@ Error - + ics_bubble_join "Rejoindre" @@ -2174,79 +2212,79 @@ Error - + chat_dialog_delete_chat_title Supprimer la conversation ? - + chat_dialog_delete_chat_message "La conversation et tous ses messages seront supprimés." - + chat_list_title "Conversations" - + menu_mark_all_as_read "mark all as read" - + chat_search_in_history "Rechercher une conversation" - + list_filter_no_result_found "Aucun résultat…" - + chat_list_empty_history "Aucune conversation dans votre historique" - + chat_action_start_new_chat "New chat" - + chat_start_group_chat_title "Nouveau groupe" - + chat_action_start_group_chat "Créer" - - + + information_popup_error_title - + group_chat_error_must_have_name "Un nom doit être donné au groupe - + group_call_error_not_connected "Vous n'etes pas connecté" Sie sind nicht verbunden @@ -2637,10 +2675,12 @@ Error Zurzeit keine Kontakte - - + + contact_details_edit - "Éditer" + Edit +---------- +"Éditer" Bearbeiten @@ -2748,54 +2788,54 @@ Error Weitere Aktionen - + contact_details_remove_from_favourites "Retirer des favoris" Aus Favoriten entfernen - + contact_details_add_to_favourites "Ajouter aux favoris" Zu Favoriten hinzufügen - + contact_details_share "Partager" Teilen - + information_popup_error_title Fehler - + contact_details_share_error_mesage "La création du fichier vcard a échoué" VCard-Erstellung fehlgeschlagen - + contact_details_share_success_title "VCard créée" VCard erstellt - + contact_details_share_success_mesage "VCard du contact enregistrée dans %1" VCard wurde in %1 gespeichert - + contact_details_share_email_title "Partage de contact" Kontakt teilen - + contact_details_delete "Supprimer ce contact" Kontakt löschen @@ -2873,19 +2913,19 @@ Error ConversationInfos - + one_one_infos_call "Appel" Anrufen - + one_one_infos_unmute "Sourdine" Unmute - + one_one_infos_mute Stummschalten @@ -2895,121 +2935,121 @@ Error Suchen - + group_infos_participants Participants (%1) - + group_infos_media_docs Medias & documents Medien & Dokumente - + group_infos_shared_medias Shared medias - + group_infos_shared_docs Shared documents Geteilte Dokumente - + group_infos_other_actions Other actions Weitere Aktionen - + group_infos_ephemerals Ephemeral messages : - + group_infos_enable_ephemerals Flüchtige Nachrichten aktivieren - + group_infos_meeting Schedule a meeting Meeting - + group_infos_leave_room Leave chat room - + group_infos_leave_room_toast_title Leave Chat Room ? Chatraum verlassen? - + group_infos_leave_room_toast_message All the messages will be removed from the chat room. Do you want to continue ? Alle Nachrichten werden aus dem Chat entfernt. Möchten Sie fortfahren? - + group_infos_delete_history Delete history Verlauf löschen - + group_infos_delete_history_toast_title Delete history ? Verlauf löschen? - + group_infos_delete_history_toast_message All the messages will be removed from the chat room. Do you want to continue ? Alle Nachrichten werden aus dem Chat entfernt. Möchten Sie fortfahren? - + one_one_infos_open_contact Show contact Kontakt öffnen - + one_one_infos_create_contact Create contact Kontakt erstellen - + one_one_infos_ephemerals Ephemeral messages : - + one_one_infos_enable_ephemerals Flüchtige Nachrichten aktivieren - + one_one_infos_delete_history Verlauf löschen - + one_one_infos_delete_history_toast_title Delete history ? Verlauf löschen? - + one_one_infos_delete_history_toast_message All the messages will be removed from the chat room. Do you want to continue ? Alle Nachrichten werden aus dem Chat entfernt. Möchten Sie fortfahren? @@ -3121,13 +3161,13 @@ Error DecoratedTextField - + textfield_error_message_cannot_be_empty "ne peut être vide" darf nicht leer sein - + textfield_error_message_unknown_format "Format non reconnu" Unbekanntes Format @@ -3308,9 +3348,9 @@ Error - - - + + + sip_address "Adresse SIP" SIP-Adresse @@ -3318,18 +3358,18 @@ Error - + device_id "Téléphone" Telefon - + information_popup_error_title Fehler - + information_popup_invalid_address_message "Adresse invalide" Ungültige Adresse @@ -3759,102 +3799,102 @@ Error MainLayout - + bottom_navigation_calls_label "Appels" Anrufe - + bottom_navigation_contacts_label "Contacts" Kontakte - + bottom_navigation_conversations_label "Conversations" Konversationen - + bottom_navigation_meetings_label "Réunions" Besprechungen - + searchbar_placeholder_text "Rechercher un contact, appeler %1" Kontakt suchen, %1 anrufen - + searchbar_placeholder_text_chat_feature_enabled "ou envoyer un message …" oder eine Nachricht senden … - - + + contact_presence_status_disable_do_not_disturb "Désactiver ne pas déranger" Nicht stören deaktivieren - + information_popup_error_title Fehler - + no_voicemail_uri_error_message "L'URI de messagerie vocale n'est pas définie." Die Voicemail-URI ist nicht definiert. - + drawer_menu_manage_account Mon compte Mein Konto - + contact_presence_status_enable_do_not_disturb "Activer ne pas déranger" Nicht stören aktivieren - + settings_title Einstellungen - + recordings_title "Enregistrements" Aufnahmen - + help_title "Aide" Hilfe - + help_quit_title "Quitter l'application" App beenden - + quit_app_question "Quitter %1 ?" %1 beenden? - + drawer_menu_add_account "Ajouter un compte" Konto hinzufügen @@ -5031,36 +5071,36 @@ Pour les activer dans un projet commercial, merci de nous contacter. SelectedChatView - + chat_view_group_call_toast_message Start a group call ? - + reply_to_label Reply to %1 - + shared_medias_title Shared medias - + shared_documents_title Shared documents - + forward_to_title Forward to… - + conversations_title Conversations @@ -5165,43 +5205,43 @@ Pour les activer dans un projet commercial, merci de nous contacter. ToolModel - + call_error_uninterpretable_sip_address "The calling address is not an interpretable SIP address : %1 Die Anrufadresse ist keine interpretierbare SIP-Adresse: %1 - + group_call_error_no_account - + group_call_error_participants_invite - + group_call_error_creation - + conference_invitation - + conference_invitation_updated - + conference_invitation_cancelled - + unknown_audio_device_name Unbekannter Gerätename diff --git a/Linphone/data/languages/en.ts b/Linphone/data/languages/en.ts index 22b9afa1f..b473c31b9 100644 --- a/Linphone/data/languages/en.ts +++ b/Linphone/data/languages/en.ts @@ -27,45 +27,45 @@ AccountCore - + drawer_menu_account_connection_status_connected "Connecté" Connected - + drawer_menu_account_connection_status_refreshing Refreshing… - + drawer_menu_account_connection_status_progress Connecting… - + drawer_menu_account_connection_status_failed Error - + drawer_menu_account_connection_status_cleared Disabled - + manage_account_status_connected_summary "Vous êtes en ligne et joignable." You are online and reachable. - + manage_account_status_failed_summary "Erreur de connexion, vérifiez vos paramètres." Connection error, check your settings. - + manage_account_status_cleared_summary "Compte désactivé, vous ne recevrez ni appel ni message." Account disabled, you will not receive calls or messages. @@ -125,6 +125,39 @@ Unable to add account. + + AccountModel + + + set_mwi_server_address_failed_error_message + "Unable to set voicemail server address, failed creating address from %1" : %1 is address + Unable to set voicemail server address, failed creating address from %1 + + + + set_server_address_failed_error_message + "Unable to set server address, failed creating address from %1" + Unable to set server address, failed creating address from %1 + + + + set_conference_factory_address_failed_error_message + "Unable to set the conversation server address, failed creating address from %1" + Unable to set the conversation server address, failed creating address from %1 + + + + set_audio_conference_factory_address_failed_error_message + "Unable to set the meeting server address, failed creating address from %1" + Unable to set the meeting server address, failed creating address from %1 + + + + set_voicemail_address_failed_error_message + Unable to set voicemail address, failed creating address from %1 + Unable to set voicemail address, failed creating address from %1 + + AccountSettingsGeneralLayout @@ -296,89 +329,94 @@ Account settings - + information_popup_success_title Success - + contact_editor_saved_changes_toast "Modifications sauvegardés" Changes saved - + + information_popup_error_title + Error + + + account_settings_mwi_uri_title "URI du serveur de messagerie vocale" Voicemail server URI - + account_settings_voicemail_uri_title "URI de messagerie vocale" Voicemail URI - + account_settings_transport_title "Transport" Transport - + account_settings_sip_proxy_url_title Proxy server URL - + account_settings_outbound_proxy_title "Serveur mandataire sortant" Outgoing proxy server - + account_settings_stun_server_url_title "Adresse du serveur STUN" STUN server address - + account_settings_enable_ice_title "Activer ICE" Enable ICE - + account_settings_avpf_title "AVPF" AVPF - + account_settings_bundle_mode_title "Mode bundle" Bundle mode - + account_settings_expire_title "Expiration (en seconde)" Expiration (in seconds) - + account_settings_conference_factory_uri_title "URI du serveur de conversations" Conference factory URI - + account_settings_audio_video_conference_factory_uri_title "URI du serveur de réunions" Video conference factory uri - + account_settings_lime_server_url_title "URL du serveur d’échange de clés de chiffrement" Lime server URL @@ -2026,46 +2064,46 @@ Error ChatMessageInvitationBubble - + ics_bubble_meeting_from from - + ics_bubble_meeting_to to - + ics_bubble_meeting_modified Meeting has been updated Meeting has been updated - + ics_bubble_meeting_cancelled Meeting has been canceled Meeting has been cancelled - + from %1 to %2 (UTC%3) - + ics_bubble_description_title Description Description - + ics_bubble_join "Rejoindre" Join - + ics_bubble_participants %n participant(s) @@ -2137,79 +2175,79 @@ Only your correspondent can decrypt them. No conversation - + chat_dialog_delete_chat_title Supprimer la conversation ? Delete conversation ? - + chat_dialog_delete_chat_message "La conversation et tous ses messages seront supprimés." This conversation and all its messages will be deleted. - + chat_list_title "Conversations" Conversations - + menu_mark_all_as_read "mark all as read" Mark all as read - + chat_search_in_history "Rechercher une conversation" Search for a chat - + list_filter_no_result_found "Aucun résultat…" No result… - + chat_list_empty_history "Aucune conversation dans votre historique" No conversation in history - + chat_action_start_new_chat "New chat" New conversation - + chat_start_group_chat_title "Nouveau groupe" New group - + chat_action_start_group_chat "Créer" Create - - + + information_popup_error_title Error - + group_chat_error_must_have_name "Un nom doit être donné au groupe A name must be set for the group - + group_call_error_not_connected "Vous n'etes pas connecté" You are not connected @@ -2575,10 +2613,12 @@ Only your correspondent can decrypt them. No contact at the moment - - + + contact_details_edit - "Éditer" + Edit +---------- +"Éditer" Edit @@ -2666,54 +2706,54 @@ Only your correspondent can decrypt them. Other actions - + contact_details_remove_from_favourites "Retirer des favoris" Remove from favorites - + contact_details_add_to_favourites "Ajouter aux favoris" Add to favorites - + contact_details_share "Partager" Share - + information_popup_error_title Error - + contact_details_share_error_mesage "La création du fichier vcard a échoué" VCard creation failed - + contact_details_share_success_title "VCard créée" VCard created - + contact_details_share_success_mesage "VCard du contact enregistrée dans %1" VCard has been saved in %1 - + contact_details_share_email_title "Partage de contact" Share contact - + contact_details_delete "Supprimer ce contact" Delete contact @@ -2791,138 +2831,138 @@ Only your correspondent can decrypt them. ConversationInfos - + one_one_infos_call "Appel" Call - + one_one_infos_unmute "Sourdine" Unmute - + one_one_infos_mute Mute - + group_infos_participants Participants (%1) - + group_infos_media_docs Medias & documents Medias & documents - + group_infos_shared_medias Shared medias Shared medias - + group_infos_shared_docs Shared documents Shared documents - + group_infos_other_actions Other actions Other actions - + group_infos_ephemerals Ephemeral messages : - + group_infos_enable_ephemerals Enable ephemeral messages - + group_infos_meeting Schedule a meeting Schedule a meeting - + group_infos_leave_room Leave chat room Leave Chat Room - + group_infos_leave_room_toast_title Leave Chat Room ? Leave Chat Room ? - + group_infos_leave_room_toast_message All the messages will be removed from the chat room. Do you want to continue ? All the messages will be removed from the chat room. Do you want to continue ? - + group_infos_delete_history Delete history Delete history - + group_infos_delete_history_toast_title Delete history ? Delete history ? - + group_infos_delete_history_toast_message All the messages will be removed from the chat room. Do you want to continue ? All the messages will be removed from the chat room. Do you want to continue ? - + one_one_infos_open_contact Show contact Show contact - + one_one_infos_create_contact Create contact Create contact - + one_one_infos_ephemerals Ephemeral messages : - + one_one_infos_enable_ephemerals Enable ephemeral messages - + one_one_infos_delete_history Delete history - + one_one_infos_delete_history_toast_title Delete history ? Delete history ? - + one_one_infos_delete_history_toast_message All the messages will be removed from the chat room. Do you want to continue ? All the messages will be removed from the chat room. Do you want to continue ? @@ -3034,13 +3074,13 @@ Only your correspondent can decrypt them. DecoratedTextField - + textfield_error_message_cannot_be_empty "ne peut être vide" can not be empty - + textfield_error_message_unknown_format "Format non reconnu" Unknown format @@ -3223,9 +3263,9 @@ Expiration : %1 - - - + + + sip_address "Adresse SIP" SIP address @@ -3233,18 +3273,18 @@ Expiration : %1 - + device_id "Téléphone" Phone - + information_popup_error_title Error - + information_popup_invalid_address_message "Adresse invalide" Invalid address @@ -3669,102 +3709,102 @@ Expiration : %1 MainLayout - + bottom_navigation_calls_label "Appels" Calls - + bottom_navigation_contacts_label "Contacts" Contacts - + bottom_navigation_conversations_label "Conversations" Conversations - + bottom_navigation_meetings_label "Réunions" Meetings - + searchbar_placeholder_text "Rechercher un contact, appeler %1" Find contact, call %1 - + searchbar_placeholder_text_chat_feature_enabled "ou envoyer un message …" or send message … - - + + contact_presence_status_disable_do_not_disturb "Désactiver ne pas déranger" Disable do not disturb - + information_popup_error_title Error - + no_voicemail_uri_error_message "L'URI de messagerie vocale n'est pas définie." The voicemail URI is not defined. - + drawer_menu_manage_account Mon compte My account - + contact_presence_status_enable_do_not_disturb "Activer ne pas déranger" Enable do not disturb - + settings_title Settings - + recordings_title "Enregistrements" Records - + help_title "Aide" Help - + help_quit_title "Quitter l'application" Quit the app - + quit_app_question "Quitter %1 ?" Quit %1 ? - + drawer_menu_add_account "Ajouter un compte" Add an account @@ -4920,36 +4960,36 @@ To enable them in a commercial project, please contact us. SelectedChatView - + chat_view_group_call_toast_message Start a group call ? - + reply_to_label Reply to %1 Reply to %1 - + shared_medias_title Shared medias Shared medias - + shared_documents_title Shared documents Shared documents - + forward_to_title Forward to… Froward to… - + conversations_title Conversations Conversations @@ -5054,43 +5094,43 @@ To enable them in a commercial project, please contact us. ToolModel - + call_error_uninterpretable_sip_address "The calling address is not an interpretable SIP address : %1 The calling address is not an interpretable SIP address : %1 - + group_call_error_no_account No default account found, can't create group call - + group_call_error_participants_invite Couldn't invite participants to group call - + group_call_error_creation Group call couldn't be created - + unknown_audio_device_name Unknown device name - + conference_invitation Meeting invitation - + conference_invitation_cancelled Meeting cancellation - + conference_invitation_updated Meeting modification diff --git a/Linphone/data/languages/fr_FR.ts b/Linphone/data/languages/fr_FR.ts index 11f768fdf..37408f37a 100644 --- a/Linphone/data/languages/fr_FR.ts +++ b/Linphone/data/languages/fr_FR.ts @@ -27,45 +27,45 @@ AccountCore - + drawer_menu_account_connection_status_connected "Connecté" Connecté - + drawer_menu_account_connection_status_refreshing En cours de rafraîchissement… - + drawer_menu_account_connection_status_progress Connexion… - + drawer_menu_account_connection_status_failed Erreur - + drawer_menu_account_connection_status_cleared Désactivé - + manage_account_status_connected_summary "Vous êtes en ligne et joignable." Vous êtes en ligne et joignable. - + manage_account_status_failed_summary "Erreur de connexion, vérifiez vos paramètres." Erreur de connexion, vérifiez vos paramètres. - + manage_account_status_cleared_summary "Compte désactivé, vous ne recevrez ni appel ni message." Compte désactivé, vous ne recevrez ni appel ni message. @@ -125,6 +125,39 @@ Impossible d'ajouter le compte. + + AccountModel + + + set_mwi_server_address_failed_error_message + "Unable to set voicemail server address, failed creating address from %1" : %1 is address + Impossible de définir l'adresse du serveur de messagerie vocale depuis l'adresse %1 + + + + set_server_address_failed_error_message + "Unable to set server address, failed creating address from %1" + Impossible de définir l'adresse du serveur depuis l'adresse %1 + + + + set_conference_factory_address_failed_error_message + "Unable to set the conversation server address, failed creating address from %1" + Impossible de définir l'uri du serveur de conversations depuis l'adresse %1 + + + + set_audio_conference_factory_address_failed_error_message + "Unable to set the meeting server address, failed creating address from %1" + Impossible de définir l'uri du serveur de réunions depuis l'adresse %1 + + + + set_voicemail_address_failed_error_message + Unable to set voicemail address, failed creating address from %1 + Impossible de définir l'adresse de messagerie vocale depuis l'adresse %1 + + AccountSettingsGeneralLayout @@ -296,89 +329,94 @@ Paramètres de compte - + information_popup_success_title Succès - + contact_editor_saved_changes_toast "Modifications sauvegardés" Modifications sauvegardés - + + information_popup_error_title + Erreur + + + account_settings_mwi_uri_title "URI du serveur de messagerie vocale" URI du serveur de messagerie vocale - + account_settings_voicemail_uri_title "URI de messagerie vocale" URI de messagerie vocale - + account_settings_transport_title "Transport" Transport - + account_settings_sip_proxy_url_title URL du serveur mandataire - + account_settings_outbound_proxy_title "Serveur mandataire sortant" Serveur mandataire sortant - + account_settings_stun_server_url_title "Adresse du serveur STUN" Adresse du serveur STUN - + account_settings_enable_ice_title "Activer ICE" Activer ICE - + account_settings_avpf_title "AVPF" AVPF - + account_settings_bundle_mode_title "Mode bundle" Mode bundle - + account_settings_expire_title "Expiration (en seconde)" Expiration (en seconde) - + account_settings_conference_factory_uri_title "URI du serveur de conversations" URI du serveur de conversations - + account_settings_audio_video_conference_factory_uri_title "URI du serveur de réunions" URI du serveur de réunions - + account_settings_lime_server_url_title "URL du serveur d’échange de clés de chiffrement" URL du serveur d’échange de clés de chiffrement @@ -2026,46 +2064,46 @@ Error ChatMessageInvitationBubble - + ics_bubble_meeting_from de - + ics_bubble_meeting_to à - + ics_bubble_meeting_modified Meeting has been updated La réunion a été modifiée - + ics_bubble_meeting_cancelled Meeting has been canceled La réunion a été annulée - + de %1 à %2 (UTC%3) - + ics_bubble_description_title Description Description - + ics_bubble_join "Rejoindre" Rejoindre - + ics_bubble_participants %n participant(s) @@ -2137,79 +2175,79 @@ en bout. Seul votre correspondant peut les déchiffrer. Aucune conversation - + chat_dialog_delete_chat_title Supprimer la conversation ? Supprimer la conversation ? - + chat_dialog_delete_chat_message "La conversation et tous ses messages seront supprimés." La conversation et tous ses messages seront supprimés. - + chat_list_title "Conversations" Conversations - + menu_mark_all_as_read "mark all as read" Tout marquer comme lu - + chat_search_in_history "Rechercher une conversation" Rechercher une conversation - + list_filter_no_result_found "Aucun résultat…" Aucun résultat… - + chat_list_empty_history "Aucune conversation dans votre historique" Aucune conversation dans votre historique - + chat_action_start_new_chat "New chat" Nouvelle conversation - + chat_start_group_chat_title "Nouveau groupe" Nouveau groupe - + chat_action_start_group_chat "Créer" Créer - - + + information_popup_error_title Erreur - + group_chat_error_must_have_name "Un nom doit être donné au groupe Un nom doit être donné au groupe - + group_call_error_not_connected "Vous n'etes pas connecté" Vous n'êtes pas connecté @@ -2575,10 +2613,12 @@ en bout. Seul votre correspondant peut les déchiffrer. Aucun contact pour le moment - - + + contact_details_edit - "Éditer" + Edit +---------- +"Éditer" Éditer @@ -2666,54 +2706,54 @@ en bout. Seul votre correspondant peut les déchiffrer. Autres actions - + contact_details_remove_from_favourites "Retirer des favoris" Retirer des favoris - + contact_details_add_to_favourites "Ajouter aux favoris" Ajouter aux favoris - + contact_details_share "Partager" Partager - + information_popup_error_title Erreur - + contact_details_share_error_mesage "La création du fichier vcard a échoué" La création du fichier vcard a échoué - + contact_details_share_success_title "VCard créée" VCard créée - + contact_details_share_success_mesage "VCard du contact enregistrée dans %1" VCard du contact enregistrée dans %1 - + contact_details_share_email_title "Partage de contact" Partage de contact - + contact_details_delete "Supprimer ce contact" Supprimer ce contact @@ -2791,138 +2831,138 @@ en bout. Seul votre correspondant peut les déchiffrer. ConversationInfos - + one_one_infos_call "Appel" Appel - + one_one_infos_unmute "Sourdine" Réactiver les notifications - + one_one_infos_mute Sourdine - + group_infos_participants Participants (%1) - + group_infos_media_docs Medias & documents Medias & documents - + group_infos_shared_medias Shared medias Médias partagés - + group_infos_shared_docs Shared documents Documents partagés - + group_infos_other_actions Other actions Autres actions - + group_infos_ephemerals Messages éphémères : - + group_infos_enable_ephemerals Activer les messages éphémères - + group_infos_meeting Schedule a meeting Programmer une réunion - + group_infos_leave_room Leave chat room Quitter la conversation - + group_infos_leave_room_toast_title Leave Chat Room ? Quitter la conversation ? - + group_infos_leave_room_toast_message All the messages will be removed from the chat room. Do you want to continue ? Vous ne recevrez ni pourrez envoyer des messages dans cette conversation, quitter ? - + group_infos_delete_history Delete history Supprimer l'historique - + group_infos_delete_history_toast_title Delete history ? Supprimer l'historique ? - + group_infos_delete_history_toast_message All the messages will be removed from the chat room. Do you want to continue ? Tous les messages seront supprimés. Souhaitez-vous continuer ? - + one_one_infos_open_contact Show contact Voir le contact - + one_one_infos_create_contact Create contact Créer un contact - + one_one_infos_ephemerals Messages éphémères : - + one_one_infos_enable_ephemerals Activer les messages éphémères - + one_one_infos_delete_history Supprimer l'historique - + one_one_infos_delete_history_toast_title Delete history ? Supprimer l'historique ? - + one_one_infos_delete_history_toast_message All the messages will be removed from the chat room. Do you want to continue ? Tous les messages seront supprimés. Souhaitez-vous continuer ? @@ -3034,13 +3074,13 @@ en bout. Seul votre correspondant peut les déchiffrer. DecoratedTextField - + textfield_error_message_cannot_be_empty "ne peut être vide" ne peut être vide - + textfield_error_message_unknown_format "Format non reconnu" Format non reconnu @@ -3223,9 +3263,9 @@ Expiration : %1 - - - + + + sip_address "Adresse SIP" Adresse SIP @@ -3233,18 +3273,18 @@ Expiration : %1 - + device_id "Téléphone" Téléphone - + information_popup_error_title Erreur - + information_popup_invalid_address_message "Adresse invalide" Adresse invalide @@ -3669,102 +3709,102 @@ Expiration : %1 MainLayout - + bottom_navigation_calls_label "Appels" Appels - + bottom_navigation_contacts_label "Contacts" Contacts - + bottom_navigation_conversations_label "Conversations" Conversations - + bottom_navigation_meetings_label "Réunions" Réunions - + searchbar_placeholder_text "Rechercher un contact, appeler %1" Rechercher un contact, appeler %1 - + searchbar_placeholder_text_chat_feature_enabled "ou envoyer un message …" ou envoyer un message … - - + + contact_presence_status_disable_do_not_disturb "Désactiver ne pas déranger" Désactiver ne pas déranger - + information_popup_error_title Erreur - + no_voicemail_uri_error_message "L'URI de messagerie vocale n'est pas définie." L'URI de messagerie vocale n'est pas définie. - + drawer_menu_manage_account Mon compte Mon compte - + contact_presence_status_enable_do_not_disturb "Activer ne pas déranger" Activer ne pas déranger - + settings_title Paramètres - + recordings_title "Enregistrements" Enregistrements - + help_title "Aide" Aide - + help_quit_title "Quitter l'application" Quitter l'application - + quit_app_question "Quitter %1 ?" Quitter %1 ? - + drawer_menu_add_account "Ajouter un compte" Ajouter un compte @@ -4920,36 +4960,36 @@ Pour les activer dans un projet commercial, merci de nous contacter. SelectedChatView - + chat_view_group_call_toast_message Démarrer un appel de groupe ? - + reply_to_label Reply to %1 Réponse à %1 - + shared_medias_title Shared medias Médias partagés - + shared_documents_title Shared documents Documents partagés - + forward_to_title Forward to… Transférer à… - + conversations_title Conversations Conversations @@ -5054,43 +5094,43 @@ Pour les activer dans un projet commercial, merci de nous contacter. ToolModel - + call_error_uninterpretable_sip_address "The calling address is not an interpretable SIP address : %1 L'adresse n'est pas interprétable comme une adresse SIP - + group_call_error_no_account Impossible de créer l'appel de groupe, le compte par défaut n'est pas défini - + group_call_error_participants_invite Impossible d'inviter les participants à l'appel de groupe - + group_call_error_creation L'appel de groupe n'a pas pu être créé - + unknown_audio_device_name Appareil inconnu - + conference_invitation Invitation à une réunion - + conference_invitation_cancelled Annulation d'une réunion - + conference_invitation_updated Modification d'une réunion diff --git a/Linphone/model/account/AccountModel.cpp b/Linphone/model/account/AccountModel.cpp index f98056589..9b3938c65 100644 --- a/Linphone/model/account/AccountModel.cpp +++ b/Linphone/model/account/AccountModel.cpp @@ -243,7 +243,11 @@ void AccountModel::setMwiServerAddress(QString value) { newParams->setMwiServerAddress(address); if (!mMonitor->setParams(newParams)) emit mwiServerAddressChanged(value); } - } else qWarning() << "Unable to set MWI address, failed creating address from" << value; + } else { + //: "Unable to set voicemail server address, failed creating address from %1" : %1 is address + emit setValueFailed(tr("set_mwi_server_address_failed_error_message").arg(value)); + qWarning() << "Unable to set MWI address, failed creating address from" << value; + } } linphone::TransportType AccountModel::getTransport() const { @@ -279,7 +283,11 @@ void AccountModel::setServerAddress(QString value, linphone::TransportType trans if (save) mMonitor->setParams(params); emit serverAddressChanged(value); emit transportChanged(address->getTransport()); - } else qWarning() << "Unable to set ServerAddress, failed creating address from" << value; + } else { + //: "Unable to set server address, failed creating address from %1" + emit setValueFailed(tr("set_server_address_failed_error_message").arg(value)); + qWarning() << "Unable to set ServerAddress, failed creating address from" << value; + } } bool AccountModel::getOutboundProxyEnabled() const { @@ -380,7 +388,11 @@ void AccountModel::setConferenceFactoryAddress(QString value) { params->setConferenceFactoryAddress(address); mMonitor->setParams(params); emit conferenceFactoryAddressChanged(value); - } else qWarning() << "Unable to set ConferenceFactoryAddress address, failed creating address from" << value; + } else { + //: "Unable to set the conversation server address, failed creating address from %1" + emit setValueFailed(tr("set_conference_factory_address_failed_error_message").arg(value)); + qWarning() << "Unable to set ConferenceFactoryAddress address, failed creating address from" << value; + } } QString AccountModel::getAudioVideoConferenceFactoryAddress() const { @@ -398,8 +410,11 @@ void AccountModel::setAudioVideoConferenceFactoryAddress(QString value) { params->setAudioVideoConferenceFactoryAddress(address); mMonitor->setParams(params); emit audioVideoConferenceFactoryAddressChanged(value); - } else + } else { + //: "Unable to set the meeting server address, failed creating address from %1" + emit setValueFailed(tr("set_audio_conference_factory_address_failed_error_message").arg(value)); qWarning() << "Unable to set AudioVideoConferenceFactoryAddress address, failed creating address from" << value; + } } QString AccountModel::getLimeServerUrl() const { @@ -442,7 +457,11 @@ void AccountModel::setVoicemailAddress(QString value) { params->setVoicemailAddress(address); mMonitor->setParams(params); emit voicemailAddressChanged(value); - } else qWarning() << "Unable to set VoicemailAddress, failed creating address from" << value; + } else { + //: Unable to set voicemail address, failed creating address from %1 + emit setValueFailed(tr("set_voicemail_address_failed_error_message").arg(value)); + qWarning() << "Unable to set VoicemailAddress, failed creating address from" << value; + } } QString AccountModel::getVoicemailAddress() const { diff --git a/Linphone/model/account/AccountModel.hpp b/Linphone/model/account/AccountModel.hpp index f21d8602b..eb0c73558 100644 --- a/Linphone/model/account/AccountModel.hpp +++ b/Linphone/model/account/AccountModel.hpp @@ -119,6 +119,8 @@ signals: void voicemailAddressChanged(QString value); void presenceChanged(LinphoneEnums::Presence presence, bool userInitiated); + void setValueFailed(const QString &errorMessage); + private: /**Linphone **/ virtual void onRegistrationStateChanged(const std::shared_ptr &account, diff --git a/Linphone/model/setting/SettingsModel.cpp b/Linphone/model/setting/SettingsModel.cpp index 5b4cd5c4a..377571ee2 100644 --- a/Linphone/model/setting/SettingsModel.cpp +++ b/Linphone/model/setting/SettingsModel.cpp @@ -832,6 +832,15 @@ bool SettingsModel::getLimeIsSupported() const { return CoreModel::getInstance()->getCore()->limeX3DhAvailable(); } +void SettingsModel::setDisableMeetingsFeature(bool value) { + mConfig->setBool(UiSection, "disable_meetings_feature", value); + emit disableMeetingsFeatureChanged(value); +} + +bool SettingsModel::getDisableMeetingsFeature() const { + return !!mConfig->getInt(UiSection, "disable_meetings_feature", 0); +} + void SettingsModel::setChatNotificationSoundPath(const QString &path) { QString cleanedPath = QDir::cleanPath(path); mConfig->setString(UiSection, "chat_sound_notification_file", Utils::appStringToCoreString(cleanedPath)); @@ -891,8 +900,6 @@ void SettingsModel::notifyConfigReady(){ } DEFINE_GETSET_CONFIG(SettingsModel, bool, Bool, disableChatFeature, DisableChatFeature, "disable_chat_feature", false) -DEFINE_GETSET_CONFIG( - SettingsModel, bool, Bool, disableMeetingsFeature, DisableMeetingsFeature, "disable_meetings_feature", false) DEFINE_GETSET_CONFIG(SettingsModel, bool, Bool, diff --git a/Linphone/model/setting/SettingsModel.hpp b/Linphone/model/setting/SettingsModel.hpp index 34879a383..64ab6cc9c 100644 --- a/Linphone/model/setting/SettingsModel.hpp +++ b/Linphone/model/setting/SettingsModel.hpp @@ -179,9 +179,11 @@ public: bool getLimeIsSupported() const; + void setDisableMeetingsFeature(bool value); + bool getDisableMeetingsFeature() const; + // UI DECLARE_GETSET(bool, disableChatFeature, DisableChatFeature) - DECLARE_GETSET(bool, disableMeetingsFeature, DisableMeetingsFeature) DECLARE_GETSET(bool, disableBroadcastFeature, DisableBroadcastFeature) DECLARE_GETSET(bool, hideSettings, HideSettings) DECLARE_GETSET(bool, hideAccountSettings, HideAccountSettings) @@ -257,6 +259,8 @@ signals: void dndChanged(bool value); + void disableMeetingsFeatureChanged(bool value); + // Messages. -------------------------------------------------------------------- void autoDownloadReceivedFilesChanged(bool enabled); diff --git a/Linphone/view/Control/Display/Contact/ContactListView.qml b/Linphone/view/Control/Display/Contact/ContactListView.qml index bd09c1ca5..ad7f0b155 100644 --- a/Linphone/view/Control/Display/Contact/ContactListView.qml +++ b/Linphone/view/Control/Display/Contact/ContactListView.qml @@ -188,6 +188,7 @@ ListView { searchResultItem: $modelData showInitials: mainItem.showInitials && isStored showDefaultAddress: mainItem.showDefaultAddress + showDisplayName: mainItem.showDisplayName showActions: mainItem.showActions showContactMenu: mainItem.showContactMenu && searchResultItem.core.isStored highlightText: mainItem.highlightText diff --git a/Linphone/view/Control/Input/DecoratedTextField.qml b/Linphone/view/Control/Input/DecoratedTextField.qml index 73b9759bd..cbdcefc5f 100644 --- a/Linphone/view/Control/Input/DecoratedTextField.qml +++ b/Linphone/view/Control/Input/DecoratedTextField.qml @@ -18,11 +18,12 @@ FormItemLayout { property bool useTitleAsPlaceHolder: true property bool canBeEmpty: true property bool toValidate: false + property alias text: textField.text function value() { return propertyOwnerGui ? propertyOwnerGui.core[propertyName] : propertyOwner[propertyName] } - + property alias hidden: textField.hidden property alias validator: textField.validator diff --git a/Linphone/view/Control/Input/TextField.qml b/Linphone/view/Control/Input/TextField.qml index 5dbd0ecdf..89d3288ae 100644 --- a/Linphone/view/Control/Input/TextField.qml +++ b/Linphone/view/Control/Input/TextField.qml @@ -74,7 +74,7 @@ Control.TextField { idleTimer.stop() updateText() } - onTextEdited: { + onTextChanged: { if (mainItem.toValidate) { idleTimer.restart() } @@ -90,8 +90,9 @@ Control.TextField { } if (mainItem.propertyName && isValid(text)) { if (mainItem.propertyOwnerGui) { - if (mainItem.propertyOwnerGui.core[mainItem.propertyName] != text) + if (mainItem.propertyOwnerGui.core[mainItem.propertyName] != text) { mainItem.propertyOwnerGui.core[mainItem.propertyName] = text + } } else { if (mainItem.propertyOwner[mainItem.propertyName] != text) mainItem.propertyOwner[mainItem.propertyName] = text diff --git a/Linphone/view/Page/Layout/Chat/ConversationInfos.qml b/Linphone/view/Page/Layout/Chat/ConversationInfos.qml index caccf5947..be15ff6a5 100644 --- a/Linphone/view/Page/Layout/Chat/ConversationInfos.qml +++ b/Linphone/view/Page/Layout/Chat/ConversationInfos.qml @@ -14,6 +14,8 @@ ColumnLayout { property ChatGui chatGui property var chatCore: chatGui.core property var contactObj: chatGui ? UtilsCpp.findFriendByAddress(mainItem.chatCore.peerAddress) : null + property FriendGui contact: contactObj ? contactObj.value : null + property bool isAppFriend: contact && contact.core.isAppFriend property var parentView property bool isGroup: chatCore && chatCore.isGroupChat spacing: 0 @@ -23,7 +25,7 @@ ColumnLayout { Avatar { Layout.alignment: Qt.AlignHCenter - contact: contactObj?.value || null + contact: mainItem.contact displayNameVal: mainItem.chatCore.avatarUri secured: mainItem.chatGui && mainItem.chatGui.core.isSecured Layout.preferredWidth: Math.round(100 * DefaultStyle.dp) @@ -157,10 +159,10 @@ ColumnLayout { } Text { - visible: contactObj && contactObj.value || false + visible: mainItem.contact font: Typography.p3 - color: contactObj?.value != null ? contactObj?.value.core.presenceColor : "transparent" - text: contactObj?.value != null ? contactObj?.value.core.presenceStatus : "" + color: mainItem.contact ? mainItem.contact.core.presenceColor : "transparent" + text: mainItem.contact ? mainItem.contact.core.presenceStatus : "" Layout.alignment: Qt.AlignHCenter Layout.topMargin: Math.round(5 * DefaultStyle.dp) } @@ -213,13 +215,13 @@ ColumnLayout { button.icon.height: Math.round(24 * DefaultStyle.dp) button.icon.source: mainItem.isGroup ? AppIcons.videoconference - : contactObj.value + : mainItem.isAppFriend ? AppIcons.adressBook : AppIcons.plusCircle label: mainItem.isGroup //: Schedule a meeting ? qsTr("group_infos_meeting") - : contactObj.value + : mainItem.isAppFriend //: Show contact ? qsTr("one_one_infos_open_contact") //: Create contact @@ -228,8 +230,8 @@ ColumnLayout { if (mainItem.isGroup) UtilsCpp.getMainWindow().scheduleMeeting(mainItem.chatCore.title, mainItem.chatCore.participantsAddresses) else { - if (contactObj.value) - mainWindow.displayContactPage(contactObj.value.core.defaultAddress) + if (mainItem.isAppFriend) + mainWindow.displayContactPage(mainItem.contact.core.defaultAddress) else mainWindow.displayCreateContactPage("",mainItem.chatCore.peerAddress) } diff --git a/Linphone/view/Page/Layout/Main/MainLayout.qml b/Linphone/view/Page/Layout/Main/MainLayout.qml index e22ee2c30..2903965ba 100644 --- a/Linphone/view/Page/Layout/Main/MainLayout.qml +++ b/Linphone/view/Page/Layout/Main/MainLayout.qml @@ -60,6 +60,9 @@ Item { if (mainItem.contextualMenuOpenedComponent && mainItem.contextualMenuOpenedComponent != component) { mainStackView.pop() + if (mainItem.contextualMenuOpenedComponent) { + mainItem.contextualMenuOpenedComponent.destroy() + } mainItem.contextualMenuOpenedComponent = undefined } if (!mainItem.contextualMenuOpenedComponent) { @@ -71,6 +74,8 @@ Item { function closeContextualMenuComponent() { mainStackView.pop() + if (mainItem.contextualMenuOpenedComponent) + mainItem.contextualMenuOpenedComponent.destroy() mainItem.contextualMenuOpenedComponent = undefined } diff --git a/Linphone/view/Page/Layout/Settings/AccountSettingsParametersLayout.qml b/Linphone/view/Page/Layout/Settings/AccountSettingsParametersLayout.qml index bdfa25824..cb920aab0 100644 --- a/Linphone/view/Page/Layout/Settings/AccountSettingsParametersLayout.qml +++ b/Linphone/view/Page/Layout/Settings/AccountSettingsParametersLayout.qml @@ -29,12 +29,21 @@ AbstractSettingsLayout { Connections { target: account.core function onIsSavedChanged() { - if (account.core.isSaved) + if (account.core.isSaved) { UtilsCpp.showInformationPopup( qsTr("information_popup_success_title"), //: "Modifications sauvegardés" qsTr("contact_editor_saved_changes_toast"), true, mainWindow) + } + } + function onSetValueFailed(error) { + if (error) { + UtilsCpp.showInformationPopup( + qsTr("information_popup_error_title"), + error, false, + mainWindow) + } } } @@ -47,6 +56,7 @@ AbstractSettingsLayout { Layout.fillWidth: true spacing: Math.round(20 * DefaultStyle.dp) DecoratedTextField { + id: mwiServerAddressField propertyName: "mwiServerAddress" propertyOwnerGui: account //: "URI du serveur de messagerie vocale" @@ -56,8 +66,17 @@ AbstractSettingsLayout { return text.length == 0 || !text.endsWith(".") } // work around sdk crash when adress ends with . toValidate: true + + Connections { + target: account.core + function onMwiServerAddressAddressChanged() { + if (mwiServerAddressField.text != mwiServerAddressField.propertyOwnerGui.core[mwiServerAddressField.propertyName]) + mwiServerAddressField.text = mwiServerAddressField.propertyOwnerGui.core[mwiServerAddressField.propertyName] + } + } } DecoratedTextField { + id: voicemailAddressField propertyName: "voicemailAddress" propertyOwnerGui: account //: "URI de messagerie vocale" @@ -65,6 +84,14 @@ AbstractSettingsLayout { title: qsTr("account_settings_voicemail_uri_title") Layout.fillWidth: true toValidate: true + + Connections { + target: account.core + function onVoicemailAddressAddressChanged() { + if (voicemailAddressField.text != voicemailAddressField.propertyOwnerGui.core[voicemailAddressField.propertyName]) + voicemailAddressField.text = voicemailAddressField.propertyOwnerGui.core[voicemailAddressField.propertyName] + } + } } } } @@ -142,20 +169,36 @@ AbstractSettingsLayout { toValidate: true } DecoratedTextField { + id: conferenceFactoryUriField Layout.fillWidth: true //: "URI du serveur de conversations" title: qsTr("account_settings_conference_factory_uri_title") propertyName: "conferenceFactoryAddress" propertyOwnerGui: account + Connections { + target: account.core + function onConferenceFactoryAddressChanged() { + if (conferenceFactoryUriField.text != conferenceFactoryUriField.propertyOwnerGui.core[conferenceFactoryUriField.propertyName]) + conferenceFactoryUriField.text = conferenceFactoryUriField.propertyOwnerGui.core[conferenceFactoryUriField.propertyName] + } + } toValidate: true } DecoratedTextField { + id: audioVideoConfUriField Layout.fillWidth: true propertyName: "audioVideoConferenceFactoryAddress" //: "URI du serveur de réunions" title: qsTr("account_settings_audio_video_conference_factory_uri_title") propertyOwnerGui: account toValidate: true + Connections { + target: account.core + function onAudioVideoConferenceFactoryAddressChanged() { + if (audioVideoConfUriField.text != audioVideoConfUriField.propertyOwnerGui.core[audioVideoConfUriField.propertyName]) + audioVideoConfUriField.text = audioVideoConfUriField.propertyOwnerGui.core[audioVideoConfUriField.propertyName] + } + } } DecoratedTextField { Layout.fillWidth: true