From 207872244b974a58a2973f41753ea3566a991eac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Fri, 7 Jul 2023 14:47:30 -0400 Subject: [PATCH] moderatorlistmodel: fix refresh on account change Change-Id: Ib689e97d903a42fc241f505e3fb5f37c155c65f9 GitLab: #1122 --- src/app/accountadapter.cpp | 4 ++- src/app/accountadapter.h | 2 ++ src/app/moderatorlistmodel.cpp | 26 ++++++++++++++----- src/app/moderatorlistmodel.h | 11 +++++--- src/app/qmlregister.cpp | 2 +- .../components/CallSettingsPage.qml | 7 ++--- 6 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/app/accountadapter.cpp b/src/app/accountadapter.cpp index a6278c4dc..e73c6103f 100644 --- a/src/app/accountadapter.cpp +++ b/src/app/accountadapter.cpp @@ -34,10 +34,12 @@ AccountAdapter::AccountAdapter(AppSettingsManager* settingsManager, , settingsManager_(settingsManager) , systemTray_(systemTray) , accountListModel_(new AccountListModel(instance)) - , deviceItemListModel_(new DeviceItemListModel(instance)) + , deviceItemListModel_(new DeviceItemListModel(instance, parent)) + , moderatorListModel_(new ModeratorListModel(instance, parent)) { QML_REGISTERSINGLETONTYPE_POBJECT(NS_MODELS, accountListModel_.get(), "AccountListModel"); QML_REGISTERSINGLETONTYPE_POBJECT(NS_MODELS, deviceItemListModel_.get(), "DeviceItemListModel"); + QML_REGISTERSINGLETONTYPE_POBJECT(NS_MODELS, moderatorListModel_.get(), "ModeratorListModel"); connect(&lrcInstance_->accountModel(), &AccountModel::accountStatusChanged, diff --git a/src/app/accountadapter.h b/src/app/accountadapter.h index 326dda8e1..7c5a29ab8 100644 --- a/src/app/accountadapter.h +++ b/src/app/accountadapter.h @@ -22,6 +22,7 @@ #include "accountlistmodel.h" #include "deviceitemlistmodel.h" +#include "moderatorlistmodel.h" #include "systemtray.h" #include "lrcinstance.h" #include "utils.h" @@ -102,5 +103,6 @@ private: QScopedPointer<AccountListModel> accountListModel_; QScopedPointer<DeviceItemListModel> deviceItemListModel_; + QScopedPointer<ModeratorListModel> moderatorListModel_; }; Q_DECLARE_METATYPE(AccountAdapter*) diff --git a/src/app/moderatorlistmodel.cpp b/src/app/moderatorlistmodel.cpp index 49dea9bfb..c7ec0aa7d 100644 --- a/src/app/moderatorlistmodel.cpp +++ b/src/app/moderatorlistmodel.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2019-2023 Savoir-faire Linux Inc. - * Author: Albert Babí Oller <albert.babi@savoirfairelinux.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,9 +19,17 @@ #include "lrcinstance.h" -ModeratorListModel::ModeratorListModel(QObject* parent) +ModeratorListModel::ModeratorListModel(LRCInstance* instance, QObject* parent) : AbstractListModelBase(parent) -{} +{ + lrcInstance_ = instance; + connect(lrcInstance_, + &LRCInstance::currentAccountIdChanged, + this, + &ModeratorListModel::connectAccount, + Qt::UniqueConnection); + connectAccount(); +} ModeratorListModel::~ModeratorListModel() {} @@ -52,7 +59,7 @@ ModeratorListModel::data(const QModelIndex& index, int role) const { try { QStringList list = lrcInstance_->accountModel().getDefaultModerators( - lrcInstance_->get_currentAccountId()); + lrcInstance_->get_currentAccountId()); if (!index.isValid() || list.size() <= index.row()) { return QVariant(); } @@ -61,8 +68,8 @@ ModeratorListModel::data(const QModelIndex& index, int role) const switch (role) { case Role::ContactName: { - QString str = lrcInstance_->getCurrentAccountInfo().contactModel-> - bestNameForContact(list.at(index.row())); + QString str = lrcInstance_->getCurrentAccountInfo().contactModel->bestNameForContact( + list.at(index.row())); return QVariant(str); } case Role::ContactID: @@ -120,3 +127,10 @@ ModeratorListModel::reset() beginResetModel(); endResetModel(); } + +void +ModeratorListModel::connectAccount() +{ + if (!lrcInstance_->get_currentAccountId().isEmpty()) + reset(); +} \ No newline at end of file diff --git a/src/app/moderatorlistmodel.h b/src/app/moderatorlistmodel.h index 3ca379375..e8b4232c7 100644 --- a/src/app/moderatorlistmodel.h +++ b/src/app/moderatorlistmodel.h @@ -1,6 +1,5 @@ /* * Copyright (C) 2019-2023 Savoir-faire Linux Inc. - * Author: Albert Babí Oller <albert.babi@savoirfairelinux.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,14 +19,14 @@ #include "abstractlistmodelbase.h" -class ModeratorListModel : public AbstractListModelBase +class ModeratorListModel final : public AbstractListModelBase { Q_OBJECT public: enum Role { ContactName = Qt::UserRole + 1, ContactID }; Q_ENUM(Role) - explicit ModeratorListModel(QObject* parent = nullptr); + explicit ModeratorListModel(LRCInstance* lrcInstance, QObject* parent = nullptr); ~ModeratorListModel(); /* @@ -48,4 +47,10 @@ public: * This function is to reset the model when there's new account added. */ Q_INVOKABLE void reset(); + +public Q_SLOTS: + void connectAccount(); + +private: + LRCInstance* lrcInstance_; }; diff --git a/src/app/qmlregister.cpp b/src/app/qmlregister.cpp index f3f9ffe97..8a9f68fb5 100644 --- a/src/app/qmlregister.cpp +++ b/src/app/qmlregister.cpp @@ -165,7 +165,6 @@ registerTypes(QQmlEngine* engine, // QAbstractListModels QML_REGISTERTYPE(NS_MODELS, BannedListModel); - QML_REGISTERTYPE(NS_MODELS, ModeratorListModel); QML_REGISTERTYPE(NS_MODELS, MediaCodecListModel); QML_REGISTERTYPE(NS_MODELS, AudioDeviceModel); QML_REGISTERTYPE(NS_MODELS, AudioManagerListModel); @@ -229,6 +228,7 @@ registerTypes(QQmlEngine* engine, QML_REGISTERUNCREATABLE(NS_ENUMS, NetworkManager) QML_REGISTERUNCREATABLE(NS_ENUMS, WizardViewStepModel) QML_REGISTERUNCREATABLE(NS_ENUMS, DeviceItemListModel) + QML_REGISTERUNCREATABLE(NS_ENUMS, ModeratorListModel) QML_REGISTERUNCREATABLE(NS_ENUMS, VideoInputDeviceModel) QML_REGISTERUNCREATABLE(NS_ENUMS, VideoFormatResolutionModel) QML_REGISTERUNCREATABLE(NS_ENUMS, VideoFormatFpsModel) diff --git a/src/app/settingsview/components/CallSettingsPage.qml b/src/app/settingsview/components/CallSettingsPage.qml index 436d6a2ba..9a8bfa51c 100644 --- a/src/app/settingsview/components/CallSettingsPage.qml +++ b/src/app/settingsview/components/CallSettingsPage.qml @@ -276,11 +276,8 @@ SettingsPageBase { Layout.preferredHeight: 160 spacing: JamiTheme.settingsListViewsSpacing - visible: model.rowCount() > 0 - - model: ModeratorListModel { - lrcInstance: LRCInstance - } + visible: count > 0 + model: ModeratorListModel delegate: ContactItemDelegate { id: moderatorListDelegate -- GitLab