haiku/src/servers/package/PackageManager.h

113 lines
3.0 KiB
C++

/*
* Copyright 2013-2014, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef PACKAGE_MANAGER_H
#define PACKAGE_MANAGER_H
#include <map>
#include <set>
#include <package/Context.h>
#include <package/Job.h>
#include <package/DaemonClient.h>
#include <package/manager/PackageManager.h>
using BPackageKit::BCommitTransactionResult;
using BPackageKit::BContext;
using BPackageKit::BPackageInstallationLocation;
using BPackageKit::BRepositoryConfig;
using BPackageKit::BSolverPackage;
using BSupportKit::BJob;
using BSupportKit::BJobStateListener;
using BPackageKit::BPrivate::BDaemonClient;
using BPackageKit::BManager::BPrivate::BPackageManager;
class Package;
class ProblemWindow;
class ResultWindow;
class Root;
class Volume;
class PackageManager : public BPackageManager,
private BPackageManager::InstallationInterface,
private BPackageManager::UserInteractionHandler {
public:
PackageManager(Root* root, Volume* volume);
~PackageManager();
void HandleUserChanges();
private:
// InstallationInterface
virtual void InitInstalledRepository(
InstalledRepository& repository);
virtual void ResultComputed(InstalledRepository& repository);
virtual status_t PrepareTransaction(Transaction& transaction);
virtual status_t CommitTransaction(Transaction& transaction,
BCommitTransactionResult& _result);
private:
// UserInteractionHandler
virtual void HandleProblems();
virtual void ConfirmChanges(bool fromMostSpecific);
virtual void Warn(status_t error, const char* format, ...);
virtual void ProgressPackageDownloadStarted(
const char* packageName);
virtual void ProgressPackageDownloadActive(
const char* packageName,
float completionPercentage,
off_t bytes, off_t totalBytes);
virtual void ProgressPackageDownloadComplete(
const char* packageName);
virtual void ProgressPackageChecksumStarted(
const char* title);
virtual void ProgressPackageChecksumComplete(
const char* title);
virtual void ProgressStartApplyingChanges(
InstalledRepository& repository);
virtual void ProgressTransactionCommitted(
InstalledRepository& repository,
const BCommitTransactionResult& result);
virtual void ProgressApplyingChangesDone(
InstalledRepository& repository);
private:
// BJobStateListener
virtual void JobFailed(BSupportKit::BJob* job);
virtual void JobAborted(BSupportKit::BJob* job);
private:
typedef std::set<BSolverPackage*> SolverPackageSet;
typedef std::map<Package*, BSolverPackage*> SolverPackageMap;
private:
bool _AddResults(InstalledRepository& repository,
ResultWindow* window);
BSolverPackage* _SolverPackageFor(Package* package) const;
void _InitGui();
private:
Root* fRoot;
Volume* fVolume;
SolverPackageMap fSolverPackages;
SolverPackageSet fPackagesAddedByUser;
SolverPackageSet fPackagesRemovedByUser;
ProblemWindow* fProblemWindow;
};
#endif // PACKAGE_MANAGER_H