File indexing completed on 2024-05-12 05:29:06
0001 /* 0002 * SPDX-FileCopyrightText: 2011 Jonathan Thomas <echidnaman@kubuntu.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #pragma once 0008 0009 #include "discovercommon_export.h" 0010 #include "resources/AbstractBackendUpdater.h" 0011 #include <QAbstractListModel> 0012 0013 class QTimer; 0014 class ResourcesUpdatesModel; 0015 class AbstractResource; 0016 class UpdateItem; 0017 0018 class DISCOVERCOMMON_EXPORT UpdateModel : public QAbstractListModel 0019 { 0020 Q_OBJECT 0021 Q_PROPERTY(ResourcesUpdatesModel *backend READ backend WRITE setBackend) 0022 Q_PROPERTY(bool hasUpdates READ hasUpdates NOTIFY hasUpdatesChanged) 0023 Q_PROPERTY(int toUpdateCount READ toUpdateCount NOTIFY toUpdateChanged) 0024 Q_PROPERTY(int totalUpdatesCount READ totalUpdatesCount NOTIFY hasUpdatesChanged) 0025 Q_PROPERTY(QString updateSize READ updateSize NOTIFY updateSizeChanged) 0026 public: 0027 enum Roles { 0028 SizeRole = Qt::UserRole + 1, 0029 ResourceRole, 0030 ResourceProgressRole, 0031 ResourceStateRole, 0032 SectionResourceProgressRole, 0033 ChangelogRole, 0034 SectionRole, 0035 ExtendedRole, 0036 }; 0037 Q_ENUM(Roles) 0038 0039 explicit UpdateModel(QObject *parent = nullptr); 0040 ~UpdateModel() override; 0041 0042 QVariant data(const QModelIndex &index, int role) const override; 0043 Qt::ItemFlags flags(const QModelIndex &index) const override; 0044 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0045 0046 bool setData(const QModelIndex &index, const QVariant &value, int role) override; 0047 void setResources(const QList<AbstractResource *> &res); 0048 UpdateItem *itemFromIndex(const QModelIndex &index) const; 0049 0050 void checkResources(const QList<AbstractResource *> &resource, bool checked); 0051 QHash<int, QByteArray> roleNames() const override; 0052 0053 bool hasUpdates() const; 0054 0055 /// all upgradeable packages 0056 int totalUpdatesCount() const; 0057 0058 /// packages marked to upgrade 0059 int toUpdateCount() const; 0060 0061 Q_SCRIPTABLE void fetchUpdateDetails(int row); 0062 0063 QString updateSize() const; 0064 0065 ResourcesUpdatesModel *backend() const; 0066 void setBackend(ResourcesUpdatesModel *); 0067 0068 public Q_SLOTS: 0069 void checkAll(); 0070 void uncheckAll(); 0071 0072 Q_SIGNALS: 0073 void hasUpdatesChanged(bool hasUpdates); 0074 void toUpdateChanged(); 0075 void updateSizeChanged(); 0076 0077 private: 0078 void resourceDataChanged(AbstractResource *res, const QVector<QByteArray> &properties); 0079 void integrateChangelog(const QString &changelog); 0080 QModelIndex indexFromItem(UpdateItem *item) const; 0081 UpdateItem *itemFromResource(AbstractResource *res); 0082 void resourceHasProgressed(AbstractResource *res, qreal progress, AbstractBackendUpdater::State state); 0083 void activityChanged(); 0084 0085 QTimer *const m_updateSizeTimer; 0086 QVector<UpdateItem *> m_updateItems; 0087 ResourcesUpdatesModel *m_updates; 0088 QList<AbstractResource *> m_resources; 0089 };