From 1ddfae8802e29bcc7cb03c3e5d39e11c7e9ef7aa Mon Sep 17 00:00:00 2001 From: Gaelle Braud Date: Thu, 28 Aug 2025 18:15:25 +0200 Subject: [PATCH] fix autoscroll to current date meeting #LINQT-1886 --- Linphone/core/conference/ConferenceInfoList.cpp | 13 +++++-------- Linphone/core/conference/ConferenceInfoList.hpp | 3 +-- Linphone/core/conference/ConferenceInfoProxy.cpp | 9 ++++++++- Linphone/core/conference/ConferenceInfoProxy.hpp | 2 +- .../Control/Display/Meeting/MeetingListView.qml | 10 +++------- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/Linphone/core/conference/ConferenceInfoList.cpp b/Linphone/core/conference/ConferenceInfoList.cpp index a29300a05..538a77cac 100644 --- a/Linphone/core/conference/ConferenceInfoList.cpp +++ b/Linphone/core/conference/ConferenceInfoList.cpp @@ -58,8 +58,8 @@ ConferenceInfoList::~ConferenceInfoList() { void ConferenceInfoList::setSelf(QSharedPointer me) { mCoreModelConnection = SafeConnection::create(me, CoreModel::getInstance()); - mCoreModelConnection->makeConnectToCore(&ConferenceInfoList::lUpdate, [this](bool isInitialization) { - mCoreModelConnection->invokeToModel([this, isInitialization]() { + mCoreModelConnection->makeConnectToCore(&ConferenceInfoList::lUpdate, [this]() { + mCoreModelConnection->invokeToModel([this]() { QList> *items = new QList>(); mustBeInLinphoneThread(getClassName()); auto defaultAccount = CoreModel::getInstance()->getCore()->getDefaultAccount(); @@ -82,16 +82,13 @@ void ConferenceInfoList::setSelf(QSharedPointer me) { items->push_back(confInfoCore); } } - mCoreModelConnection->invokeToCore([this, items, isInitialization]() { + mCoreModelConnection->invokeToCore([this, items]() { mustBeInMainThread(getClassName()); for (auto &item : *items) { connectItem(item); } resetData(*items); delete items; - if (isInitialization) { - emit initialized(); - } }); }); }); @@ -118,7 +115,7 @@ void ConferenceInfoList::setSelf(QSharedPointer me) { if (mCurrentAccountCore) connect(mCurrentAccountCore.get(), &AccountCore::registrationStateChanged, this, [this] { emit lUpdate(); }); - emit lUpdate(true); + emit lUpdate(); }); }); mCoreModelConnection->invokeToModel([this] { @@ -131,7 +128,7 @@ void ConferenceInfoList::setSelf(QSharedPointer me) { [this] { emit lUpdate(); }); }); }); - emit lUpdate(true); + emit lUpdate(); } void ConferenceInfoList::setAccountConnected(bool connected) { diff --git a/Linphone/core/conference/ConferenceInfoList.hpp b/Linphone/core/conference/ConferenceInfoList.hpp index 2445d7331..afc1ed176 100644 --- a/Linphone/core/conference/ConferenceInfoList.hpp +++ b/Linphone/core/conference/ConferenceInfoList.hpp @@ -61,8 +61,7 @@ public: virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; signals: - void lUpdate(bool isInitialization = false); - void initialized(); + void lUpdate(); void addCurrentDateChanged(); void haveCurrentDateChanged(); void currentDateIndexChanged(int index); diff --git a/Linphone/core/conference/ConferenceInfoProxy.cpp b/Linphone/core/conference/ConferenceInfoProxy.cpp index 937eb628c..eb7cd3cc9 100644 --- a/Linphone/core/conference/ConferenceInfoProxy.cpp +++ b/Linphone/core/conference/ConferenceInfoProxy.cpp @@ -57,7 +57,6 @@ ConferenceInfoProxy::ConferenceInfoProxy(QObject *parent) : LimitProxy(parent) { if (isSignalConnected(conferenceInfoUpdatedSignal)) emit conferenceInfoUpdated(new ConferenceInfoGui(data)); }, Qt::QueuedConnection); - connect(mList.get(), &ConferenceInfoList::initialized, this, &ConferenceInfoProxy::initialized); connect(mList.get(), &ConferenceInfoList::accountConnectedChanged, this, &ConferenceInfoProxy::accountConnectedChanged); } @@ -105,6 +104,14 @@ void ConferenceInfoProxy::clear() { mList->clearData(); } +ConferenceInfoGui *ConferenceInfoProxy::getCurrentDateConfInfo() { + if (mList) { + auto confInfo = mList->getCurrentDateConfInfo(); + return confInfo ? new ConferenceInfoGui(confInfo) : nullptr; + } + return nullptr; +} + int ConferenceInfoProxy::loadUntil(ConferenceInfoGui *confInfo) { return loadUntil(confInfo ? confInfo->mCore : nullptr); } diff --git a/Linphone/core/conference/ConferenceInfoProxy.hpp b/Linphone/core/conference/ConferenceInfoProxy.hpp index 86df88e89..0055e9a2e 100644 --- a/Linphone/core/conference/ConferenceInfoProxy.hpp +++ b/Linphone/core/conference/ConferenceInfoProxy.hpp @@ -47,10 +47,10 @@ public: bool getAccountConnected() const; Q_INVOKABLE void clear(); + Q_INVOKABLE ConferenceInfoGui *getCurrentDateConfInfo(); Q_INVOKABLE int loadUntil(ConferenceInfoGui *confInfo); int loadUntil(QSharedPointer data); signals: - void initialized(); void haveCurrentDateChanged(); void conferenceInfoCreated(ConferenceInfoGui *confInfo); void conferenceInfoUpdated(ConferenceInfoGui *confInfo); diff --git a/Linphone/view/Control/Display/Meeting/MeetingListView.qml b/Linphone/view/Control/Display/Meeting/MeetingListView.qml index d8ef7f783..a17b23526 100644 --- a/Linphone/view/Control/Display/Meeting/MeetingListView.qml +++ b/Linphone/view/Control/Display/Meeting/MeetingListView.qml @@ -36,8 +36,8 @@ ListView { //---------------------------------------------------------------- function moveToCurrentItem(){ - if( mainItem.currentIndex >= 0) - Utils.updatePosition(mainItem, mainItem) + if( mainItem.currentIndex >= 0) + mainItem.positionViewAtIndex(mainItem.currentIndex, ListView.Contain) } onCurrentItemChanged: { moveToCurrentItem() @@ -97,13 +97,13 @@ ListView { } onModelReset: { mainItem.loading = !confInfoProxy.accountConnected + selectData(getCurrentDateConfInfo()) } onAccountConnectedChanged: (connected) => { mainItem.loading = !connected } function selectData(confInfoGui){ mainItem.currentIndex = loadUntil(confInfoGui) - mainItem.positionViewAtIndex(mainItem.currentIndex, ListView.Contain) } onConferenceInfoCreated: (confInfoGui) => { selectData(confInfoGui) @@ -111,10 +111,6 @@ ListView { onConferenceInfoUpdated: (confInfoGui) => { selectData(confInfoGui) } - onInitialized: { - // Move to currentDate - selectData(null) - } } BusyIndicator {