xref: /haiku/src/bin/pkgman/PackageManager.h (revision a54a50b48e316421f2735e9c46219164e16dd8cd)
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:
293381a1bfSIngo Weinhold 			struct RemoteRepository;
303381a1bfSIngo Weinhold 			struct InstalledRepository;
313381a1bfSIngo Weinhold 			typedef BObjectList<RemoteRepository> RemoteRepositoryList;
323381a1bfSIngo Weinhold 			typedef BObjectList<InstalledRepository> InstalledRepositoryList;
333ac0de3bSIngo Weinhold 
348b26ef67SIngo Weinhold 			enum {
358b26ef67SIngo Weinhold 				ADD_INSTALLED_REPOSITORIES	= 0x01,
368b26ef67SIngo Weinhold 				ADD_REMOTE_REPOSITORIES		= 0x02,
37ce4f3676SIngo Weinhold 				REFRESH_REPOSITORIES		= 0x04,
388b26ef67SIngo Weinhold 			};
398b26ef67SIngo Weinhold 
403ac0de3bSIngo Weinhold public:
413ac0de3bSIngo Weinhold 								PackageManager(
423ac0de3bSIngo Weinhold 									BPackageInstallationLocation location,
438b26ef67SIngo Weinhold 									uint32 flags);
443ac0de3bSIngo Weinhold 								~PackageManager();
453ac0de3bSIngo Weinhold 
463ac0de3bSIngo Weinhold 			BSolver*			Solver() const
473ac0de3bSIngo Weinhold 									{ return fSolver; }
483ac0de3bSIngo Weinhold 
493381a1bfSIngo Weinhold 			const InstalledRepository* SystemRepository() const
503381a1bfSIngo Weinhold 									{ return fSystemRepository; }
513381a1bfSIngo Weinhold 			const InstalledRepository* CommonRepository() const
523381a1bfSIngo Weinhold 									{ return fCommonRepository; }
533381a1bfSIngo Weinhold 			const InstalledRepository* HomeRepository() const
543381a1bfSIngo Weinhold 									{ return fHomeRepository; }
553381a1bfSIngo Weinhold 			const InstalledRepositoryList& InstalledRepositories() const
563ac0de3bSIngo Weinhold 									{ return fInstalledRepositories; }
573381a1bfSIngo Weinhold 			const RemoteRepositoryList& OtherRepositories() const
583ac0de3bSIngo Weinhold 									{ return fOtherRepositories; }
593ac0de3bSIngo Weinhold 
603ac0de3bSIngo Weinhold 			void				Install(const char* const* packages,
613ac0de3bSIngo Weinhold 									int packageCount);
62df2685d8SIngo Weinhold 			void				Uninstall(const char* const* packages,
63df2685d8SIngo Weinhold 									int packageCount);
64a5999f6fSIngo Weinhold 			void				Update(const char* const* packages,
65a5999f6fSIngo Weinhold 									int packageCount);
663ac0de3bSIngo Weinhold 
673ac0de3bSIngo Weinhold private:
683ac0de3bSIngo Weinhold 			typedef BObjectList<BSolverPackage> PackageList;
693ac0de3bSIngo Weinhold 
703ac0de3bSIngo Weinhold private:
713ac0de3bSIngo Weinhold 			void				_HandleProblems();
723ac0de3bSIngo Weinhold 			void				_AnalyzeResult();
733ac0de3bSIngo Weinhold 			void				_PrintResult();
743ac0de3bSIngo Weinhold 			void				_ApplyPackageChanges();
753ac0de3bSIngo Weinhold 
763381a1bfSIngo Weinhold 			void				_ClonePackageFile(
773381a1bfSIngo Weinhold 									InstalledRepository* repository,
7890f9f139SIngo Weinhold 									const BString& fileName,
7990f9f139SIngo Weinhold 							 		const BEntry& entry) const;
8090f9f139SIngo Weinhold 			int32				_FindBasePackage(const PackageList& packages,
8190f9f139SIngo Weinhold 									const BPackageInfo& info) const;
8290f9f139SIngo Weinhold 
83*a54a50b4SIngo Weinhold 			void				_AddInstalledRepository(
84*a54a50b4SIngo Weinhold 									InstalledRepository* repository);
85*a54a50b4SIngo Weinhold 
863ac0de3bSIngo Weinhold private:
873ac0de3bSIngo Weinhold 			BPackageInstallationLocation fLocation;
883ac0de3bSIngo Weinhold 			BSolver*			fSolver;
893381a1bfSIngo Weinhold 			InstalledRepository* fSystemRepository;
903381a1bfSIngo Weinhold 			InstalledRepository* fCommonRepository;
913381a1bfSIngo Weinhold 			InstalledRepository* fHomeRepository;
923381a1bfSIngo Weinhold 			InstalledRepositoryList fInstalledRepositories;
933381a1bfSIngo Weinhold 			RemoteRepositoryList fOtherRepositories;
943ac0de3bSIngo Weinhold 			DecisionProvider	fDecisionProvider;
953ac0de3bSIngo Weinhold 			JobStateListener	fJobStateListener;
963ac0de3bSIngo Weinhold 			BContext			fContext;
973ac0de3bSIngo Weinhold 			PackageList			fPackagesToActivate;
983ac0de3bSIngo Weinhold 			PackageList			fPackagesToDeactivate;
993ac0de3bSIngo Weinhold };
1003ac0de3bSIngo Weinhold 
1013ac0de3bSIngo Weinhold 
1023381a1bfSIngo Weinhold struct PackageManager::RemoteRepository : public BSolverRepository {
1033381a1bfSIngo Weinhold 								RemoteRepository();
1043ac0de3bSIngo Weinhold 
1053ac0de3bSIngo Weinhold 			status_t			Init(BPackageRoster& roster, BContext& context,
106ce4f3676SIngo Weinhold 									const char* name, bool refresh);
1073ac0de3bSIngo Weinhold 
1083ac0de3bSIngo Weinhold 			const BRepositoryConfig& Config() const;
1093ac0de3bSIngo Weinhold 
1103ac0de3bSIngo Weinhold private:
1113ac0de3bSIngo Weinhold 			BRepositoryConfig	fConfig;
1123ac0de3bSIngo Weinhold };
1133ac0de3bSIngo Weinhold 
1143ac0de3bSIngo Weinhold 
1153381a1bfSIngo Weinhold struct PackageManager::InstalledRepository : public BSolverRepository {
116*a54a50b4SIngo Weinhold 								InstalledRepository(const char* name,
117*a54a50b4SIngo Weinhold 									BPackageInstallationLocation location,
118*a54a50b4SIngo Weinhold 									int32 priority);
119*a54a50b4SIngo Weinhold 
120*a54a50b4SIngo Weinhold 			BPackageInstallationLocation Location() const
121*a54a50b4SIngo Weinhold 									{ return fLocation; }
122*a54a50b4SIngo Weinhold 			const char*			InitialName() const
123*a54a50b4SIngo Weinhold 									{ return fInitialName; }
124*a54a50b4SIngo Weinhold 			int32				InitialPriority() const
125*a54a50b4SIngo Weinhold 									{ return fInitialPriority; }
1263381a1bfSIngo Weinhold 
1273381a1bfSIngo Weinhold 			void				DisablePackage(BSolverPackage* package);
1283381a1bfSIngo Weinhold 
1293381a1bfSIngo Weinhold private:
1303381a1bfSIngo Weinhold 			typedef BObjectList<BSolverPackage> PackageList;
1313381a1bfSIngo Weinhold 
1323381a1bfSIngo Weinhold private:
1333381a1bfSIngo Weinhold 			PackageList			fDisabledPackages;
134*a54a50b4SIngo Weinhold 			const char*			fInitialName;
135*a54a50b4SIngo Weinhold 			BPackageInstallationLocation fLocation;
136*a54a50b4SIngo Weinhold 			int32				fInitialPriority;
1373381a1bfSIngo Weinhold };
1383381a1bfSIngo Weinhold 
1393381a1bfSIngo Weinhold 
1403ac0de3bSIngo Weinhold #endif	// PACKAGE_MANAGER_H
141