File indexing completed on 2024-12-01 13:09:05
0001 /* 0002 SPDX-FileCopyrightText: 2023-2024 Laurent Montel <montel.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "moderationmodel.h" 0008 #include <KLocalizedString> 0009 0010 ModerationModel::ModerationModel(QObject *parent) 0011 : CustomBaseModel(parent) 0012 { 0013 } 0014 0015 ModerationModel::~ModerationModel() = default; 0016 0017 int ModerationModel::rowCount(const QModelIndex &parent) const 0018 { 0019 if (parent.isValid()) { 0020 return 0; // flat model 0021 } 0022 return mModerationInfos.count(); 0023 } 0024 0025 QVariant ModerationModel::headerData(int section, Qt::Orientation orientation, int role) const 0026 { 0027 if (role == Qt::DisplayRole && orientation == Qt::Horizontal) { 0028 switch (static_cast<ModerationInfoRoles>(section)) { 0029 case ModerationInfoRoles::Name: 0030 return i18n("Name"); 0031 case ModerationInfoRoles::UserId: 0032 case ModerationInfoRoles::MessageId: 0033 case ModerationInfoRoles::UserDeleted: 0034 return {}; 0035 case ModerationInfoRoles::Message: 0036 return i18n("Reported message"); 0037 case ModerationInfoRoles::UserName: 0038 return i18n("Username"); 0039 case ModerationInfoRoles::Reports: 0040 return i18n("Reports"); 0041 case ModerationInfoRoles::ReportDate: 0042 return i18n("Report date"); 0043 case ModerationInfoRoles::RoomName: 0044 return i18n("Room"); 0045 } 0046 } 0047 return {}; 0048 } 0049 0050 int ModerationModel::columnCount(const QModelIndex &parent) const 0051 { 0052 Q_UNUSED(parent) 0053 constexpr int val = static_cast<int>(ModerationInfoRoles::LastColumn) + 1; 0054 return val; 0055 } 0056 0057 QVariant ModerationModel::data(const QModelIndex &index, int role) const 0058 { 0059 if (index.row() < 0 || index.row() >= mModerationInfos.count()) { 0060 return {}; 0061 } 0062 if (role != Qt::DisplayRole) { 0063 return {}; 0064 } 0065 0066 const ModerationInfo &moderationInfo = mModerationInfos.at(index.row()); 0067 const int col = index.column(); 0068 switch (static_cast<ModerationInfoRoles>(col)) { 0069 case ModerationInfoRoles::UserId: 0070 return moderationInfo.userId(); 0071 case ModerationInfoRoles::Name: 0072 return moderationInfo.name(); 0073 case ModerationInfoRoles::Message: 0074 return moderationInfo.message(); 0075 case ModerationInfoRoles::UserName: 0076 return moderationInfo.userName(); 0077 case ModerationInfoRoles::MessageId: 0078 return moderationInfo.msgId(); 0079 case ModerationInfoRoles::Reports: 0080 return moderationInfo.count(); 0081 case ModerationInfoRoles::UserDeleted: 0082 return moderationInfo.isUserDeleted(); 0083 case ModerationInfoRoles::ReportDate: 0084 return moderationInfo.createAtDisplayDateTime(); 0085 case ModerationInfoRoles::RoomName: 0086 return moderationInfo.roomList().join(QLatin1Char(',')); 0087 } 0088 return {}; 0089 } 0090 0091 int ModerationModel::total() const 0092 { 0093 return mModerationInfos.count(); 0094 } 0095 0096 void ModerationModel::clear() 0097 { 0098 if (!mModerationInfos.isEmpty()) { 0099 beginResetModel(); 0100 mModerationInfos.clear(); 0101 endResetModel(); 0102 } 0103 } 0104 0105 void ModerationModel::parseElements(const QJsonObject &obj) 0106 { 0107 clear(); 0108 mModerationInfos.parseModerationInfos(obj); 0109 if (!mModerationInfos.isEmpty()) { 0110 beginInsertRows(QModelIndex(), 0, mModerationInfos.count() - 1); 0111 endInsertRows(); 0112 } 0113 checkFullList(); 0114 Q_EMIT totalChanged(); 0115 } 0116 0117 void ModerationModel::checkFullList() 0118 { 0119 setHasFullList(mModerationInfos.count() == mModerationInfos.total()); 0120 } 0121 0122 const ModerationInfos &ModerationModel::moderationInfos() const 0123 { 0124 return mModerationInfos; 0125 } 0126 0127 void ModerationModel::setModerationInfos(const ModerationInfos &newDeviceInfos) 0128 { 0129 clear(); 0130 if (!mModerationInfos.isEmpty()) { 0131 beginInsertRows(QModelIndex(), 0, mModerationInfos.count() - 1); 0132 mModerationInfos = newDeviceInfos; 0133 endInsertRows(); 0134 } 0135 } 0136 0137 void ModerationModel::addMoreElements(const QJsonObject &obj) 0138 { 0139 const int numberOfElement = mModerationInfos.count(); 0140 mModerationInfos.parseModerationInfos(obj); 0141 beginInsertRows(QModelIndex(), numberOfElement, mModerationInfos.count() - 1); 0142 endInsertRows(); 0143 checkFullList(); 0144 } 0145 0146 QList<int> ModerationModel::hideColumns() const 0147 { 0148 return {ModerationInfoRoles::UserDeleted, ModerationInfoRoles::UserId, ModerationInfoRoles::MessageId}; 0149 } 0150 0151 void ModerationModel::removeElement(const QString &identifier) 0152 { 0153 #if 0 0154 const int userCount = mModerationInfos.count(); 0155 for (int i = 0; i < userCount; ++i) { 0156 if (mModerationInfos.at(i).sessionId() == identifier) { 0157 beginRemoveRows(QModelIndex(), i, i); 0158 mModerationInfos.takeAt(i); 0159 mModerationInfos.setTotal(mModerationInfos.count()); // Update total 0160 endRemoveRows(); 0161 Q_EMIT totalChanged(); 0162 break; 0163 } 0164 } 0165 #endif 0166 } 0167 0168 #include "moc_moderationmodel.cpp"