File indexing completed on 2024-05-12 05:02:03

0001 /*
0002    SPDX-FileCopyrightText: 2021-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "admininvitemodel.h"
0008 #include <KLocalizedString>
0009 #include <QDateTime>
0010 
0011 AdminInviteModel::AdminInviteModel(QObject *parent)
0012     : QAbstractListModel(parent)
0013 {
0014 }
0015 
0016 AdminInviteModel::~AdminInviteModel() = default;
0017 
0018 int AdminInviteModel::rowCount(const QModelIndex &parent) const
0019 {
0020     if (parent.isValid()) {
0021         return 0; // flat model
0022     }
0023     return mAdminInvites.count();
0024 }
0025 
0026 QVariant AdminInviteModel::headerData(int section, Qt::Orientation orientation, int role) const
0027 {
0028     if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
0029         switch (static_cast<AdminInviteRoles>(section)) {
0030         case AdminInviteModel::UserIdentifier:
0031         case AdminInviteModel::RoomId:
0032         case AdminInviteModel::CreateAt:
0033             break;
0034         case AdminInviteModel::Identifier:
0035             return i18n("Token");
0036         case AdminInviteModel::CreateAtStr:
0037             return i18n("Created at");
0038         case AdminInviteModel::Uses:
0039             return i18n("Uses");
0040         case AdminInviteModel::MaxUses:
0041             return i18n("Uses left");
0042         case AdminInviteModel::Expire:
0043             return i18n("Expiration");
0044         }
0045     }
0046     return {};
0047 }
0048 
0049 int AdminInviteModel::columnCount(const QModelIndex &parent) const
0050 {
0051     Q_UNUSED(parent)
0052     constexpr int val = static_cast<int>(AdminInviteModel::LastColumn) + 1;
0053     return val;
0054 }
0055 
0056 const QVector<InviteInfo> &AdminInviteModel::adminInvites() const
0057 {
0058     return mAdminInvites;
0059 }
0060 
0061 void AdminInviteModel::clear()
0062 {
0063     if (!mAdminInvites.isEmpty()) {
0064         beginResetModel();
0065         mAdminInvites.clear();
0066         endResetModel();
0067     }
0068 }
0069 
0070 void AdminInviteModel::setAdminInvites(const QVector<InviteInfo> &newAdminInvites)
0071 {
0072     clear();
0073     if (!newAdminInvites.isEmpty()) {
0074         beginInsertRows(QModelIndex(), 0, newAdminInvites.count() - 1);
0075         mAdminInvites = newAdminInvites;
0076         endInsertRows();
0077     }
0078 }
0079 
0080 QVariant AdminInviteModel::data(const QModelIndex &index, int role) const
0081 {
0082     if (index.row() < 0 || index.row() >= mAdminInvites.count()) {
0083         return {};
0084     }
0085     if (role != Qt::DisplayRole) {
0086         return {};
0087     }
0088 
0089     const InviteInfo &inviteInfo = mAdminInvites.at(index.row());
0090     const int col = index.column();
0091     switch (col) {
0092     case AdminInviteModel::UserIdentifier:
0093         return inviteInfo.userIdentifier();
0094     case AdminInviteModel::Identifier:
0095         return inviteInfo.identifier();
0096     case AdminInviteModel::RoomId:
0097         return inviteInfo.roomId();
0098     case AdminInviteModel::CreateAt:
0099         return inviteInfo.createDateTime();
0100     case AdminInviteModel::CreateAtStr:
0101         return inviteInfo.createDateTime().toString();
0102     case AdminInviteModel::Uses:
0103         return inviteInfo.uses();
0104     case AdminInviteModel::MaxUses:
0105         return inviteInfo.maxUses();
0106     case AdminInviteModel::Expire:
0107         return expireInvitation(inviteInfo);
0108     }
0109     return {};
0110 }
0111 
0112 QString AdminInviteModel::expireInvitation(const InviteInfo &inviteInfo) const
0113 {
0114     if (inviteInfo.expireDateTime() > QDateTime::currentDateTime()) {
0115         return i18n("Expire in %1 days", QDateTime::currentDateTime().daysTo(inviteInfo.expireDateTime()));
0116     } else {
0117         return i18n("Expired");
0118     }
0119 }
0120 
0121 void AdminInviteModel::removeInvite(const QString &identifier)
0122 {
0123     const int roomCount = mAdminInvites.count();
0124     for (int i = 0; i < roomCount; ++i) {
0125         if (mAdminInvites.at(i).identifier() == identifier) {
0126             beginRemoveRows(QModelIndex(), i, i);
0127             mAdminInvites.removeAt(i);
0128             endRemoveRows();
0129             break;
0130         }
0131     }
0132 }
0133 
0134 #include "moc_admininvitemodel.cpp"