diff --git a/Linphone/core/participant/ParticipantDeviceCore.cpp b/Linphone/core/participant/ParticipantDeviceCore.cpp index 81c802bc3..a426eb7d9 100644 --- a/Linphone/core/participant/ParticipantDeviceCore.cpp +++ b/Linphone/core/participant/ParticipantDeviceCore.cpp @@ -46,6 +46,7 @@ ParticipantDeviceCore::ParticipantDeviceCore(const std::shared_ptrgetName()); auto deviceAddress = device->getAddress()->clone(); mUniqueAddress = Utils::coreStringToAppString(deviceAddress->asString()); + deviceAddress->clean(); mAddress = Utils::coreStringToAppString(deviceAddress->asStringUriOnly()); // the display name of the device himself may be the uncleaned sip uri // Use the participant name instead @@ -58,7 +59,7 @@ ParticipantDeviceCore::ParticipantDeviceCore(const std::shared_ptr(device); mParticipantDeviceModel->setSelf(mParticipantDeviceModel); mState = LinphoneEnums::fromLinphone(device->getState()); - lDebug() << "Address = " << Utils::coreStringToAppString(deviceAddress->asStringUriOnly()); + lDebug() << "Address = " << mAddress; mIsLocal = ToolModel::findAccount(deviceAddress) != nullptr; // TODO set local mIsVideoEnabled = mParticipantDeviceModel->isVideoEnabled(); mIsPaused = device->getState() == linphone::ParticipantDevice::State::Left || diff --git a/Linphone/core/participant/ParticipantDeviceProxy.cpp b/Linphone/core/participant/ParticipantDeviceProxy.cpp index a5ffcb81f..05d3627aa 100644 --- a/Linphone/core/participant/ParticipantDeviceProxy.cpp +++ b/Linphone/core/participant/ParticipantDeviceProxy.cpp @@ -64,7 +64,7 @@ void ParticipantDeviceProxy::setCurrentCall(CallGui *call) { if (mCurrentCall) callCore = mCurrentCall->getCore(); if (callCore) { connect(callCore, &CallCore::conferenceChanged, mParticipants.get(), [this]() { - auto conference = mCurrentCall->getCore()->getConferenceCore(); + auto conference = mCurrentCall ? mCurrentCall->getCore()->getConferenceCore() : nullptr; lDebug() << log().arg("Set conference") << this << " => " << conference; mParticipants->setConferenceModel(conference ? conference->getModel() : nullptr); }); diff --git a/Linphone/data/languages/de.ts b/Linphone/data/languages/de.ts index 53ccf4904..50036841b 100644 --- a/Linphone/data/languages/de.ts +++ b/Linphone/data/languages/de.ts @@ -820,25 +820,25 @@ CallListView - + meeting "Réunion Besprechung - + call "Appel" Anruf - + paused_call_or_meeting "%1 en pause" %1 pausiert - + ongoing_call_or_meeting "%1 en cours" %1 laufend @@ -847,43 +847,43 @@ CallModel - + call_error_user_declined_toast "Le correspondant a décliné l'appel" Der Benutzer hat den Anruf abgelehnt - + call_error_user_not_found_toast "Le correspondant n'a pas été trouvé" Benutzer nicht gefunden - + call_error_user_busy_toast "Le correspondant est occupé" Der Benutzer ist beschäftigt - + call_error_incompatible_media_params_toast "Le correspondant ne peut accepter votre appel." Der Benutzer kann Ihren Anruf nicht annehmen - + call_error_io_error_toast "Service indisponible ou erreur réseau" Dienst nicht verfügbar oder Netzwerkfehler - + call_error_temporarily_unavailable_toast "Temporairement indisponible" Vorübergehend nicht verfügbar - + call_error_server_timeout_toast "Délai d'attente du serveur dépassé" Server-Zeitüberschreitung @@ -1305,7 +1305,7 @@ - + call_action_show_dialer "Pavé numérique" Wähltastatur @@ -1329,47 +1329,47 @@ Alle Anrufe zusammenführen - - + + call_action_go_to_settings "Paramètres" Einstellungen - + conference_action_screen_sharing "Partage de votre écran" Bildschirm teilen - + conference_share_link_title Partager le lien de la réunion Besprechungs-Link teilen - + copied Copié Kopiert - + information_popup_meeting_address_copied_to_clipboard Le lien de la réunion a été copié dans le presse-papier Der Besprechungs-Link wurde in die Zwischenablage kopiert - - - + + + conference_participants_list_title "Participants (%1)" Teilnehmer (%1) - - + + group_call_participant_selected 1 ausgewählter Teilnehmer @@ -1377,143 +1377,143 @@ - + meeting_schedule_add_participants_title Teilnehmer hinzufügen - + call_encryption_title Chiffrement Verschlüsselung - + call_stats_title Statistiques Statistiken - + call_action_end_call "Terminer l'appel" Anruf beenden - + call_action_resume_call "Reprendre l'appel" Anruf fortsetzen - + call_action_pause_call "Mettre l'appel en pause" Anruf pausieren - + call_action_transfer_call "Transférer l'appel" Anruf weiterleiten - + call_action_start_new_call_hint "Initier un nouvel appel" Neuen Anruf starten - + call_display_call_list_hint "Afficher la liste d'appels" Anrufliste anzeigen - + call_deactivate_video_hint "Désactiver la vidéo" "Activer la vidéo" Video deaktivieren - + call_activate_video_hint Video aktivieren - + call_activate_microphone "Activer le micro" Mikrofon aktivieren - + call_deactivate_microphone "Désactiver le micro" Mikrofon stummschalten - + call_share_screen_hint Partager l'écran… Bildschirm teilen… - + call_rise_hand_hint "Lever la main" Hand heben - + call_send_reaction_hint "Envoyer une réaction" Reaktion senden - + call_manage_participants_hint "Gérer les participants" Teilnehmer verwalten - + call_more_options_hint "Plus d'options…" Weitere Optionen… - + call_action_change_conference_layout "Modifier la disposition" Layout ändern - + call_action_full_screen "Mode Plein écran" Vollbildmodus - + call_action_stop_recording "Terminer l'enregistrement" Aufnahme beenden - + call_action_record "Enregistrer l'appel" Anruf aufnehmen - + call_activate_speaker_hint "Activer le son" Lautsprecher aktivieren - + call_deactivate_speaker_hint "Désactiver le son" Lautsprecher stummschalten @@ -3955,13 +3955,13 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte. Sticker - + conference_participant_joining_text "rejoint…" tritt bei… - + conference_participant_paused_text "En pause" Pausiert diff --git a/Linphone/data/languages/en.ts b/Linphone/data/languages/en.ts index 4d7fab56c..b6c230598 100644 --- a/Linphone/data/languages/en.ts +++ b/Linphone/data/languages/en.ts @@ -820,25 +820,25 @@ CallListView - + meeting "Réunion Meeting - + call "Appel" Call - + paused_call_or_meeting "%1 en pause" %1 paused - + ongoing_call_or_meeting "%1 en cours" Ongoing %1 @@ -847,43 +847,43 @@ CallModel - + call_error_user_declined_toast "Le correspondant a décliné l'appel" User declined the call - + call_error_user_not_found_toast "Le correspondant n'a pas été trouvé" User was not found - + call_error_user_busy_toast "Le correspondant est occupé" User is busy - + call_error_incompatible_media_params_toast "Le correspondant ne peut accepter votre appel." User can't accept your call - + call_error_io_error_toast "Service indisponible ou erreur réseau" Unavailable service or network error - + call_error_temporarily_unavailable_toast "Temporairement indisponible" temporarily unavailable - + call_error_server_timeout_toast "Délai d'attente du serveur dépassé" Server tiemout @@ -1305,7 +1305,7 @@ - + call_action_show_dialer "Pavé numérique" Dialer @@ -1329,47 +1329,47 @@ Merge all calls - - + + call_action_go_to_settings "Paramètres" Settings - + conference_action_screen_sharing "Partage de votre écran" Share your screen - + conference_share_link_title Partager le lien de la réunion Share meeting link - + copied Copié Copied - + information_popup_meeting_address_copied_to_clipboard Le lien de la réunion a été copié dans le presse-papier Meeting link has been copied to the clipboard - - - + + + conference_participants_list_title "Participants (%1)" Participants (%1) - - + + group_call_participant_selected 1 selected participant @@ -1377,143 +1377,143 @@ - + meeting_schedule_add_participants_title Add participants - + call_encryption_title Chiffrement Encryption - + call_stats_title Statistiques Statistics - + call_action_end_call "Terminer l'appel" End call - + call_action_resume_call "Reprendre l'appel" Resume call - + call_action_pause_call "Mettre l'appel en pause" Pause call - + call_action_transfer_call "Transférer l'appel" Transfer call - + call_action_start_new_call_hint "Initier un nouvel appel" Start new call - + call_display_call_list_hint "Afficher la liste d'appels" View call list - + call_deactivate_video_hint "Désactiver la vidéo" "Activer la vidéo" Turn off video - + call_activate_video_hint Enable video - + call_activate_microphone "Activer le micro" Activate microphone - + call_deactivate_microphone "Désactiver le micro" Mute microphone - + call_share_screen_hint Partager l'écran… Share screen… - + call_rise_hand_hint "Lever la main" Rise hand - + call_send_reaction_hint "Envoyer une réaction" Send reaction - + call_manage_participants_hint "Gérer les participants" Manage participants - + call_more_options_hint "Plus d'options…" More options… - + call_action_change_conference_layout "Modifier la disposition" Change layout - + call_action_full_screen "Mode Plein écran" Full screen mode - + call_action_stop_recording "Terminer l'enregistrement" End recording - + call_action_record "Enregistrer l'appel" Record call - + call_activate_speaker_hint "Activer le son" Activate speaker - + call_deactivate_speaker_hint "Désactiver le son" Mute speaker @@ -3955,13 +3955,13 @@ To enable them in a commercial project, please contact us. Sticker - + conference_participant_joining_text "rejoint…" joining… - + conference_participant_paused_text "En pause" Paused diff --git a/Linphone/data/languages/fr_FR.ts b/Linphone/data/languages/fr_FR.ts index 1a1c60115..d41f1abe3 100644 --- a/Linphone/data/languages/fr_FR.ts +++ b/Linphone/data/languages/fr_FR.ts @@ -820,25 +820,25 @@ CallListView - + meeting "Réunion Réunion - + call "Appel" Appel - + paused_call_or_meeting "%1 en pause" %1 en pause - + ongoing_call_or_meeting "%1 en cours" %1 en cours @@ -847,43 +847,43 @@ CallModel - + call_error_user_declined_toast "Le correspondant a décliné l'appel" Le correspondant a décliné l'appel - + call_error_user_not_found_toast "Le correspondant n'a pas été trouvé" Le correspondant n'a pas été trouvé - + call_error_user_busy_toast "Le correspondant est occupé" Le correspondant est occupé - + call_error_incompatible_media_params_toast "Le correspondant ne peut accepter votre appel." Le correspondant ne peut accepter votre appel - + call_error_io_error_toast "Service indisponible ou erreur réseau" Service indisponible ou erreur réseau - + call_error_temporarily_unavailable_toast "Temporairement indisponible" Temporairement indisponible - + call_error_server_timeout_toast "Délai d'attente du serveur dépassé" Délai d'attente du serveur dépassé @@ -1305,7 +1305,7 @@ - + call_action_show_dialer "Pavé numérique" Pavé numérique @@ -1329,47 +1329,47 @@ Merger tous les appels - - + + call_action_go_to_settings "Paramètres" Paramètres - + conference_action_screen_sharing "Partage de votre écran" Partage de votre écran - + conference_share_link_title Partager le lien de la réunion Partager le lien de la réunion - + copied Copié Copié - + information_popup_meeting_address_copied_to_clipboard Le lien de la réunion a été copié dans le presse-papier Le lien de la réunion a été copié dans le presse-papier - - - + + + conference_participants_list_title "Participants (%1)" Participants (%1) - - + + group_call_participant_selected un participant sélectionné @@ -1377,143 +1377,143 @@ - + meeting_schedule_add_participants_title Ajouter des participants - + call_encryption_title Chiffrement Chiffrement - + call_stats_title Statistiques Statistiques - + call_action_end_call "Terminer l'appel" Terminer l'appel - + call_action_resume_call "Reprendre l'appel" Reprendre l'appel - + call_action_pause_call "Mettre l'appel en pause" Mettre l'appel en pause - + call_action_transfer_call "Transférer l'appel" Transférer l'appel - + call_action_start_new_call_hint "Initier un nouvel appel" Initier un nouvel appel - + call_display_call_list_hint "Afficher la liste d'appels" Afficher la liste d'appels - + call_deactivate_video_hint "Désactiver la vidéo" "Activer la vidéo" Désactiver la vidéo - + call_activate_video_hint Activer la vidéo - + call_activate_microphone "Activer le micro" Activer le micro - + call_deactivate_microphone "Désactiver le micro" Désactiver le micro - + call_share_screen_hint Partager l'écran… Partager l'écran… - + call_rise_hand_hint "Lever la main" Lever la main - + call_send_reaction_hint "Envoyer une réaction" Envoyer une réaction - + call_manage_participants_hint "Gérer les participants" Gérer les participants - + call_more_options_hint "Plus d'options…" Plus d'options… - + call_action_change_conference_layout "Modifier la disposition" Modifier la disposition - + call_action_full_screen "Mode Plein écran" Mode Plein écran - + call_action_stop_recording "Terminer l'enregistrement" Terminer l'enregistrement - + call_action_record "Enregistrer l'appel" Enregistrer l'appel - + call_activate_speaker_hint "Activer le son" Activer le son - + call_deactivate_speaker_hint "Désactiver le son" Désactiver le son @@ -3955,13 +3955,13 @@ Pour les activer dans un projet commercial, merci de nous contacter. Sticker - + conference_participant_joining_text "rejoint…" rejoint… - + conference_participant_paused_text "En pause" En pause diff --git a/Linphone/model/conference/ConferenceModel.cpp b/Linphone/model/conference/ConferenceModel.cpp index 1f0480c1d..31070df14 100644 --- a/Linphone/model/conference/ConferenceModel.cpp +++ b/Linphone/model/conference/ConferenceModel.cpp @@ -176,27 +176,27 @@ bool ConferenceModel::isScreenSharingEnabled() const { void ConferenceModel::onActiveSpeakerParticipantDevice( const std::shared_ptr &conference, const std::shared_ptr &participantDevice) { - lDebug() << "onActiveSpeakerParticipantDevice: " - << (participantDevice ? participantDevice->getAddress()->asString().c_str() : "NULL"); + lInfo() << "onActiveSpeakerParticipantDevice: " + << (participantDevice ? participantDevice->getAddress()->asString().c_str() : "NULL"); emit activeSpeakerParticipantDevice(conference, conference->getActiveSpeakerParticipantDevice()); } void ConferenceModel::onParticipantAdded(const std::shared_ptr &conference, const std::shared_ptr &participant) { - lDebug() << "onParticipant Added" << participant->getAddress()->asStringUriOnly(); + lInfo() << "onParticipant Added" << participant->getAddress()->asStringUriOnly(); emit participantAdded(participant); emit participantDeviceCountChanged(conference, getParticipantDeviceCount()); } void ConferenceModel::onParticipantRemoved(const std::shared_ptr &conference, const std::shared_ptr &participant) { - lDebug() << "onParticipant Removed" << participant->getAddress()->asStringUriOnly(); + lInfo() << "onParticipant Removed" << participant->getAddress()->asStringUriOnly(); emit participantRemoved(participant); emit participantDeviceCountChanged(conference, getParticipantDeviceCount()); } void ConferenceModel::onParticipantDeviceAdded(const std::shared_ptr &conference, const std::shared_ptr &participantDevice) { - lDebug() << "onParticipantDeviceAdded"; + lInfo() << "onParticipantDeviceAdded"; lDebug() << "Me devices : " << conference->getMe()->getDevices().size(); if (conference->getMe()->getDevices().size() > 1) for (auto d : conference->getMe()->getDevices()) @@ -207,8 +207,8 @@ void ConferenceModel::onParticipantDeviceAdded(const std::shared_ptr &conference, const std::shared_ptr &participantDevice) { - lDebug() << "onParticipantDeviceRemoved: " << participantDevice->getAddress()->asString().c_str() << " isInConf?[" - << participantDevice->isInConference() << "]"; + lInfo() << "onParticipantDeviceRemoved: " << participantDevice->getAddress()->asString().c_str() << " isInConf?[" + << participantDevice->isInConference() << "]"; lDebug() << "Me devices : " << conference->getMe()->getDevices().size(); if (participantDevice->screenSharingEnabled()) emit isScreenSharingEnabledChanged(false); emit participantDeviceRemoved(conference, participantDevice); @@ -217,8 +217,8 @@ void ConferenceModel::onParticipantDeviceRemoved( void ConferenceModel::onParticipantDeviceStateChanged(const std::shared_ptr &conference, const std::shared_ptr &device, linphone::ParticipantDevice::State state) { - lDebug() << "onParticipantDeviceStateChanged: " << device->getAddress()->asString().c_str() << " isInConf?[" - << device->isInConference() << "] " << (int)state; + lInfo() << "onParticipantDeviceStateChanged: " << device->getAddress()->asString().c_str() << " isInConf?[" + << device->isInConference() << "] " << (int)state; emit participantDeviceStateChanged(conference, device, state); } void ConferenceModel::onParticipantAdminStatusChanged(const std::shared_ptr &conference, diff --git a/Linphone/view/Control/Display/Sticker.qml b/Linphone/view/Control/Display/Sticker.qml index 402a22e26..f2d7a5466 100644 --- a/Linphone/view/Control/Display/Sticker.qml +++ b/Linphone/view/Control/Display/Sticker.qml @@ -23,6 +23,9 @@ Item { property AccountGui account: null property ParticipantDeviceGui participantDevice: null property bool displayBorder : participantDevice && participantDevice.core.isSpeaking || false + // Use unique address to display stickers list in active speaker mode + // in case two devices of the same user are present + property bool useUniqueAddress: false property alias displayPresence: avatar.displayPresence property color color: DefaultStyle.grey_600 property real radius: Math.round(15 * DefaultStyle.dp) @@ -35,7 +38,9 @@ Item { property string remoteAddress: account ? account.core.identityAddress : participantDevice - ? participantDevice.core.address + ? useUniqueAddress + ? participantDevice.core.uniqueAddress + : participantDevice.core.address : call ? call.core.remoteAddress : ""