From df63960974c306d1402d2961f856d07b63b10226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Thu, 26 Jan 2023 16:25:05 -0500 Subject: [PATCH] callmodel: avoid to add empty medias If a user join a conference with video enabled, but without any valid camera and try to un-mute/mute in loop, it will add new empty medias with incorrect sources causing duplicated participants in the conference. Change-Id: Ifa0dc090ca49ae6f9799f1209f3514cf540365da --- src/app/qmlregister.cpp | 1 - src/libclient/callmodel.cpp | 24 ++++++++++++------------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/app/qmlregister.cpp b/src/app/qmlregister.cpp index 1c203dbb1..1ecd207b2 100644 --- a/src/app/qmlregister.cpp +++ b/src/app/qmlregister.cpp @@ -43,7 +43,6 @@ #include "moderatorlistmodel.h" #include "deviceitemlistmodel.h" #include "smartlistmodel.h" -#include "conversationlistmodelbase.h" #include "filestosendlistmodel.h" #include "callInformationListModel.h" #include "rendererinformationlistmodel.h" diff --git a/src/libclient/callmodel.cpp b/src/libclient/callmodel.cpp index 9ef31038f..57b169c89 100644 --- a/src/libclient/callmodel.cpp +++ b/src/libclient/callmodel.cpp @@ -509,12 +509,14 @@ void CallModel::addMedia(const QString& callId, const QString& source, MediaRequestType type, bool mute) { auto& callInfo = pimpl_->calls[callId]; - if (!callInfo) + if (!callInfo || source.isEmpty()) return; QString resource {}; auto id = 0; for (const auto& media : callInfo->mediaList) { + if (media[MediaAttributeKey::SOURCE] == source) + break; if (media[MediaAttributeKey::MEDIA_TYPE] == MediaAttributeValue::VIDEO) id++; } @@ -947,14 +949,11 @@ CallModel::getDisplay(int idx, int x, int y, int w, int h) .arg(h); } - - #ifdef WIN32 BOOL CALLBACK EnumWindowsProcMy(HWND hwnd, LPARAM lParam) { - std::pair<DWORD, QString>* dataPair = reinterpret_cast<std::pair<DWORD, QString>*>( - lParam); + std::pair<DWORD, QString>* dataPair = reinterpret_cast<std::pair<DWORD, QString>*>(lParam); DWORD lpdwProcessId; if (auto parent = GetWindow(hwnd, GW_OWNER)) GetWindowThreadProcessId(parent, &lpdwProcessId); @@ -978,12 +977,13 @@ QString CallModel::getDisplay(const QString& windowProcessId, const QString& windowId) { QString sep = libjami::Media::VideoProtocolPrefix::SEPARATOR; - QString ret{}; + QString ret {}; #if (defined(Q_OS_UNIX) && !defined(__APPLE__)) + Q_UNUSED(windowId); ret = QString("%1%2:+0,0 window-id:%3") - .arg(libjami::Media::VideoProtocolPrefix::DISPLAY) - .arg(sep) - .arg(windowProcessId); + .arg(libjami::Media::VideoProtocolPrefix::DISPLAY) + .arg(sep) + .arg(windowProcessId); #endif #ifdef WIN32 // If window changed the name we must look for the parent process window @@ -999,9 +999,9 @@ CallModel::getDisplay(const QString& windowProcessId, const QString& windowId) } ret = QString("%1%2:+0,0 window-id:title=%3") - .arg(libjami::Media::VideoProtocolPrefix::DISPLAY) - .arg(sep) - .arg(newWindowId); + .arg(libjami::Media::VideoProtocolPrefix::DISPLAY) + .arg(sep) + .arg(newWindowId); #endif return ret; } -- GitLab