xref: /haiku/src/bin/pkgman/PackageManager.h (revision df2685d885f3b940bc04b1cf5f39511ce6750ddf)
13ac0de3bSIngo Weinhold /*
23ac0de3bSIngo Weinhold  * Copyright 2013, Haiku, Inc. All Rights Reserved.
33ac0de3bSIngo Weinhold  * Distributed under the terms of the MIT License.
43ac0de3bSIngo Weinhold  *
53ac0de3bSIngo Weinhold  * Authors:
63ac0de3bSIngo Weinhold  *		Ingo Weinhold <ingo_weinhold@gmx.de>
73ac0de3bSIngo Weinhold  */
83ac0de3bSIngo Weinhold #ifndef PACKAGE_MANAGER_H
93ac0de3bSIngo Weinhold #define PACKAGE_MANAGER_H
103ac0de3bSIngo Weinhold 
113ac0de3bSIngo Weinhold 
123ac0de3bSIngo Weinhold #include <ObjectList.h>
133ac0de3bSIngo Weinhold #include <package/Context.h>
143ac0de3bSIngo Weinhold #include <package/PackageDefs.h>
153ac0de3bSIngo Weinhold #include <package/PackageRoster.h>
163ac0de3bSIngo Weinhold #include <package/RepositoryConfig.h>
173ac0de3bSIngo Weinhold #include <package/solver/Solver.h>
183ac0de3bSIngo Weinhold #include <package/solver/SolverRepository.h>
193ac0de3bSIngo Weinhold 
203ac0de3bSIngo Weinhold #include "DecisionProvider.h"
213ac0de3bSIngo Weinhold #include "JobStateListener.h"
223ac0de3bSIngo Weinhold 
233ac0de3bSIngo Weinhold 
243ac0de3bSIngo Weinhold using namespace BPackageKit;
253ac0de3bSIngo Weinhold 
263ac0de3bSIngo Weinhold 
273ac0de3bSIngo Weinhold class PackageManager {
283ac0de3bSIngo Weinhold public:
293ac0de3bSIngo Weinhold 			struct Repository;
303ac0de3bSIngo Weinhold 			typedef BObjectList<Repository> RepositoryList;
313ac0de3bSIngo Weinhold 
323ac0de3bSIngo Weinhold public:
333ac0de3bSIngo Weinhold 								PackageManager(
343ac0de3bSIngo Weinhold 									BPackageInstallationLocation location,
353ac0de3bSIngo Weinhold 									bool addInstalledRepositories,
363ac0de3bSIngo Weinhold 									bool addOtherRepositories);
373ac0de3bSIngo Weinhold 								~PackageManager();
383ac0de3bSIngo Weinhold 
393ac0de3bSIngo Weinhold 			BSolver*			Solver() const
403ac0de3bSIngo Weinhold 									{ return fSolver; }
413ac0de3bSIngo Weinhold 
423ac0de3bSIngo Weinhold 			const BSolverRepository* SystemRepository() const
433ac0de3bSIngo Weinhold 									{ return &fSystemRepository; }
443ac0de3bSIngo Weinhold 			const BSolverRepository* CommonRepository() const
453ac0de3bSIngo Weinhold 									{ return &fCommonRepository; }
463ac0de3bSIngo Weinhold 			const BSolverRepository* HomeRepository() const
473ac0de3bSIngo Weinhold 									{ return &fHomeRepository; }
483ac0de3bSIngo Weinhold 			const BObjectList<BSolverRepository>& InstalledRepositories() const
493ac0de3bSIngo Weinhold 									{ return fInstalledRepositories; }
503ac0de3bSIngo Weinhold 			const RepositoryList& OtherRepositories() const
513ac0de3bSIngo Weinhold 									{ return fOtherRepositories; }
523ac0de3bSIngo Weinhold 
533ac0de3bSIngo Weinhold 			void				Install(const char* const* packages,
543ac0de3bSIngo Weinhold 									int packageCount);
55*df2685d8SIngo Weinhold 			void				Uninstall(const char* const* packages,
56*df2685d8SIngo Weinhold 									int packageCount);
573ac0de3bSIngo Weinhold 
583ac0de3bSIngo Weinhold private:
593ac0de3bSIngo Weinhold 			typedef BObjectList<BSolverPackage> PackageList;
603ac0de3bSIngo Weinhold 
613ac0de3bSIngo Weinhold private:
623ac0de3bSIngo Weinhold 			void				_HandleProblems();
633ac0de3bSIngo Weinhold 			void				_AnalyzeResult();
643ac0de3bSIngo Weinhold 			void				_PrintResult();
653ac0de3bSIngo Weinhold 			void				_ApplyPackageChanges();
663ac0de3bSIngo Weinhold 
673ac0de3bSIngo Weinhold private:
683ac0de3bSIngo Weinhold 			BPackageInstallationLocation fLocation;
693ac0de3bSIngo Weinhold 			BSolver*			fSolver;
703ac0de3bSIngo Weinhold 			BSolverRepository	fSystemRepository;
713ac0de3bSIngo Weinhold 			BSolverRepository	fCommonRepository;
723ac0de3bSIngo Weinhold 			BSolverRepository	fHomeRepository;
733ac0de3bSIngo Weinhold 			BObjectList<BSolverRepository> fInstalledRepositories;
743ac0de3bSIngo Weinhold 			RepositoryList		fOtherRepositories;
753ac0de3bSIngo Weinhold 			DecisionProvider	fDecisionProvider;
763ac0de3bSIngo Weinhold 			JobStateListener	fJobStateListener;
773ac0de3bSIngo Weinhold 			BContext			fContext;
783ac0de3bSIngo Weinhold 			PackageList			fPackagesToActivate;
793ac0de3bSIngo Weinhold 			PackageList			fPackagesToDeactivate;
803ac0de3bSIngo Weinhold };
813ac0de3bSIngo Weinhold 
823ac0de3bSIngo Weinhold 
833ac0de3bSIngo Weinhold struct PackageManager::Repository : public BSolverRepository {
843ac0de3bSIngo Weinhold 								Repository();
853ac0de3bSIngo Weinhold 
863ac0de3bSIngo Weinhold 			status_t			Init(BPackageRoster& roster, BContext& context,
873ac0de3bSIngo Weinhold 									const char* name);
883ac0de3bSIngo Weinhold 
893ac0de3bSIngo Weinhold 			const BRepositoryConfig& Config() const;
903ac0de3bSIngo Weinhold 
913ac0de3bSIngo Weinhold private:
923ac0de3bSIngo Weinhold 			BRepositoryConfig	fConfig;
933ac0de3bSIngo Weinhold };
943ac0de3bSIngo Weinhold 
953ac0de3bSIngo Weinhold 
963ac0de3bSIngo Weinhold #endif	// PACKAGE_MANAGER_H
97