fix active speaker preview visibility

fix display chat after creation #LINQT-2001
+ error message if creation fails

fix meeting list

reset conf layout to the previous one when stop sharing screen #LINQT-1952
This commit is contained in:
Gaelle Braud 2025-09-26 10:34:24 +02:00
parent 641a081e60
commit faa8f73230
9 changed files with 125 additions and 60 deletions

View file

@ -94,6 +94,7 @@ void ConferenceInfoList::setSelf(QSharedPointer<ConferenceInfoList> me) {
connectItem(item);
mList << item.template objectCast<QObject>();
}
updateHaveCurrentDate();
endResetModel();
delete items;
});

View file

@ -894,42 +894,42 @@
<context>
<name>CallLayout</name>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="58"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="69"/>
<source>meeting_event_conference_destroyed</source>
<extracomment>&quot;Vous avez quitté la conférence&quot;</extracomment>
<translation>Sie haben die Besprechung verlassen</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="61"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="72"/>
<source>call_ended_by_user</source>
<extracomment>&quot;Vous avez terminé l&apos;appel&quot;</extracomment>
<translation>Sie haben den Anruf beendet</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="64"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="75"/>
<source>call_ended_by_remote</source>
<extracomment>&quot;Votre correspondant a terminé l&apos;appel&quot;</extracomment>
<translation>Der Anrufer hat das Gespräch beendet</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="138"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="151"/>
<source>conference_call_empty</source>
<extracomment>&quot;En attente d&apos;autres participants&quot;</extracomment>
<translation>Warten auf weitere Teilnehmer</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="156"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="169"/>
<source>conference_share_link_title</source>
<extracomment>&quot;Partager le lien&quot;</extracomment>
<translation>Link teilen</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="162"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="175"/>
<source>copied</source>
<translation>Kopiert</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="164"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="177"/>
<source>information_popup_meeting_address_copied_to_clipboard</source>
<extracomment>Le lien de la réunion a é copié dans le presse-papier</extracomment>
<translation>Der Besprechungs-Link wurde in die Zwischenablage kopiert</translation>
@ -2284,23 +2284,41 @@ Error</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="314"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="318"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="306"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="324"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="328"/>
<source>information_popup_error_title</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="316"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="308"/>
<source>information_popup_chat_creation_failed_message</source>
<extracomment>&quot;La création a échoué&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>information_popup_codec_install_error_text</source>
<extracomment>&quot;La création a échoué&quot;</extracomment>
<translation type="obsolete">Der Codec konnte nicht installiert werden.</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="326"/>
<source>group_chat_error_must_have_name</source>
<extracomment>&quot;Un nom doit être donné au groupe</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="320"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="330"/>
<source>group_call_error_not_connected</source>
<extracomment>&quot;Vous n&apos;etes pas connecté&quot;</extracomment>
<translation type="unfinished">Sie sind nicht verbunden</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="334"/>
<source>chat_creation_in_progress</source>
<extracomment>Creation de la conversation en cours </extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChatSettingsLayout</name>
@ -5041,13 +5059,13 @@ Pour les activer dans un projet commercial, merci de nous contacter.</source>
<translation>Bildschirm %1</translation>
</message>
<message>
<location filename="../../view/Control/Form/Settings/ScreencastSettings.qml" line="183"/>
<location filename="../../view/Control/Form/Settings/ScreencastSettings.qml" line="178"/>
<source>stop</source>
<extracomment>&quot;Stop</extracomment>
<translation>Stopp</translation>
</message>
<message>
<location filename="../../view/Control/Form/Settings/ScreencastSettings.qml" line="185"/>
<location filename="../../view/Control/Form/Settings/ScreencastSettings.qml" line="180"/>
<source>share</source>
<extracomment>&quot;Partager&quot;</extracomment>
<translation>Teilen</translation>

View file

