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