diff --git a/src/app/accountadapter.cpp b/src/app/accountadapter.cpp index a6278c4dc18fd347993075ddeb13d9da6fbc3f21..e73c6103fd0e5d0f9759375a38b0a86521491a50 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 326dda8e1390bb74edce98515511a635ab173263..7c5a29ab838be8cc9cf7644591baca84e45ea8cb 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 49dea9bfb8f0fd7dd7a17d86cc1d67a3126ecc6c..c7ec0aa7deb2874f07c31e2e6c0344f5c80b48bd 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 3ca37937539fb81042213a15c7e1ae25c4db82ee..e8b4232c7b70c47023eec15994d11bb017f8ba6a 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 f3f9ffe97637db388b34100126730534ab180d93..8a9f68fb5247289d98bbf92732d4bab6514b7be6 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 436d6a2ba202f696c8b1bbcb3b49ee2e673812d0..9a8bfa51cd41cca87c6f9869e51b789f303092b0 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