@ -874,42 +874,42 @@
<context>
<name>CallLayout</name>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="58"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="69"/>
<source>meeting_event_conference_destroyed</source>
<extracomment>&quot;Vous avez quitté la conférence&quot;</extracomment>
<translation>You have left the meeting</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="61"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="72"/>
<source>call_ended_by_user</source>
<extracomment>&quot;Vous avez terminé l&apos;appel&quot;</extracomment>
<translation>You have ended the call</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="64"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="75"/>
<source>call_ended_by_remote</source>
<extracomment>&quot;Votre correspondant a terminé l&apos;appel&quot;</extracomment>
<translation>Your caller has ended the call</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="138"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="151"/>
<source>conference_call_empty</source>
<extracomment>&quot;En attente d&apos;autres participants&quot;</extracomment>
<translation>Waiting for other participants</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="156"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="169"/>
<source>conference_share_link_title</source>
<extracomment>&quot;Partager le lien&quot;</extracomment>
<translation>Share link</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="162"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="175"/>
<source>copied</source>
<translation>Copied</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="164"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="177"/>
<source>information_popup_meeting_address_copied_to_clipboard</source>
<extracomment>Le lien de la réunion a é copié dans le presse-papier</extracomment>
<translation>The meeting link has been copied to the clipboard</translation>
@ -2247,23 +2247,41 @@ Only your correspondent can decrypt them.</translation>
<translation>Create</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="314"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="318"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="306"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="324"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="328"/>
<source>information_popup_error_title</source>
<translation>Error</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="316"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="308"/>
<source>information_popup_chat_creation_failed_message</source>
<extracomment>&quot;La création a échoué&quot;</extracomment>
<translation>Creation failed</translation>
</message>
<message>
<source>information_popup_codec_install_error_text</source>
<extracomment>&quot;La création a échoué&quot;</extracomment>
<translation type="obsolete">The codec could not be installed.</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="326"/>
<source>group_chat_error_must_have_name</source>
<extracomment>&quot;Un nom doit être donné au groupe</extracomment>
<translation>A name must be set for the group</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="320"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="330"/>
<source>group_call_error_not_connected</source>
<extracomment>&quot;Vous n&apos;etes pas connecté&quot;</extracomment>
<translation>You are not connected</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="334"/>
<source>chat_creation_in_progress</source>
<extracomment>Creation de la conversation en cours </extracomment>
<translation>Chat creation pending</translation>
</message>
</context>
<context>
<name>ChatSettingsLayout</name>
@ -4930,13 +4948,13 @@ To enable them in a commercial project, please contact us.</translation>
<translation>Screen %1</translation>
</message>
<message>
<location filename="../../view/Control/Form/Settings/ScreencastSettings.qml" line="183"/>
<location filename="../../view/Control/Form/Settings/ScreencastSettings.qml" line="178"/>
<source>stop</source>
<extracomment>&quot;Stop</extracomment>
<translation>Stop</translation>
</message>
<message>
<location filename="../../view/Control/Form/Settings/ScreencastSettings.qml" line="185"/>
<location filename="../../view/Control/Form/Settings/ScreencastSettings.qml" line="180"/>
<source>share</source>
<extracomment>&quot;Partager&quot;</extracomment>
<translation>Share</translation>

View file

