1 /*
2 SPDX-FileCopyrightText: 2021 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7 #include "directoryteamsmodel.h"
8 #include "discussions/discussions.h"
9 #include <KLocalizedString>
10
DirectoryTeamsModel(QObject * parent)11 DirectoryTeamsModel::DirectoryTeamsModel(QObject *parent)
12 : DirectoryBaseModel(parent)
13 {
14 }
15
16 DirectoryTeamsModel::~DirectoryTeamsModel() = default;
17
checkFullList()18 void DirectoryTeamsModel::checkFullList()
19 {
20 setHasFullList(mRoomsInfo.count() == mRoomsInfo.total());
21 }
22
rowCount(const QModelIndex & parent) const23 int DirectoryTeamsModel::rowCount(const QModelIndex &parent) const
24 {
25 Q_UNUSED(parent)
26 return mRoomsInfo.count();
27 }
28
hideColumns() const29 QList<int> DirectoryTeamsModel::hideColumns() const
30 {
31 return {TeamIdentifier, CreateTeamDateTime};
32 }
33
addMoreElements(const QJsonObject & obj)34 void DirectoryTeamsModel::addMoreElements(const QJsonObject &obj)
35 {
36 const int numberOfElement = mRoomsInfo.count();
37 mRoomsInfo.parseMoreRooms(obj, RoomsInfo::Directory);
38 beginInsertRows(QModelIndex(), numberOfElement, mRoomsInfo.count() - 1);
39 endInsertRows();
40 checkFullList();
41 }
42
parseElements(const QJsonObject & obj)43 void DirectoryTeamsModel::parseElements(const QJsonObject &obj)
44 {
45 if (rowCount() != 0) {
46 beginRemoveRows(QModelIndex(), 0, mRoomsInfo.count() - 1);
47 mRoomsInfo.clear();
48 endRemoveRows();
49 }
50 mRoomsInfo.parseRooms(obj, RoomsInfo::Directory);
51 if (!mRoomsInfo.isEmpty()) {
52 beginInsertRows(QModelIndex(), 0, mRoomsInfo.count() - 1);
53 endInsertRows();
54 }
55 checkFullList();
56 Q_EMIT totalChanged();
57 }
58
data(const QModelIndex & index,int role) const59 QVariant DirectoryTeamsModel::data(const QModelIndex &index, int role) const
60 {
61 if (index.row() < 0 || index.row() >= mRoomsInfo.count()) {
62 return {};
63 }
64 if (role != Qt::DisplayRole) {
65 return {};
66 }
67 const RoomInfo &roomInfo = mRoomsInfo.at(index.row());
68 const int col = index.column();
69 switch (static_cast<DirectoryTeamsRoles>(col)) {
70 case DirectoryTeamsRoles::TeamName:
71 return roomInfo.roomName();
72 case DirectoryTeamsRoles::RoomsCount:
73 return roomInfo.teamInfo().roomsCount();
74 case DirectoryTeamsRoles::TeamIdentifier:
75 return roomInfo.teamInfo().teamId();
76 case DirectoryTeamsRoles::CreateTeam:
77 return roomInfo.createdRoomDisplayDateTimeStr();
78 case DirectoryTeamsRoles::CreateTeamDateTime:
79 return roomInfo.createdRoom();
80 }
81 return {};
82 }
83
headerData(int section,Qt::Orientation orientation,int role) const84 QVariant DirectoryTeamsModel::headerData(int section, Qt::Orientation orientation, int role) const
85 {
86 if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
87 switch (static_cast<DirectoryTeamsRoles>(section)) {
88 case DirectoryTeamsModel::TeamName:
89 return i18n("Name");
90 case DirectoryTeamsRoles::RoomsCount:
91 return i18n("Rooms");
92 case DirectoryTeamsRoles::TeamIdentifier:
93 return i18n("Identifier");
94 case DirectoryTeamsRoles::CreateTeam:
95 return i18n("Created");
96 case DirectoryTeamsRoles::CreateTeamDateTime:
97 return {};
98 }
99 }
100 return {};
101 }
102
columnCount(const QModelIndex & parent) const103 int DirectoryTeamsModel::columnCount(const QModelIndex &parent) const
104 {
105 Q_UNUSED(parent)
106 return static_cast<int>(DirectoryTeamsModel::LastColumn) + 1;
107 }
108
total() const109 int DirectoryTeamsModel::total() const
110 {
111 return mRoomsInfo.total();
112 }
113