From a0850b9967d5381dedcd29b74556b537d616dd39 Mon Sep 17 00:00:00 2001 From: Gaelle Braud Date: Thu, 13 Nov 2025 14:21:30 +0100 Subject: [PATCH] fix #LINQT-2130 enable video in conference for the participant to be able to see shared screen without activating camera do not display notification if message already read display notif when copying account sip address #LINQT-2126 prevent adding our own address in participants (fix #LINQT-2164) --- Linphone/core/call/CallCore.cpp | 9 +- Linphone/core/notifier/Notifier.cpp | 1 + Linphone/core/search/MagicSearchList.cpp | 28 ++++- Linphone/core/search/MagicSearchList.hpp | 7 +- Linphone/core/search/MagicSearchProxy.cpp | 8 ++ Linphone/core/search/MagicSearchProxy.hpp | 5 + Linphone/data/languages/de.ts | 110 +++++++++++------- Linphone/data/languages/en.ts | 110 +++++++++++------- Linphone/data/languages/fr.ts | 110 +++++++++++------- Linphone/model/call/CallModel.cpp | 11 ++ Linphone/model/call/CallModel.hpp | 3 +- .../Display/Contact/AllContactListView.qml | 2 + .../Page/Form/Meeting/AddParticipantsForm.qml | 1 + .../Settings/AccountSettingsGeneralLayout.qml | 14 ++- 14 files changed, 275 insertions(+), 144 deletions(-) diff --git a/Linphone/core/call/CallCore.cpp b/Linphone/core/call/CallCore.cpp index 3058c61ce..8a15f4800 100644 --- a/Linphone/core/call/CallCore.cpp +++ b/Linphone/core/call/CallCore.cpp @@ -107,7 +107,8 @@ CallCore::CallCore(const std::shared_ptr &call) : QObject(nullpt mCallModel->setSelf(mCallModel); mDuration = call->getDuration(); mIsStarted = mDuration > 0; - auto videoDirection = call->getParams()->getVideoDirection(); + auto callParams = call->getParams(); + auto videoDirection = callParams->getVideoDirection(); mLocalVideoEnabled = videoDirection == linphone::MediaDirection::SendOnly || videoDirection == linphone::MediaDirection::SendRecv; auto remoteParams = call->getRemoteParams(); @@ -133,7 +134,7 @@ CallCore::CallCore(const std::shared_ptr &call) : QObject(nullpt mTransferState = LinphoneEnums::fromLinphone(call->getTransferState()); mLocalToken = Utils::coreStringToAppString(mCallModel->getLocalAtuhenticationToken()); mRemoteTokens = mCallModel->getRemoteAtuhenticationTokens(); - mEncryption = LinphoneEnums::fromLinphone(call->getParams()->getMediaEncryption()); + mEncryption = LinphoneEnums::fromLinphone(callParams->getMediaEncryption()); auto tokenVerified = call->getAuthenticationTokenVerified(); mIsMismatch = call->getZrtpCacheMismatchFlag(); mIsSecured = (mEncryption == LinphoneEnums::MediaEncryption::Zrtp && tokenVerified) || @@ -160,7 +161,7 @@ CallCore::CallCore(const std::shared_ptr &call) : QObject(nullpt mPaused = mState == LinphoneEnums::CallState::Pausing || mState == LinphoneEnums::CallState::Paused || mState == LinphoneEnums::CallState::PausedByRemote; - mRecording = call->getParams() && call->getParams()->isRecording(); + mRecording = callParams && callParams->isRecording(); mRemoteRecording = call->getRemoteParams() && call->getRemoteParams()->isRecording(); auto settingsModel = SettingsModel::getInstance(); mMicrophoneVolume = call->getRecordVolume(); @@ -344,6 +345,8 @@ void CallCore::setSelf(QSharedPointer me) { }); mCallModelConnection->makeConnectToModel(&CallModel::conferenceChanged, [this]() { auto conference = mCallModel->getMonitor()->getConference(); + // Force enable video if in conference to handle screen sharing + if (conference && !mCallModel->videoEnabled()) mCallModel->enableVideo(true); QSharedPointer core = conference ? ConferenceCore::create(conference) : nullptr; mCallModelConnection->invokeToCore([this, core]() { setConference(core); }); }); diff --git a/Linphone/core/notifier/Notifier.cpp b/Linphone/core/notifier/Notifier.cpp index 4a12e56be..0175e2a10 100644 --- a/Linphone/core/notifier/Notifier.cpp +++ b/Linphone/core/notifier/Notifier.cpp @@ -369,6 +369,7 @@ void Notifier::notifyReceivedMessages(const std::shared_ptr }; if (messages.size() == 1) { // Display only sender on mono message. + if (message->isRead()) return; getMessage(message); if (txt.isEmpty()) { // Do not notify message without content qDebug() << "empty notif, return"; diff --git a/Linphone/core/search/MagicSearchList.cpp b/Linphone/core/search/MagicSearchList.cpp index bef53989a..984ae9c16 100644 --- a/Linphone/core/search/MagicSearchList.cpp +++ b/Linphone/core/search/MagicSearchList.cpp @@ -94,18 +94,29 @@ void MagicSearchList::setSelf(QSharedPointer me) { [this](const std::list> &results) { auto *contacts = new QList>(); auto ldapContacts = ToolModel::getLdapFriendList(); - + auto core = CoreModel::getInstance()->getCore(); + auto userAddress = core->getDefaultAccount() && core->getDefaultAccount()->getParams() + ? core->getDefaultAccount()->getParams()->getIdentityAddress() + : nullptr; for (auto it : results) { QSharedPointer contact; auto linphoneFriend = it->getFriend(); bool isStored = false; if (linphoneFriend) { + if (!mShowMe && userAddress && userAddress->weakEqual(linphoneFriend->getAddress())) { + lWarning() << log().arg("do not show my own address in this contact list"); + continue; + } isStored = (ldapContacts->findFriendByAddress(linphoneFriend->getAddress()) != linphoneFriend); contact = FriendCore::create(linphoneFriend, isStored, it->getSourceFlags()); contacts->append(contact); } else if (auto address = it->getAddress()) { - auto linphoneFriend = CoreModel::getInstance()->getCore()->createFriend(); + if (!mShowMe && userAddress && userAddress->weakEqual(address)) { + lWarning() << log().arg("do not show my own address in this contact list"); + continue; + } + auto linphoneFriend = core->createFriend(); linphoneFriend->setAddress(address); contact = FriendCore::create(linphoneFriend, isStored, it->getSourceFlags()); auto displayName = Utils::coreStringToAppString(address->getDisplayName()); @@ -125,7 +136,7 @@ void MagicSearchList::setSelf(QSharedPointer me) { contacts->append(contact); } else if (!it->getPhoneNumber().empty()) { auto phoneNumber = it->getPhoneNumber(); - linphoneFriend = CoreModel::getInstance()->getCore()->createFriend(); + linphoneFriend = core->createFriend(); linphoneFriend->addPhoneNumber(phoneNumber); contact = FriendCore::create(linphoneFriend, isStored, it->getSourceFlags()); contact->setGivenName(Utils::coreStringToAppString(it->getPhoneNumber())); @@ -202,6 +213,17 @@ void MagicSearchList::setMaxResults(int maxResults) { } } +bool MagicSearchList::getShowMe() const { + return mShowMe; +} + +void MagicSearchList::setShowMe(bool showMe) { + if (mShowMe != showMe) { + mShowMe = showMe; + emit showMeChanged(mShowMe); + } +} + LinphoneEnums::MagicSearchAggregation MagicSearchList::getAggregationFlag() const { return mAggregationFlag; } diff --git a/Linphone/core/search/MagicSearchList.hpp b/Linphone/core/search/MagicSearchList.hpp index d546ed212..ea61dec1d 100644 --- a/Linphone/core/search/MagicSearchList.hpp +++ b/Linphone/core/search/MagicSearchList.hpp @@ -41,7 +41,7 @@ public: ~MagicSearchList(); void setSelf(QSharedPointer me); - void connectContact(FriendCore* data); + void connectContact(FriendCore *data); void setSearch(const QString &search); void setResults(const QList> &contacts); void add(QSharedPointer contact); @@ -55,6 +55,9 @@ public: int getMaxResults() const; void setMaxResults(int maxResults); + bool getShowMe() const; + void setShowMe(bool showMe); + virtual QHash roleNames() const override; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; @@ -68,6 +71,7 @@ signals: void sourceFlagsChanged(int sourceFlags); void aggregationFlagChanged(LinphoneEnums::MagicSearchAggregation flag); void maxResultsChanged(int maxResults); + void showMeChanged(bool showMe); void friendCreated(int index, FriendGui *data); void friendStarredChanged(); @@ -81,6 +85,7 @@ private: LinphoneEnums::MagicSearchAggregation mAggregationFlag; QString mSearchFilter; int mMaxResults = -1; + bool mShowMe = false; std::shared_ptr mMagicSearch; QSharedPointer> mModelConnection; diff --git a/Linphone/core/search/MagicSearchProxy.cpp b/Linphone/core/search/MagicSearchProxy.cpp index 106f6b4cf..3da478af7 100644 --- a/Linphone/core/search/MagicSearchProxy.cpp +++ b/Linphone/core/search/MagicSearchProxy.cpp @@ -148,6 +148,14 @@ void MagicSearchProxy::setMaxResults(int flags) { mList->setMaxResults(flags); } +bool MagicSearchProxy::getShowMe() const { + return mList->getShowMe(); +} + +void MagicSearchProxy::setShowMe(bool showMe) { + mList->setShowMe(showMe); +} + MagicSearchProxy *MagicSearchProxy::getParentProxy() const { return mParentProxy; } diff --git a/Linphone/core/search/MagicSearchProxy.hpp b/Linphone/core/search/MagicSearchProxy.hpp index e6d48d89c..66a71b6b9 100644 --- a/Linphone/core/search/MagicSearchProxy.hpp +++ b/Linphone/core/search/MagicSearchProxy.hpp @@ -34,6 +34,7 @@ class MagicSearchProxy : public LimitProxy { Q_PROPERTY(int sourceFlags READ getSourceFlags WRITE setSourceFlags NOTIFY sourceFlagsChanged) Q_PROPERTY(int maxResults READ getMaxResults WRITE setMaxResults NOTIFY maxResultsChanged) + Q_PROPERTY(bool showMe READ getShowMe WRITE setShowMe NOTIFY showMeChanged) Q_PROPERTY(LinphoneEnums::MagicSearchAggregation aggregationFlag READ getAggregationFlag WRITE setAggregationFlag NOTIFY aggregationFlagChanged) @@ -60,6 +61,9 @@ public: int getMaxResults() const; void setMaxResults(int maxResults); + bool getShowMe() const; + void setShowMe(bool showMe); + MagicSearchProxy *getParentProxy() const; void setList(QSharedPointer list); Q_INVOKABLE void setParentProxy(MagicSearchProxy *proxy); @@ -77,6 +81,7 @@ signals: void sourceFlagsChanged(int sourceFlags); void aggregationFlagChanged(LinphoneEnums::MagicSearchAggregation aggregationFlag); void maxResultsChanged(int maxResults); + void showMeChanged(bool showMe); void forceUpdate(); void localFriendCreated(int index); void parentProxyChanged(); diff --git a/Linphone/data/languages/de.ts b/Linphone/data/languages/de.ts index 772bdb588..f372462bd 100644 --- a/Linphone/data/languages/de.ts +++ b/Linphone/data/languages/de.ts @@ -230,76 +230,96 @@ Bild löschen - + sip_address + SIP address SIP-Adresse - + + copied + Copied + Kopiert + + + + account_settings_sip_address_copied_message + Your SIP address has been copied in the clipboard + + + + + account_settings_sip_address_copied_error_message + Error copying your SIP address + + + + sip_address_display_name "Nom d'affichage Anzeigename - + sip_address_display_name_explaination "Le nom qui sera affiché à vos correspondants lors de vos échanges." Der Name, der Ihren Kontakten während der Kommunikation angezeigt wird. - + manage_account_international_prefix Indicatif international* Internationale Vorwahl* - + manage_account_delete "Déconnecter mon compte" Konto trennen - + manage_account_delete_message Ihr Konto wird aus diesem Linphone-Client entfernt, bleibt jedoch auf Ihren anderen Geräten verbunden - + manage_account_dialog_remove_account_title "Se déconnecter du compte ?" Vom Konto abmelden? - + manage_account_dialog_remove_account_message Si vous souhaitez supprimer définitivement votre compte rendez-vous sur : https://sip.linphone.org Wenn Sie Ihr Konto dauerhaft löschen möchten, besuchen Sie: https://sip.linphone.org - + + error Erreur Fehler - + manage_account_device_remove "Supprimer" Löschen - + manage_account_device_remove_confirm_dialog %1 löschen? - + manage_account_device_last_connection "Dernière connexion:" Letzte Anmeldung: - + device_last_updated_time_no_info "No information" @@ -613,19 +633,19 @@ AllContactListView - + car_favorites_contacts_title "Favoris" Favoriten - + generic_address_picker_contacts_list_title 'Contacts' Kontakte - + generic_address_picker_suggestions_list_title "Suggestions" Vorschläge @@ -814,76 +834,76 @@ CallCore - + call_record_end_message "Enregistrement terminé" Aufnahme beendet - + call_record_saved_in_file_message "L'appel a été enregistré dans le fichier : %1" Die Aufnahme wurde in der folgenden Datei gespeichert: %1 - - + + call_stats_codec_label "Codec: %1 / %2 kHz" Codec: %1 / %2 kHz - - + + call_stats_bandwidth_label "Bande passante : %1 %2 kbits/s %3 %4 kbits/s" Bandbreite: %1 %2 kbits/s %3 %4 kbits/s - - + + call_stats_loss_rate_label "Taux de perte: %1% %2%" Verlustquote: %1% %2% - + call_stats_jitter_buffer_label "Tampon de gigue: %1 ms" Jitter-Puffer: %1 ms - + call_stats_resolution_label "Définition vidéo : %1 %2 %3 %4" Videoauflösung: %1 %2 %3 %4 - + call_stats_fps_label "FPS : %1 %2 %3 %4" FPS : %1 %2 %3 %4 - + media_encryption_dtls DTLS DTLS - + media_encryption_none None Nichts - + media_encryption_srtp SRTP SRTP - + media_encryption_post_quantum "ZRTP - Post quantique" Post-quantum ZRTP @@ -1122,67 +1142,67 @@ CallModel - + call_error_no_response_toast "No response" - + call_error_forbidden_resource_toast "403 : Forbidden resource" - + call_error_not_answered_toast "Request timeout" - + call_error_user_declined_toast "User declined the call" Der Benutzer hat den Anruf abgelehnt - + call_error_user_not_found_toast "User was not found" Benutzer nicht gefunden - + call_error_user_busy_toast "User is busy" Der Benutzer ist beschäftigt - + call_error_incompatible_media_params_toast "User can&apos;t accept your call" Der Benutzer kann Ihren Anruf nicht annehmen - + call_error_io_error_toast "Unavailable service or network error" Dienst nicht verfügbar oder Netzwerkfehler - + call_error_do_not_disturb_toast "Le correspondant ne peut être dérangé" - + call_error_temporarily_unavailable_toast "Temporarily unavailable" Vorübergehend nicht verfügbar - + call_error_server_timeout_toast "Server tiemout" Server-Zeitüberschreitung @@ -4296,7 +4316,7 @@ Error MagicSearchList - + device_id Telefon @@ -5008,13 +5028,13 @@ Error - + new_chat_room_messages 'New messages received!' Notification that warn the user of new messages. - + new_message_alert_accessible_name New message on chatroom %1 diff --git a/Linphone/data/languages/en.ts b/Linphone/data/languages/en.ts index ffe5edeed..a1d78f477 100644 --- a/Linphone/data/languages/en.ts +++ b/Linphone/data/languages/en.ts @@ -230,76 +230,96 @@ Delete image - + sip_address + SIP address SIP address - + + copied + Copied + Copied + + + + account_settings_sip_address_copied_message + Your SIP address has been copied in the clipboard + Your SIP address has been copied in the clipboard + + + + account_settings_sip_address_copied_error_message + Error copying your SIP address + Error copying your SIP address + + + sip_address_display_name "Nom d'affichage Display name - + sip_address_display_name_explaination "Le nom qui sera affiché à vos correspondants lors de vos échanges." The name displayed to your contacts during exchanges. - + manage_account_international_prefix Indicatif international* International code* - + manage_account_delete "Déconnecter mon compte" Disconnect my account - + manage_account_delete_message Your account will be removed from this Linphone client, but you will remain connected on your other clients - + manage_account_dialog_remove_account_title "Se déconnecter du compte ?" Log out of the account? - + manage_account_dialog_remove_account_message Si vous souhaitez supprimer définitivement votre compte rendez-vous sur : https://sip.linphone.org If you wish to permanently delete your account, go to: https://sip.linphone.org - + + error Erreur Error - + manage_account_device_remove "Supprimer" Delete - + manage_account_device_remove_confirm_dialog Delete %1? - + manage_account_device_last_connection "Dernière connexion:" Last login: - + device_last_updated_time_no_info "No information" No information @@ -608,19 +628,19 @@ AllContactListView - + car_favorites_contacts_title "Favoris" Favorites - + generic_address_picker_contacts_list_title 'Contacts' Contacts - + generic_address_picker_suggestions_list_title "Suggestions" Suggestions @@ -809,76 +829,76 @@ CallCore - + call_record_end_message "Enregistrement terminé" Recording ended - + call_record_saved_in_file_message "L'appel a été enregistré dans le fichier : %1" Recording has been saved in file : %1 - - + + call_stats_codec_label "Codec: %1 / %2 kHz" Codec: %1 / %2 kHz - - + + call_stats_bandwidth_label "Bande passante : %1 %2 kbits/s %3 %4 kbits/s" Bandwidth : %1 %2 kbits/s %3 %4 kbits/s - - + + call_stats_loss_rate_label "Taux de perte: %1% %2%" Loss rate: %1% %2% - + call_stats_jitter_buffer_label "Tampon de gigue: %1 ms" Jitter buffer : %1 ms - + call_stats_resolution_label "Définition vidéo : %1 %2 %3 %4" Video resolution: %1 %2 %3 %4 - + call_stats_fps_label "FPS : %1 %2 %3 %4" FPS : %1 %2 %3 %4 - + media_encryption_dtls DTLS DTLS - + media_encryption_none None None - + media_encryption_srtp SRTP SRTP - + media_encryption_post_quantum "ZRTP - Post quantique" Post quantum ZRTP @@ -1117,67 +1137,67 @@ CallModel - + call_error_no_response_toast "No response" No response - + call_error_forbidden_resource_toast "403 : Forbidden resource" 403 : Forbidden resource - + call_error_not_answered_toast "Request timeout" Request timeout - + call_error_user_declined_toast "User declined the call" User declined the call - + call_error_user_not_found_toast "User was not found" User was not found - + call_error_user_busy_toast "User is busy" User is busy - + call_error_incompatible_media_params_toast "User can&apos;t accept your call" User can't accept your call - + call_error_io_error_toast "Unavailable service or network error" Unavailable service or network error - + call_error_do_not_disturb_toast "Le correspondant ne peut être dérangé" User cannot be disturbed - + call_error_temporarily_unavailable_toast "Temporarily unavailable" Temporarily unavailable - + call_error_server_timeout_toast "Server tiemout" Server tiemout @@ -4212,7 +4232,7 @@ Expiration : %1 MagicSearchList - + device_id Phone @@ -4915,13 +4935,13 @@ Expiration : %1 Conference invitation received ! - + new_chat_room_messages 'New messages received!' Notification that warn the user of new messages. New messages received ! - + new_message_alert_accessible_name New message on chatroom %1 New message on chatroom %1 diff --git a/Linphone/data/languages/fr.ts b/Linphone/data/languages/fr.ts index 7a70cbfdc..42d98aa13 100644 --- a/Linphone/data/languages/fr.ts +++ b/Linphone/data/languages/fr.ts @@ -230,76 +230,96 @@ Supprimer l'image - + sip_address + SIP address Adresse SIP - + + copied + Copied + Copié + + + + account_settings_sip_address_copied_message + Your SIP address has been copied in the clipboard + Votre adresse SIP a été copié dans le presse-papiers + + + + account_settings_sip_address_copied_error_message + Error copying your SIP address + Erreur lors de la copie de votre adresse SIP + + + sip_address_display_name "Nom d'affichage Nom d'affichage - + sip_address_display_name_explaination "Le nom qui sera affiché à vos correspondants lors de vos échanges." Le nom qui sera affiché à vos correspondants lors de vos échanges. - + manage_account_international_prefix Indicatif international* Indicatif international* - + manage_account_delete "Déconnecter mon compte" Déconnecter mon compte - + manage_account_delete_message Votre compte sera retiré de ce client linphone, mais vous restez connecté sur vos autres clients - + manage_account_dialog_remove_account_title "Se déconnecter du compte ?" Se déconnecter du compte ? - + manage_account_dialog_remove_account_message Si vous souhaitez supprimer définitivement votre compte rendez-vous sur : https://sip.linphone.org Si vous souhaitez supprimer définitivement votre compte rendez-vous sur : https://sip.linphone.org - + + error Erreur Erreur - + manage_account_device_remove "Supprimer" Supprimer - + manage_account_device_remove_confirm_dialog Supprimer %1 ? - + manage_account_device_last_connection "Dernière connexion:" Dernière connexion: - + device_last_updated_time_no_info "No information" Pas d'information @@ -608,19 +628,19 @@ AllContactListView - + car_favorites_contacts_title "Favoris" Favoris - + generic_address_picker_contacts_list_title 'Contacts' Contacts - + generic_address_picker_suggestions_list_title "Suggestions" Suggestions @@ -809,76 +829,76 @@ CallCore - + call_record_end_message "Enregistrement terminé" Enregistrement terminé - + call_record_saved_in_file_message "L'appel a été enregistré dans le fichier : %1" L'appel a été enregistré dans le fichier : %1 - - + + call_stats_codec_label "Codec: %1 / %2 kHz" Codec: %1 / %2 kHz - - + + call_stats_bandwidth_label "Bande passante : %1 %2 kbits/s %3 %4 kbits/s" Bande passante : %1 %2 kbits/s %3 %4 kbits/s - - + + call_stats_loss_rate_label "Taux de perte: %1% %2%" Taux de perte: %1% %2% - + call_stats_jitter_buffer_label "Tampon de gigue: %1 ms" Tampon de gigue: %1 ms - + call_stats_resolution_label "Définition vidéo : %1 %2 %3 %4" Définition vidéo : %1 %2 %3 %4 - + call_stats_fps_label "FPS : %1 %2 %3 %4" FPS : %1 %2 %3 %4 - + media_encryption_dtls DTLS DTLS - + media_encryption_none None None - + media_encryption_srtp SRTP SRTP - + media_encryption_post_quantum "ZRTP - Post quantique" ZRTP - Post quantique @@ -1117,67 +1137,67 @@ CallModel - + call_error_no_response_toast "No response" Pas de réponse - + call_error_forbidden_resource_toast "403 : Forbidden resource" 403 : Forbidden resource - + call_error_not_answered_toast "Request timeout" La requête a expiré - + call_error_user_declined_toast "User declined the call" Le correspondant a décliné l'appel - + call_error_user_not_found_toast "User was not found" Le correspondant n'a pas été trouvé - + call_error_user_busy_toast "User is busy" Le correspondant est occupé - + call_error_incompatible_media_params_toast "User can&apos;t accept your call" Le correspondant ne peut accepter votre appel - + call_error_io_error_toast "Unavailable service or network error" Service indisponible ou erreur réseau - + call_error_do_not_disturb_toast "Le correspondant ne peut être dérangé" Le correspondant ne peut être dérangé - + call_error_temporarily_unavailable_toast "Temporarily unavailable" Temporairement indisponible - + call_error_server_timeout_toast "Server tiemout" Délai d'attente du serveur dépassé @@ -4212,7 +4232,7 @@ Expiration : %1 MagicSearchList - + device_id Téléphone @@ -4915,13 +4935,13 @@ Expiration : %1 Nouvelle invitation à une conférence ! - + new_chat_room_messages 'New messages received!' Notification that warn the user of new messages. Nouveaux messages reçus ! - + new_message_alert_accessible_name New message on chatroom %1 Nouveau message sur la conversation %1 diff --git a/Linphone/model/call/CallModel.cpp b/Linphone/model/call/CallModel.cpp index 900d45729..f4045ceac 100644 --- a/Linphone/model/call/CallModel.cpp +++ b/Linphone/model/call/CallModel.cpp @@ -128,6 +128,17 @@ void CallModel::setSpeakerMuted(bool isMuted) { emit speakerMutedChanged(isMuted); } +void CallModel::enableVideo(bool enable) { + mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); + auto params = CoreModel::getInstance()->getCore()->createCallParams(mMonitor); + params->enableVideo(enable); + mMonitor->update(params); +} + +bool CallModel::videoEnabled() const { + return mMonitor->getParams()->videoEnabled(); +} + void CallModel::activateLocalVideo(std::shared_ptr ¶ms, bool enable) { lInfo() << sLog() .arg("Updating call with video enabled and media direction set to %1") diff --git a/Linphone/model/call/CallModel.hpp b/Linphone/model/call/CallModel.hpp index 847f50f41..cdcc0b15d 100644 --- a/Linphone/model/call/CallModel.hpp +++ b/Linphone/model/call/CallModel.hpp @@ -82,7 +82,8 @@ public: LinphoneEnums::VideoSourceScreenSharingType getVideoSourceType() const; int getScreenSharingIndex() const; void setVideoSourceDescriptorModel(std::shared_ptr model = nullptr); - + void enableVideo(bool enable); + bool videoEnabled() const; static void activateLocalVideo(std::shared_ptr ¶ms, bool enable); void sendDtmf(const QString &dtmf); diff --git a/Linphone/view/Control/Display/Contact/AllContactListView.qml b/Linphone/view/Control/Display/Contact/AllContactListView.qml index 7c6b7d43c..2965d20b8 100644 --- a/Linphone/view/Control/Display/Contact/AllContactListView.qml +++ b/Linphone/view/Control/Display/Contact/AllContactListView.qml @@ -18,6 +18,7 @@ Flickable { property bool showContactMenu: true // Display the dot menu for contacts. property bool showFavorites: true // Display the favorites in the header property bool hideSuggestions: false // Hide not stored contacts (not suggestions) + property bool showMe: true // Wether to display current account address or not (disabled for adding participants) property string highlightText: searchText // Bold characters in Display name. property var sourceFlags: LinphoneEnums.MagicSearchSource.All @@ -295,6 +296,7 @@ Flickable { property MagicSearchProxy proxy: MagicSearchProxy { id: favoritesProxy parentProxy: mainItem.mainModel + showMe: mainItem.showMe filterType: MagicSearchProxy.FilteringTypes.Favorites } model: mainItem.showFavorites diff --git a/Linphone/view/Page/Form/Meeting/AddParticipantsForm.qml b/Linphone/view/Page/Form/Meeting/AddParticipantsForm.qml index d808f991b..95815f484 100644 --- a/Linphone/view/Page/Form/Meeting/AddParticipantsForm.qml +++ b/Linphone/view/Page/Form/Meeting/AddParticipantsForm.qml @@ -161,6 +161,7 @@ FocusScope { itemsRightMargin: Utils.getSizeWithScreenRatio(28) multiSelectionEnabled: true showContactMenu: false + showMe: false confInfoGui: mainItem.conferenceInfoGui selectedContacts: mainItem.selectedParticipants onSelectedContactsChanged: Qt.callLater(function () { diff --git a/Linphone/view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml b/Linphone/view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml index 8f70da2df..6c9345f9a 100644 --- a/Linphone/view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml +++ b/Linphone/view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml @@ -103,6 +103,7 @@ AbstractSettingsLayout { spacing: Utils.getSizeWithScreenRatio(5) Text { Layout.alignment: Qt.AlignLeft + //: SIP address text: "%1 :".arg(qsTr("sip_address")) color: DefaultStyle.main2_600 font: Typography.p2l @@ -120,7 +121,18 @@ AbstractSettingsLayout { Layout.alignment: Qt.AlignRight icon.source: AppIcons.copy style: ButtonStyle.noBackground - onClicked: UtilsCpp.copyToClipboard(model.core.identityAddress) + onClicked: { + if (UtilsCpp.copyToClipboard(model.core.identityAddress)) { + //: Copied + UtilsCpp.showInformationPopup(qsTr("copied"), + //: Your SIP address has been copied in the clipboard + qsTr("account_settings_sip_address_copied_message")) + } else { + UtilsCpp.showInformationPopup(qsTr("error"), + //: Error copying your SIP address + qsTr("account_settings_sip_address_copied_error_message")) + } + } } } ColumnLayout {