File indexing completed on 2024-04-14 04:51:28

0001 /*
0002  *  SPDX-FileCopyrightText: 2020 Dan Leinir Turthra Jensen <admin@leinir.dk>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "providersmodel.h"
0007 
0008 #include "core.h"
0009 
0010 #include <Accounts/Manager>
0011 #include <Accounts/Provider>
0012 
0013 namespace KAccounts
0014 {
0015 
0016 class ProvidersModel::Private
0017 {
0018 public:
0019     Private()
0020     {
0021     }
0022     Accounts::Manager *accountsManager{nullptr};
0023 
0024     const Accounts::ProviderList &providerList()
0025     {
0026         if (!accountsManager) {
0027             accountsManager = KAccounts::accountsManager();
0028             providers = accountsManager->providerList();
0029         }
0030         return providers;
0031     }
0032 
0033 private:
0034     Accounts::ProviderList providers;
0035 };
0036 
0037 ProvidersModel::ProvidersModel(QObject *parent)
0038     : QAbstractListModel(parent)
0039     , d(new Private)
0040 {
0041 }
0042 
0043 ProvidersModel::~ProvidersModel()
0044 {
0045     delete d;
0046 }
0047 
0048 QHash<int, QByteArray> ProvidersModel::roleNames() const
0049 {
0050     static const QHash<int, QByteArray> roleNames{
0051         {NameRole, "name"},
0052         {DisplayNameRole, "displayName"},
0053         {DescriptionRole, "description"},
0054         {IconNameRole, "iconName"},
0055         {SupportsMultipleAccountsRole, "supportsMultipleAccounts"},
0056         {AccountsCountRole, "accountsCount"},
0057     };
0058     return roleNames;
0059 }
0060 
0061 int ProvidersModel::rowCount(const QModelIndex &parent) const
0062 {
0063     if (parent.isValid()) {
0064         return 0;
0065     }
0066     return d->providerList().count();
0067 }
0068 
0069 QVariant ProvidersModel::data(const QModelIndex &index, int role) const
0070 {
0071     QVariant data;
0072     if (checkIndex(index)) {
0073         const Accounts::Provider &provider = d->providerList().value(index.row());
0074         if (provider.isValid()) {
0075             switch (role) {
0076             case NameRole:
0077                 data.setValue(provider.name());
0078                 break;
0079             case DisplayNameRole:
0080                 data.setValue(provider.displayName());
0081                 break;
0082             case DescriptionRole:
0083                 data.setValue(provider.description());
0084                 break;
0085             case IconNameRole:
0086                 data.setValue(provider.iconName());
0087                 break;
0088             case SupportsMultipleAccountsRole:
0089                 data.setValue(!provider.isSingleAccount());
0090                 break;
0091             case AccountsCountRole: {
0092                 const Accounts::AccountIdList accounts = d->accountsManager->accountList();
0093                 int i{0};
0094                 for (const Accounts::AccountId &accountId : accounts) {
0095                     Accounts::Account *account = d->accountsManager->account(accountId);
0096                     if (account->providerName() == provider.name()) {
0097                         ++i;
0098                     }
0099                 }
0100                 data.setValue(i);
0101                 break;
0102             }
0103             default:
0104                 data.setValue(QStringLiteral("No such role: %1").arg(role));
0105                 break;
0106             }
0107         }
0108     }
0109     return data;
0110 }
0111 
0112 };