1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
/*
* SPDX-FileCopyrightText: 2012 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#pragma once
#include <KService>
#include <PackageKit/Details>
#include <PackageKit/Transaction>
#include <resources/AbstractResource.h>
#include <optional>
#include "PackageKitDependencies.h"
class PackageKitBackend;
class PackageKitResource : public AbstractResource
{
Q_OBJECT
Q_PROPERTY(QList<PackageKitDependency> dependencies READ dependencies NOTIFY dependenciesChanged)
public:
explicit PackageKitResource(QString packageName, QString summary, PackageKitBackend *parent);
QString packageName() const override;
QString name() const override;
QString comment() override;
QString longDescription() override;
QUrl homepage() override;
QVariant icon() const override;
bool hasCategory(const QString &category) const override;
QJsonArray licenses() override;
QString origin() const override;
QString section() override;
AbstractResource::Type type() const override;
quint64 size() override;
void fetchChangelog() override;
void fetchUpdateDetails() override;
QList<PackageState> addonsInformation() override;
State state() override;
QString installedVersion() const override;
QString availableVersion() const override;
QString author() const override
{
return {};
}
virtual QStringList allPackageNames() const;
QString installedPackageId() const;
QString availablePackageId() const;
void clearPackageIds()
{
m_packages.clear();
}
PackageKitBackend *backend() const;
static QString joinPackages(const QStringList &pkgids, const QString &_sep, const QString &shadowPackageName);
/**
* Critical packages are those that might render an installation unusable if removed
*/
virtual bool isCritical() const;
QString verifiedMessage() const override;
void invokeApplication() const override
{
}
bool canExecute() const override
{
return false;
}
QString sizeDescription() override;
QList<PackageKitDependency> dependencies();
QString sourceIcon() const override;
QDate releaseDate() const override
{
return {};
}
QStringList topObjects() const override;
QStringList bottomObjects() const override;
virtual QString changelog() const
{
return m_changelog;
}
bool extendsItself() const;
void runService(KService::Ptr service) const;
bool containsPackageId(const QString &pkgid) const;
Q_SIGNALS:
void dependenciesChanged();
public Q_SLOTS:
void addPackageId(PackageKit::Transaction::Info info, const QString &packageId, bool arch);
void setDetails(const PackageKit::Details &details);
void updateDetail(const QString &packageID,
const QStringList &updates,
const QStringList &obsoletes,
const QStringList &vendorUrls,
const QStringList &bugzillaUrls,
const QStringList &cveUrls,
PackageKit::Transaction::Restart restart,
const QString &updateText,
const QString &changelog,
PackageKit::Transaction::UpdateState state,
const QDateTime &issued,
const QDateTime &updated);
void failedFetchingDetails(PackageKit::Transaction::Error, const QString &msg);
protected:
PackageKit::Details m_details;
private:
void updatePackageIdForDependencies();
/** fetches details individually, it's better if done in batch, like for updates */
virtual void fetchDetails();
struct Ids {
QVector<QString> archPkgIds;
QVector<QString> nonarchPkgIds;
QString first() const
{
return !archPkgIds.isEmpty() ? archPkgIds.first() : nonarchPkgIds.first();
}
bool isEmpty() const
{
return archPkgIds.isEmpty() && nonarchPkgIds.isEmpty();
}
};
QMap<PackageKit::Transaction::Info, Ids> m_packages;
const QString m_summary;
const QString m_name;
QString m_changelog;
PackageKitDependencies m_dependencies;
static const QStringList s_topObjects;
static const QStringList s_bottomObjects;
};
|