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 };