File indexing completed on 2024-05-12 05:04:11

0001 // SPDX-FileCopyrightText: 2023 Rishi Kumar <rsi.dev17@gmail.com>
0002 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0003 
0004 #pragma once
0005 
0006 #include "reportinfo.h"
0007 
0008 #include <QtQml>
0009 
0010 class AdminAccountInfo;
0011 
0012 class ReportToolModel : public QAbstractListModel
0013 {
0014     Q_OBJECT
0015     QML_ELEMENT
0016 
0017     Q_PROPERTY(bool loading READ loading NOTIFY loadingChanged)
0018     Q_PROPERTY(QString moderationStatus READ moderationStatus WRITE setModerationStatus NOTIFY moderationStatusChanged)
0019     Q_PROPERTY(QString origin READ origin WRITE setOrigin NOTIFY originChanged)
0020 
0021 public:
0022     enum CustomRoles {
0023         ReportRole = Qt::UserRole + 1,
0024     };
0025 
0026     enum ReportAction {
0027         ResolveReport,
0028         UnresolveReport,
0029         AssignReport,
0030         UnassignReport,
0031     };
0032 
0033     explicit ReportToolModel(QObject *parent = nullptr);
0034 
0035     QVariant data(const QModelIndex &index, int role) const override;
0036     int rowCount(const QModelIndex &parent) const override;
0037     QHash<int, QByteArray> roleNames() const override;
0038 
0039     bool loading() const;
0040     void setLoading(bool loading);
0041 
0042     QUrlQuery buildQuery() const;
0043 
0044     QString moderationStatus() const;
0045     void setModerationStatus(const QString &moderationStatus);
0046 
0047     QString origin() const;
0048     void setOrigin(const QString &origin);
0049 
0050     void clear();
0051     void fetchSelectedAccountDetails();
0052 
0053     Q_INVOKABLE void resolveReport(const int row);
0054     Q_INVOKABLE void unresolveReport(const int row);
0055     Q_INVOKABLE void assignReport(const int row);
0056     Q_INVOKABLE void unassignReport(const int row);
0057     Q_INVOKABLE void updateReport(const int row, const QString &type, const QList<int> &ruleIds);
0058 
0059 Q_SIGNALS:
0060     void loadingChanged();
0061     void moderationStatusChanged();
0062     void originChanged();
0063 
0064 protected:
0065     void fetchSelectedAccountPosition();
0066     void fetchMore(const QModelIndex &parent) override;
0067     bool canFetchMore(const QModelIndex &parent) const override;
0068     void executeReportAction(const int row, ReportAction accountAction, const QJsonObject &extraArguments = {});
0069 
0070 private:
0071     void fillTimeline();
0072     bool m_loading = false;
0073     QString m_accountId;
0074     QString m_moderationStatus;
0075     QString m_targetAccountId;
0076     QList<std::shared_ptr<ReportInfo>> m_reports;
0077     std::shared_ptr<AdminAccountInfo> m_selectedAccount;
0078     QString m_origin;
0079     bool m_pagination = true;
0080     QUrl m_next;
0081 };