138 lines
3.0 KiB
C++
138 lines
3.0 KiB
C++
#ifndef PACKAGEMANAGEMENT_UPDATELOOKUP_H
|
|
#define PACKAGEMANAGEMENT_UPDATELOOKUP_H
|
|
|
|
#include "package.h"
|
|
|
|
#include <QObject>
|
|
#include <QJsonObject>
|
|
#include <QJsonArray>
|
|
#include <QFutureWatcher>
|
|
|
|
namespace PackageManagement {
|
|
|
|
class Manager;
|
|
class UpgradeLookup;
|
|
class UpgradeLookupProcess;
|
|
class PackageReply;
|
|
|
|
class UpgradeResult
|
|
{
|
|
public:
|
|
UpgradeResult(const Package *package, const QString &previousVersion);
|
|
const Package *package;
|
|
QString previousVersion;
|
|
QJsonObject json() const;
|
|
};
|
|
|
|
inline UpgradeResult::UpgradeResult(const Package *package, const QString &previousVersion) :
|
|
package(package),
|
|
previousVersion(previousVersion)
|
|
{}
|
|
|
|
class UpgradeLookupResults
|
|
{
|
|
public:
|
|
UpgradeLookupResults();
|
|
|
|
/*!
|
|
* \brief Indicates that there are no upgrade sources available.
|
|
*/
|
|
bool noSources;
|
|
|
|
/*!
|
|
* \brief Packages providing a software upgrade (new version).
|
|
*/
|
|
QList<UpgradeResult> newVersions;
|
|
|
|
/*!
|
|
* \brief Package upgrades only (new release).
|
|
*/
|
|
QList<UpgradeResult> newReleases;
|
|
|
|
/*!
|
|
* \brief Downgrades (older version in sync db).
|
|
*/
|
|
QList<UpgradeResult> downgrades;
|
|
|
|
/*!
|
|
* \brief Orphaned packages (could not be found in any of the sync dbs).
|
|
*/
|
|
QSet<const Package *> orphaned;
|
|
|
|
/*!
|
|
* \brief Warnings occured when checking for updates.
|
|
*/
|
|
QStringList warnings;
|
|
|
|
/*!
|
|
* \brief Errors occured when checking for updates.
|
|
*/
|
|
QStringList errors;
|
|
};
|
|
|
|
/*!
|
|
* \brief Constructs new update lookup results.
|
|
*/
|
|
inline UpgradeLookupResults::UpgradeLookupResults() :
|
|
noSources(false)
|
|
{}
|
|
|
|
class UpgradeLookupProcess : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit UpgradeLookupProcess(UpgradeLookup *upgradeLookup, const Repository *upgradeSource);
|
|
const UpgradeLookupResults &results() const;
|
|
|
|
signals:
|
|
void finished();
|
|
|
|
private slots:
|
|
void sourceReady();
|
|
void checkUpgrades();
|
|
|
|
private:
|
|
const Repository *m_toCheck;
|
|
const Repository *m_upgradeSource;
|
|
PackageReply *m_reply;
|
|
QFutureWatcher<void> *m_watcher;
|
|
UpgradeLookupResults m_results;
|
|
};
|
|
|
|
class UpgradeLookup : public QObject
|
|
{
|
|
Q_OBJECT
|
|
friend class UpgradeLookupProcess;
|
|
public:
|
|
explicit UpgradeLookup(const Manager &manager, const QJsonObject &request, QObject *parent = nullptr);
|
|
const Repository *toCheck() const;
|
|
|
|
signals:
|
|
void resultsAvailable(const QJsonValue &what, const QJsonValue &id, const QJsonValue &value);
|
|
|
|
private slots:
|
|
void processFinished();
|
|
|
|
private:
|
|
const QJsonObject m_request;
|
|
const Repository *m_toCheck;
|
|
unsigned int m_remainingProcesses;
|
|
bool m_firstFinished;
|
|
QSet<const Package *> m_orphanedPackages;
|
|
QJsonArray m_warningsArray;
|
|
QJsonArray m_errorsArray;
|
|
QJsonArray m_softwareUpdatesArray;
|
|
QJsonArray m_packageOnlyUpdatesArray;
|
|
QJsonArray m_downgradesArray;
|
|
QJsonArray m_orphanedPackagesArray;
|
|
};
|
|
|
|
inline const Repository *UpgradeLookup::toCheck() const
|
|
{
|
|
return m_toCheck;
|
|
}
|
|
|
|
} // namespace PackageManagement
|
|
|
|
#endif // PACKAGEMANAGEMENT_UPDATELOOKUP_H
|