1 /*
2 SPDX-FileCopyrightText: 2021 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7 #include "directoryusersmodel.h"
8 #include "discussions/discussions.h"
9 #include <KLocalizedString>
10
DirectoryUsersModel(QObject * parent)11 DirectoryUsersModel::DirectoryUsersModel(QObject *parent)
12 : DirectoryBaseModel(parent)
13 {
14 }
15
16 DirectoryUsersModel::~DirectoryUsersModel() = default;
17
checkFullList()18 void DirectoryUsersModel::checkFullList()
19 {
20 setHasFullList(mUsers.count() == mUsers.total());
21 }
22
rowCount(const QModelIndex & parent) const23 int DirectoryUsersModel::rowCount(const QModelIndex &parent) const
24 {
25 Q_UNUSED(parent)
26 return mUsers.count();
27 }
28
hideColumns() const29 QList<int> DirectoryUsersModel::hideColumns() const
30 {
31 return {UserId, JoinAtDateTime};
32 }
33
parseType() const34 Users::ParseType DirectoryUsersModel::parseType() const
35 {
36 return Users::ParseType::Directory;
37 }
38
addMoreElements(const QJsonObject & obj)39 void DirectoryUsersModel::addMoreElements(const QJsonObject &obj)
40 {
41 const int numberOfElement = mUsers.count();
42 mUsers.parseMoreUsers(obj, parseType());
43 beginInsertRows(QModelIndex(), numberOfElement, mUsers.count() - 1);
44 endInsertRows();
45 checkFullList();
46 }
47
parseElements(const QJsonObject & obj)48 void DirectoryUsersModel::parseElements(const QJsonObject &obj)
49 {
50 if (rowCount() != 0) {
51 beginRemoveRows(QModelIndex(), 0, mUsers.count() - 1);
52 mUsers.clear();
53 endRemoveRows();
54 }
55 mUsers.parseUsers(obj, parseType());
56 if (!mUsers.isEmpty()) {
57 beginInsertRows(QModelIndex(), 0, mUsers.count() - 1);
58 endInsertRows();
59 }
60 checkFullList();
61 Q_EMIT totalChanged();
62 }
63
data(const QModelIndex & index,int role) const64 QVariant DirectoryUsersModel::data(const QModelIndex &index, int role) const
65 {
66 if (index.row() < 0 || index.row() >= mUsers.count()) {
67 return {};
68 }
69 if (role != Qt::DisplayRole) {
70 return {};
71 }
72 const User &user = mUsers.at(index.row());
73 const int col = index.column();
74 switch (static_cast<DirectoryUsersRoles>(col)) {
75 case DirectoryUsersRoles::Name:
76 return user.name().isEmpty() ? user.userName() : user.name();
77 case DirectoryUsersRoles::Email:
78 return user.userEmailsInfo().email;
79 case DirectoryUsersRoles::JoinAt:
80 return user.createdAt().toString(); // TODO verify it
81 case DirectoryUsersRoles::JoinAtDateTime:
82 return user.createdAt();
83 case DirectoryUsersRoles::UserId:
84 return user.userId();
85 }
86 return {};
87 }
88
headerData(int section,Qt::Orientation orientation,int role) const89 QVariant DirectoryUsersModel::headerData(int section, Qt::Orientation orientation, int role) const
90 {
91 if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
92 switch (static_cast<DirectoryUsersRoles>(section)) {
93 case DirectoryUsersModel::Name:
94 return i18n("Name");
95 case DirectoryUsersModel::Email:
96 return i18n("Emails");
97 case DirectoryUsersModel::JoinAt:
98 return i18n("Join At");
99 case DirectoryUsersModel::JoinAtDateTime:
100 case DirectoryUsersModel::UserId:
101 return {};
102 }
103 }
104 return {};
105 }
106
columnCount(const QModelIndex & parent) const107 int DirectoryUsersModel::columnCount(const QModelIndex &parent) const
108 {
109 Q_UNUSED(parent)
110 return static_cast<int>(DirectoryUsersModel::LastColumn) + 1;
111 }
112
total() const113 int DirectoryUsersModel::total() const
114 {
115 return mUsers.total();
116 }
117