152 lines
4.0 KiB
C
152 lines
4.0 KiB
C
|
#ifndef ALPM_MANAGER_H
|
||
|
#define ALPM_MANAGER_H
|
||
|
|
||
|
#include "package.h"
|
||
|
#include "database.h"
|
||
|
|
||
|
#include "network/aurquery.h"
|
||
|
|
||
|
#include <alpm.h>
|
||
|
|
||
|
#include <QNetworkAccessManager>
|
||
|
#include <QJsonArray>
|
||
|
#include <QFuture>
|
||
|
#include <QUuid>
|
||
|
|
||
|
#include <map>
|
||
|
#include <unordered_map>
|
||
|
|
||
|
namespace PackageManagement {
|
||
|
|
||
|
class Config;
|
||
|
|
||
|
class Manager : QObject
|
||
|
{
|
||
|
public:
|
||
|
Manager(const Config &config, QObject *parent = nullptr);
|
||
|
Manager(const Manager &other) = delete;
|
||
|
Manager(Manager &&other) = delete;
|
||
|
Manager &operator =(const Manager &other) = delete;
|
||
|
~Manager();
|
||
|
|
||
|
// configuration, signature level, etc
|
||
|
int sigLevel() const;
|
||
|
void setSigLevel(int sigLevel);
|
||
|
int localFileSigLevel() const;
|
||
|
void setLocalFileSigLevel(int sigLevel);
|
||
|
const QString &cacheDir() const;
|
||
|
void parsePacmanConfig();
|
||
|
void unregisterSyncDataBases();
|
||
|
|
||
|
// package lookup
|
||
|
AlpmPackage packageFromSyncDataBase(const QString &dbName, const QString &pkgName);
|
||
|
AlpmPackage packageFromSyncDataBases(const char *name) const;
|
||
|
AlpmOwnershipPackage packageFromFile(const char *fileName, bool verifyIntegrity = false);
|
||
|
bool isPackageIgnored(AlpmPackage package) const;
|
||
|
void setInstallReason(AlpmPackage package, alpm_pkgreason_t reason);
|
||
|
|
||
|
// database lookup
|
||
|
const AlpmDataBase &localDataBase() const;
|
||
|
AlpmDataBase &localDataBase();
|
||
|
const std::map<QString, AlpmDataBase> &syncDataBases() const;
|
||
|
const AlpmDataBase &dataBaseByName(const QString &dbName) const;
|
||
|
AlpmDataBase &dataBaseByName(const QString &dbName);
|
||
|
const UpdateLookupResults checkForUpgrades(const AlpmDataBase &db) const;
|
||
|
|
||
|
// asynchronous tasks
|
||
|
// void addTask();
|
||
|
|
||
|
// JSON serialization, handling JSON requests
|
||
|
QJsonObject basicRepoInfo(AlpmDataBase db, const QString &name, const QString &desc = QString()) const;
|
||
|
const QJsonArray &basicRepoInfo() const;
|
||
|
const QJsonArray packageInfo(const QJsonArray &pkgSelection, bool full = true);
|
||
|
const QJsonArray &groupInfo() const;
|
||
|
QJsonObject invokeUpgradeLookup(const QJsonObject &request) const;
|
||
|
const UpdateLookupResults checkForUpgrades(const AlpmDataBase &db, const QJsonValue &syncDbsValue) const;
|
||
|
|
||
|
private:
|
||
|
void cleanup();
|
||
|
|
||
|
const Config &m_config;
|
||
|
alpm_handle_t *m_handle;
|
||
|
int m_sigLevel;
|
||
|
int m_localFileSigLevel;
|
||
|
QString m_cacheDir;
|
||
|
QNetworkAccessManager m_networkAccessManager;
|
||
|
AurQuery m_aur;
|
||
|
mutable AlpmDataBase m_localDb;
|
||
|
mutable std::map<QString, AlpmDataBase> m_syncDbs;
|
||
|
mutable QJsonArray m_basicRepoInfo;
|
||
|
mutable QJsonArray m_packageInfo;
|
||
|
mutable QJsonArray m_groupInfo;
|
||
|
};
|
||
|
|
||
|
/*!
|
||
|
* \brief Returns the signature level.
|
||
|
*
|
||
|
* The signature level is read from the pacman config
|
||
|
* when parsePacmanConfig() is called or can be set
|
||
|
* manually using setSigLevel().
|
||
|
*/
|
||
|
inline int Manager::sigLevel() const
|
||
|
{
|
||
|
return m_sigLevel;
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* \brief Sets the signature level.
|
||
|
*/
|
||
|
inline void Manager::setSigLevel(int sigLevel)
|
||
|
{
|
||
|
m_sigLevel = sigLevel;
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* \brief Returns the signature level used when opening local files.
|
||
|
*
|
||
|
* The signature level is read from the pacman config
|
||
|
* when parsePacmanConfig() is called or can be set
|
||
|
* manually using setSigLevel().
|
||
|
*/
|
||
|
inline int Manager::localFileSigLevel() const
|
||
|
{
|
||
|
return m_localFileSigLevel;
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* \brief Sets the signature level used when opening local files.
|
||
|
*/
|
||
|
inline void Manager::setLocalFileSigLevel(int sigLevel)
|
||
|
{
|
||
|
m_localFileSigLevel = sigLevel;
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* \brief Gets the package with the specified \a name from one of the sync databases.
|
||
|
*/
|
||
|
inline AlpmPackage Manager::packageFromSyncDataBases(const char *name) const
|
||
|
{
|
||
|
return alpm_find_dbs_satisfier(m_handle, alpm_get_syncdbs(m_handle), name);
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* \brief Returns whether the specified \a package is ignored.
|
||
|
*/
|
||
|
inline bool Manager::isPackageIgnored(AlpmPackage package) const
|
||
|
{
|
||
|
return alpm_pkg_should_ignore(m_handle, package.ptr());
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* \brief Returns the cache directory.
|
||
|
* \remarks This is read from the Pacman configuration.
|
||
|
*/
|
||
|
inline const QString &Manager::cacheDir() const
|
||
|
{
|
||
|
return m_cacheDir;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
#endif // ALPM_MANAGER_H
|