|
| 1 | +#include "account_model.hpp" |
| 2 | +#include "account_data.hpp" |
| 3 | + |
| 4 | +AccountModel::AccountModel(QObject *parent) |
| 5 | + : QAbstractListModel(parent) |
| 6 | +{ |
| 7 | +} |
| 8 | + |
| 9 | +int AccountModel::rowCount(const QModelIndex &parent) const |
| 10 | +{ |
| 11 | + Q_UNUSED(parent); |
| 12 | + |
| 13 | + return mAccounts.size(); |
| 14 | +} |
| 15 | + |
| 16 | +QHash<int, QByteArray> AccountModel::roleNames() const |
| 17 | +{ |
| 18 | + static const QHash<int, QByteArray> roles{ |
| 19 | + {ControlUrlRole, "controlUrl"}, |
| 20 | + {IdRole, "id"}, |
| 21 | + {KeyRole, "key"}, |
| 22 | + {NameRole, "name"}, |
| 23 | + {DomainNameRole, "domainName"}, |
| 24 | + {MagicDnsNameRole, "magicDnsName"}, |
| 25 | + {UserIdRole, "userId"}, |
| 26 | + {UserNameRole, "userName"}, |
| 27 | + {LoginNameRole, "loginName"}, |
| 28 | + {IsCurrentRole, "isCurrent"}, |
| 29 | + }; |
| 30 | + return roles; |
| 31 | +} |
| 32 | + |
| 33 | +QVariant AccountModel::data(const QModelIndex &index, int role) const |
| 34 | +{ |
| 35 | + if (!index.isValid()) { |
| 36 | + return QStringLiteral("Invalid inded"); |
| 37 | + } |
| 38 | + switch (role) { |
| 39 | + case ControlUrlRole: |
| 40 | + return mAccounts.at(index.row()).controlUrl; |
| 41 | + case IdRole: |
| 42 | + return mAccounts.at(index.row()).id; |
| 43 | + case KeyRole: |
| 44 | + return mAccounts.at(index.row()).key; |
| 45 | + case NameRole: |
| 46 | + return mAccounts.at(index.row()).name; |
| 47 | + case DomainNameRole: |
| 48 | + return mAccounts.at(index.row()).domainName; |
| 49 | + case MagicDnsNameRole: |
| 50 | + return mAccounts.at(index.row()).magicDnsName; |
| 51 | + case UserIdRole: |
| 52 | + return mAccounts.at(index.row()).userId; |
| 53 | + case UserNameRole: |
| 54 | + return mAccounts.at(index.row()).userName; |
| 55 | + case LoginNameRole: |
| 56 | + return mAccounts.at(index.row()).loginName; |
| 57 | + case IsCurrentRole: |
| 58 | + return mAccounts.at(index.row()).isCurrent; |
| 59 | + default: |
| 60 | + return QStringLiteral("Invalid role"); |
| 61 | + } |
| 62 | +} |
| 63 | + |
| 64 | +const QVector<AccountData> &AccountModel::accounts() const |
| 65 | +{ |
| 66 | + return mAccounts; |
| 67 | +} |
| 68 | + |
| 69 | +void AccountModel::update(const QVector<AccountData> &accounts, const QString ¤tID) |
| 70 | +{ |
| 71 | + if (mAccounts.size() > accounts.size()) { |
| 72 | + beginRemoveRows(QModelIndex(), accounts.size(), mAccounts.size() - 1); |
| 73 | + mAccounts.erase(mAccounts.begin() + accounts.size(), mAccounts.end()); |
| 74 | + endRemoveRows(); |
| 75 | + } |
| 76 | + for (int i = 0; i < mAccounts.size(); ++i) { |
| 77 | + const QList<int> updatedRoles = updateRow(i, accounts[i], currentID); |
| 78 | + if (!updatedRoles.isEmpty()) { |
| 79 | + emit dataChanged(index(i), index(i), updatedRoles); |
| 80 | + } |
| 81 | + } |
| 82 | + if (mAccounts.size() < accounts.size()) { |
| 83 | + beginInsertRows(QModelIndex(), mAccounts.size(), accounts.size() - 1); |
| 84 | + for (int i = mAccounts.size(); i < accounts.size(); ++i) { |
| 85 | + mAccounts.append(accounts[i]); |
| 86 | + } |
| 87 | + endInsertRows(); |
| 88 | + } |
| 89 | +} |
| 90 | + |
| 91 | +QList<int> AccountModel::updateRow(int row, const AccountData &account, const QString ¤tID) |
| 92 | +{ |
| 93 | + QList<int> result; |
| 94 | + AccountData ¤t = mAccounts[row]; |
| 95 | + if (current.controlUrl != account.controlUrl) { |
| 96 | + current.controlUrl = account.controlUrl; |
| 97 | + result.append(ControlUrlRole); |
| 98 | + } |
| 99 | + if (current.id != account.id) { |
| 100 | + current.id = account.id; |
| 101 | + result.append(IdRole); |
| 102 | + } |
| 103 | + if (current.key != account.key) { |
| 104 | + current.key = account.key; |
| 105 | + result.append(KeyRole); |
| 106 | + } |
| 107 | + if (current.name != account.name) { |
| 108 | + current.name = account.name; |
| 109 | + result.append(NameRole); |
| 110 | + } |
| 111 | + if (current.domainName != account.domainName) { |
| 112 | + current.domainName = account.domainName; |
| 113 | + result.append(DomainNameRole); |
| 114 | + } |
| 115 | + if (current.magicDnsName != account.magicDnsName) { |
| 116 | + current.magicDnsName = account.magicDnsName; |
| 117 | + result.append(MagicDnsNameRole); |
| 118 | + } |
| 119 | + if (current.userName != account.userName) { |
| 120 | + current.userName = account.userName; |
| 121 | + result.append(UserNameRole); |
| 122 | + } |
| 123 | + if (current.userId != account.userId) { |
| 124 | + current.userId = account.userId; |
| 125 | + result.append(UserIdRole); |
| 126 | + } |
| 127 | + if (current.loginName != account.loginName) { |
| 128 | + current.loginName = account.loginName; |
| 129 | + result.append(LoginNameRole); |
| 130 | + } |
| 131 | + const bool isCurrent = currentID == account.id; |
| 132 | + if (isCurrent != current.isCurrent) { |
| 133 | + current.isCurrent = isCurrent; |
| 134 | + result.append(IsCurrentRole); |
| 135 | + } |
| 136 | + return result; |
| 137 | +} |
0 commit comments