File indexing completed on 2024-06-02 05:34:37
0001 /* 0002 * SPDX-FileCopyrightText: 2013 Lukas Appelhans <l.appelhans@gmx.de> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 #pragma once 0007 0008 #include "PackageKitBackend.h" 0009 #include <PackageKit/Transaction> 0010 #include <resources/AbstractBackendUpdater.h> 0011 0012 class SystemUpgrade; 0013 0014 struct EulaHandling { 0015 std::function<PackageKit::Transaction *()> proceedFunction; 0016 bool request = false; 0017 }; 0018 EulaHandling handleEula(const QString &eulaID, const QString &licenseAgreement); 0019 int percentageWithStatus(PackageKit::Transaction::Status status, uint percentage); 0020 0021 class PackageKitUpdater : public AbstractBackendUpdater 0022 { 0023 Q_OBJECT 0024 public: 0025 explicit PackageKitUpdater(PackageKitBackend *parent = nullptr); 0026 ~PackageKitUpdater() override; 0027 0028 void prepare() override; 0029 void checkFreeSpace(); 0030 0031 bool hasUpdates() const override; 0032 qreal progress() const override; 0033 0034 void setProgressing(bool progressing); 0035 0036 void removeResources(const QList<AbstractResource *> &resources) override; 0037 void addResources(const QList<AbstractResource *> &resources) override; 0038 QList<AbstractResource *> toUpdate() const override; 0039 bool isMarked(AbstractResource *resource) const override; 0040 QDateTime lastUpdate() const override; 0041 bool isCancelable() const override; 0042 bool isProgressing() const override; 0043 void fetchChangelog() const override; 0044 double updateSize() const override; 0045 quint64 downloadSpeed() const override; 0046 0047 void proceed() override; 0048 void setOfflineUpdates(bool use) override; 0049 void setDistroUpgrade(const AppStream::Release &release); 0050 void clearDistroUpgrade(); 0051 bool isDistroUpgrade() const; 0052 0053 public Q_SLOTS: 0054 /// must be implemented if ever isCancelable is true 0055 void cancel() override; 0056 void start() override; 0057 0058 private Q_SLOTS: 0059 void errorFound(PackageKit::Transaction::Error err, const QString &error); 0060 void mediaChange(PackageKit::Transaction::MediaType media, const QString &type, const QString &text); 0061 void eulaRequired(const QString &eulaID, const QString &packageID, const QString &vendor, const QString &licenseAgreement); 0062 void finished(PackageKit::Transaction::Exit exit, uint); 0063 void cancellableChanged(); 0064 void percentageChanged(); 0065 void updateDetail(const QString &packageID, 0066 const QStringList &updates, 0067 const QStringList &obsoletes, 0068 const QStringList &vendorUrls, 0069 const QStringList &bugzillaUrls, 0070 const QStringList &cveUrls, 0071 PackageKit::Transaction::Restart restart, 0072 const QString &updateText, 0073 const QString &changelog, 0074 PackageKit::Transaction::UpdateState state, 0075 const QDateTime &issued, 0076 const QDateTime &updated); 0077 void packageResolved(PackageKit::Transaction::Info info, const QString &packageId); 0078 void repoSignatureRequired(const QString &packageID, 0079 const QString &repoName, 0080 const QString &keyUrl, 0081 const QString &keyUserid, 0082 const QString &keyId, 0083 const QString &keyFingerprint, 0084 const QString &keyTimestamp, 0085 PackageKit::Transaction::SigType type); 0086 0087 private: 0088 void processProceedFunction(); 0089 void itemProgress(const QString &itemID, PackageKit::Transaction::Status status, uint percentage); 0090 void fetchLastUpdateTime(); 0091 void lastUpdateTimeReceived(QDBusPendingCallWatcher *w); 0092 void setupTransaction(PackageKit::Transaction::TransactionFlags flags); 0093 bool useOfflineUpdates() const; 0094 0095 QSet<QString> involvedPackages(const QSet<AbstractResource *> &packages) const; 0096 QSet<AbstractResource *> packagesForPackageId(const QSet<QString> &packages) const; 0097 0098 QPointer<PackageKit::Transaction> m_transaction; 0099 PackageKitBackend *const m_backend; 0100 QSet<AbstractResource *> m_toUpgrade; 0101 QSet<AbstractResource *> m_allUpgradeable; 0102 bool m_isCancelable; 0103 bool m_isProgressing; 0104 bool m_useOfflineUpdates = false; 0105 int m_percentage; 0106 QDateTime m_lastUpdate; 0107 QMap<PackageKit::Transaction::Info, QStringList> m_packagesModified; 0108 QVector<std::function<PackageKit::Transaction *()>> m_proceedFunctions; 0109 0110 SystemUpgrade *m_upgrade = nullptr; 0111 };