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