File: PackageKitResource.h

package info (click to toggle)
plasma-discover 6.5.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 14,288 kB
  • sloc: cpp: 30,576; xml: 2,710; python: 311; sh: 5; makefile: 5
file content (156 lines) | stat: -rw-r--r-- 4,434 bytes parent folder | download | duplicates (2)
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;
};