repoindex/alpm/alpmdatabase.h

85 lines
1.9 KiB
C++

#ifndef ALPM_DATABASE_H
#define ALPM_DATABASE_H
#include "./repository.h"
#include <QJsonArray>
#include <QMutex>
#include <QFuture>
#include <memory>
QT_FORWARD_DECLARE_CLASS(QNetworkRequest)
namespace RepoIndex {
class AlpmPackage;
class AlpmDatabase;
class LoadPackage;
class AlpmPackageLoader : public PackageLoader
{
public:
AlpmPackageLoader(AlpmDatabase *db, PackageOrigin origin);
private:
QList<QPair<QString, QList<QByteArray> > > m_descriptions;
};
class AlpmDatabase : public Repository
{
friend class AlpmPackageLoader;
public:
explicit AlpmDatabase(const QString &name, const QString &dbPath, RepositoryUsage usage, SignatureLevel sigLevel, uint32 index = invalidIndex, QObject *parent = nullptr);
AlpmPackageLoader *init();
RepositoryType type() const;
PackageDetailAvailability requestsRequired(PackageDetail packageDetail) const;
// database meta data
const QString &databasePath() const;
void setDatabasePath(const QString &dbPath);
// updating/refreshing
void downloadDatabase(const QString &targetDir, bool filesDatabase = true);
void refresh(const QString &targetDir);
signals:
void initiated();
protected:
std::unique_ptr<Package> emptyPackage();
private slots:
void databaseDownloadFinished();
private:
void loadDescriptions(QList<QPair<QString, QList<QByteArray> > > &descriptions);
QNetworkRequest regularDatabaseRequest();
QNetworkRequest filesDatabaseRequest();
QString m_dbPath;
QString m_downloadTargetDir;
};
/*!
* \brief Returns the path of the database directory/file.
*/
inline const QString &AlpmDatabase::databasePath() const
{
return m_dbPath;
}
/*!
* \brief Sets the path of the database directory/file.
* \remarks Does not invoke reinitialization using the new path.
*/
inline void AlpmDatabase::setDatabasePath(const QString &dbPath)
{
m_dbPath = dbPath;
}
} // namespace Alpm
#endif // ALPM_DATABASE_H