@ -874,42 +874,42 @@
<context>
<name>CallLayout</name>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="58"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="69"/>
<source>meeting_event_conference_destroyed</source>
<extracomment>&quot;Vous avez quitté la conférence&quot;</extracomment>
<translation>Vous avez quitté la conférence</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="61"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="72"/>
<source>call_ended_by_user</source>
<extracomment>&quot;Vous avez terminé l&apos;appel&quot;</extracomment>
<translation>Vous avez terminé l&apos;appel</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="64"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="75"/>
<source>call_ended_by_remote</source>
<extracomment>&quot;Votre correspondant a terminé l&apos;appel&quot;</extracomment>
<translation>Votre correspondant a terminé l&apos;appel</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="138"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="151"/>
<source>conference_call_empty</source>
<extracomment>&quot;En attente d&apos;autres participants&quot;</extracomment>
<translation>En attente d&apos;autres participants</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="156"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="169"/>
<source>conference_share_link_title</source>
<extracomment>&quot;Partager le lien&quot;</extracomment>
<translation>Partager le lien</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="162"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="175"/>
<source>copied</source>
<translation>Copié</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="164"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="177"/>
<source>information_popup_meeting_address_copied_to_clipboard</source>
<extracomment>Le lien de la réunion a é copié dans le presse-papier</extracomment>
<translation>Le lien de la réunion a é copié dans le presse-papier</translation>
@ -2247,23 +2247,36 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
<translation>Créer</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="314"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="318"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="306"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="324"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="328"/>
<source>information_popup_error_title</source>
<translation>Erreur</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="316"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="308"/>
<source>information_popup_chat_creation_failed_message</source>
<extracomment>&quot;La création a échoué&quot;</extracomment>
<translation>La création a échoué</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="326"/>
<source>group_chat_error_must_have_name</source>
<extracomment>&quot;Un nom doit être donné au groupe</extracomment>
<translation>Un nom doit être donné au groupe</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="320"/>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="330"/>
<source>group_call_error_not_connected</source>
<extracomment>&quot;Vous n&apos;etes pas connecté&quot;</extracomment>
<translation>Vous n&apos;êtes pas connecté</translation>
</message>
<message>
<location filename="../../view/Page/Main/Chat/ChatPage.qml" line="334"/>
<source>chat_creation_in_progress</source>
<extracomment>Creation de la conversation en cours </extracomment>
<translation>Création de la conversation en cours</translation>
</message>
</context>
<context>
<name>ChatSettingsLayout</name>
@ -4930,13 +4943,13 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
<translation>Écran %1</translation>
</message>
<message>
<location filename="../../view/Control/Form/Settings/ScreencastSettings.qml" line="183"/>
<location filename="../../view/Control/Form/Settings/ScreencastSettings.qml" line="178"/>
<source>stop</source>
<extracomment>&quot;Stop</extracomment>
<translation>Stop</translation>
</message>
<message>
<location filename="../../view/Control/Form/Settings/ScreencastSettings.qml" line="185"/>
<location filename="../../view/Control/Form/Settings/ScreencastSettings.qml" line="180"/>
<source>share</source>
<extracomment>&quot;Partager&quot;</extracomment>
<translation>Partager</translation>

View file

