File indexing completed on 2024-05-12 16:59:00
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 UpgradeTextRole, 0036 ExtendedRole, 0037 }; 0038 Q_ENUM(Roles) 0039 0040 explicit UpdateModel(QObject *parent = nullptr); 0041 ~UpdateModel() override; 0042 0043 QVariant data(const QModelIndex &index, int role) const override; 0044 Qt::ItemFlags flags(const QModelIndex &index) const override; 0045 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0046 0047 bool setData(const QModelIndex &index, const QVariant &value, int role) override; 0048 void setResources(const QList<AbstractResource *> &res); 0049 UpdateItem *itemFromIndex(const QModelIndex &index) const; 0050 0051 void checkResources(const QList<AbstractResource *> &resource, bool checked); 0052 QHash<int, QByteArray> roleNames() const override; 0053 0054 bool hasUpdates() const; 0055 0056 /// all upgradeable packages 0057 int totalUpdatesCount() const; 0058 0059 /// packages marked to upgrade 0060 int toUpdateCount() const; 0061 0062 Q_SCRIPTABLE void fetchUpdateDetails(int row); 0063 0064 QString updateSize() const; 0065 0066 ResourcesUpdatesModel *backend() const; 0067 0068 public Q_SLOTS: 0069 void checkAll(); 0070 void uncheckAll(); 0071 0072 void setBackend(ResourcesUpdatesModel *updates); 0073 0074 Q_SIGNALS: 0075 void hasUpdatesChanged(bool hasUpdates); 0076 void toUpdateChanged(); 0077 void updateSizeChanged(); 0078 0079 private: 0080 void resourceDataChanged(AbstractResource *res, const QVector<QByteArray> &properties); 0081 void integrateChangelog(const QString &changelog); 0082 QModelIndex indexFromItem(UpdateItem *item) const; 0083 UpdateItem *itemFromResource(AbstractResource *res); 0084 void resourceHasProgressed(AbstractResource *res, qreal progress, AbstractBackendUpdater::State state); 0085 void activityChanged(); 0086 0087 QTimer *const m_updateSizeTimer; 0088 QVector<UpdateItem *> m_updateItems; 0089 ResourcesUpdatesModel *m_updates; 0090 QList<AbstractResource *> m_resources; 0091 };