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