@ -25,10 +25,10 @@ Item {
property string activeSpeakerAddress
property ParticipantDeviceProxy participantDevices : ParticipantDeviceProxy {
id: allDevices
qmlName: "AS"
onCountChanged: console.log("Device count changed : " +count)
Component.onCompleted: console.log("Loaded : " +allDevices)
id: allDevices
qmlName: "AS"
onCountChanged: console.log("Device count changed : " +count)
Component.onCompleted: console.log("Loaded : " +allDevices)
}
RowLayout{

View file

@ -19,6 +19,7 @@ Item {
onCallStateChanged: if (callState === LinphoneEnums.CallState.End || callState === LinphoneEnums.CallState.Released) preview.visible = false
property int conferenceLayout: call ? call.core.conferenceVideoLayout : LinphoneEnums.ConferenceLayout.ActiveSpeaker
property int participantDeviceCount: conference ? conference.core.participantDeviceCount : -1
property int lastConfLayoutBeforeSharing: -1
onParticipantDeviceCountChanged: {
setConferenceLayout()
}
@ -33,10 +34,21 @@ Item {
function onIsScreenSharingEnabledChanged() {
setConferenceLayout()
}
function onIsLocalScreenSharingChanged() {
if (mainItem.conference.core.isLocalScreenSharing) {
mainItem.lastConfLayoutBeforeSharing = mainItem.conferenceLayout
}
setConferenceLayout()
}
}
function setConferenceLayout() {
callLayout.sourceComponent = undefined // unload old view before opening the new view to avoid conflicts in Video UI.
// If stop sharing screen, reset conference layout to the previous one
if (mainItem.conference && !mainItem.conference.core.isLocalScreenSharing && mainItem.lastConfLayoutBeforeSharing !== -1) {
mainItem.conferenceLayout = mainItem.lastConfLayoutBeforeSharing
mainItem.lastConfLayoutBeforeSharing = -1
}
callLayout.sourceComponent = conference
? conference.core.isScreenSharingEnabled || (mainItem.conferenceLayout == LinphoneEnums.ConferenceLayout.ActiveSpeaker && participantDeviceCount > 1)
? activeSpeakerComponent
@ -86,6 +98,8 @@ Item {
&& mainItem.callState !== LinphoneEnums.CallState.OutgoingProgress
&& mainItem.callState !== LinphoneEnums.CallState.OutgoingRinging
&& mainItem.callState !== LinphoneEnums.CallState.OutgoingInit
&& !mainItem.conference?.core.isScreenSharingEnabled
&& mainItem.participantDeviceCount <= 2
height: Math.round(180 * DefaultStyle.dp)
width: Math.round(300 * DefaultStyle.dp)
anchors.right: mainItem.right
@ -178,12 +192,6 @@ Item {
Layout.fillHeight: true
call: mainItem.call
Binding {
target: preview
property: "visible"
when: activeSpeaker.sideStickersVisible
value: false
}
}
}
Component{

View file

@ -184,7 +184,7 @@ ListView {
Avatar {
property var contactObj: modelData ? UtilsCpp.findFriendByAddress(modelData.core.peerAddress) : null
contact: contactObj?.value || null
displayNameVal: modelData.core.avatarUri
displayNameVal: modelData && modelData.core.avatarUri || ""
secured: modelData?.core.isSecured || false
Layout.preferredWidth: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)

View file

@ -109,10 +109,6 @@ ColumnLayout {
Layout.fillWidth: true
height: visible ? contentHeight : 0
currentIndex: -1
onCurrentIndexChanged: {
mainItem.desc.core.screenSharingIndex = currentIndex
}
//property int selectedIndex
model: ScreenProxy{
id: screensList
mode: ScreenList.SCREENS
@ -128,8 +124,9 @@ ColumnLayout {
screenIndex: index
onClicked: {//screensLayout.selectedIndex = index
screensLayout.currentIndex = index
mainItem.desc.core.screenSharingIndex = index
if( mainItem.conference.core.isLocalScreenSharing)
mainItem.call.core.videoSourceDescriptor = mainItem.desc
mainItem.call.core.videoSourceDescriptor = mainItem.desc
}
selected: mainItem.desc.core.screenSharingIndex === index
}
@ -145,9 +142,6 @@ ColumnLayout {
mode: ScreenList.WINDOWS
}
currentIndex: -1
onCurrentIndexChanged: {
mainItem.desc.core.windowId = model.getAt(currentIndex)? model.getAt(currentIndex).windowId : -1
}
onVisibleChanged: {
if(visible) windowsList.update()
else currentIndex = -1
@ -165,8 +159,9 @@ ColumnLayout {
screenIndex: index
onClicked: {
windowsLayout.currentIndex = index
mainItem.desc.core.windowId = $modelData.windowId
if( mainItem.conference.core.isLocalScreenSharing)
mainItem.call.core.videoSourceDescriptor = mainItem.desc
mainItem.call.core.videoSourceDescriptor = mainItem.desc
}
selected: mainItem.desc.core.windowId == $modelData.windowId
}

View file

@ -297,7 +297,14 @@ AbstractMainPage {
target: groupChat?.core || null
function onChatRoomStateChanged() {
if (chatCreationLayout.groupChat.core.state === LinphoneEnums.ChatRoomState.Created) {
mainWindow.closeLoadingPopup()
mainItem.selectedChatGui = chatCreationLayout.groupChat
} else if (chatCreationLayout.groupChat.core.state === LinphoneEnums.ChatRoomState.CreationFailed) {
mainWindow.closeLoadingPopup()
mainWindow.showInformationPopup(qsTr("information_popup_error_title"),
//: "La création a échoué"
qsTr("information_popup_chat_creation_failed_message"), false)
chatCreationLayout.groupChat.core.lDelete()
}
}
}
@ -309,6 +316,7 @@ AbstractMainPage {
listStackView.pop()
listStackView.currentItem?.forceActiveFocus()
}
onGroupCreationRequested: {
if (groupName.text.length === 0) {
UtilsCpp.showInformationPopup(qsTr("information_popup_error_title"),
@ -320,6 +328,10 @@ AbstractMainPage {
qsTr("group_call_error_not_connected"), false)
} else {
console.log("create group chat")
//: Creation de la conversation en cours
mainWindow.showLoadingPopup(qsTr("chat_creation_in_progress"), true, function () {
if (chatCreationLayout.groupChat) chatCreationLayout.groupChat.core.lDelete()
})
chatCreationLayout.groupChatObj = UtilsCpp.createGroupChat(chatCreationLayout.groupName.text, addParticipantsLayout.selectedParticipants)
}
}
@ -344,7 +356,7 @@ AbstractMainPage {
}
SelectedChatView {
id: selectedChatView
visible: chat && (chat.core.isBasic || chat.core.conferenceJoined)
visible: chat != undefined //&& (chat.core.isBasic || chat.core.conferenceJoined)
anchors.fill: parent
chat: mainItem.selectedChatGui ? mainItem.selectedChatGui : null
onChatChanged: {