xref: /haiku/headers/os/package/PackageRoster.h (revision b84574958d92055d2e33c26e1f2d43d48c9ed50c)
1 /*
2  * Copyright 2011-2014, Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _PACKAGE__PACKAGE_ROSTER_H_
6 #define _PACKAGE__PACKAGE_ROSTER_H_
7 
8 
9 #include <Entry.h>
10 #include <FindDirectory.h>
11 #include <Path.h>
12 
13 #include <package/PackageDefs.h>
14 
15 
16 class BStringList;
17 
18 
19 namespace BPackageKit {
20 
21 
22 struct BRepositoryConfigVisitor {
23 	virtual ~BRepositoryConfigVisitor()
24 	{
25 	}
26 
27 	virtual status_t operator()(const BEntry& entry) = 0;
28 };
29 
30 
31 class BInstallationLocationInfo;
32 class BPackageInfoSet;
33 class BRepositoryCache;
34 class BRepositoryConfig;
35 class BPackageInfo;
36 
37 
38 // watchable events
39 enum {
40 	B_WATCH_PACKAGE_INSTALLATION_LOCATIONS	= 0x0001,
41 		// de-/activation of packages in standard installation locations
42 };
43 
44 // notification message "event" field values
45 enum {
46 	B_INSTALLATION_LOCATION_PACKAGES_CHANGED,
47 		// "location": int32
48 		//		the installation location
49 		//		(B_PACKAGE_INSTALLATION_LOCATION_{SYSTEM,HOME}
50 		// "change count": int64
51 		//		the installation location change count
52 };
53 
54 
55 class BPackageRoster {
56 public:
57 								BPackageRoster();
58 								~BPackageRoster();
59 
60 			bool				IsRebootNeeded();
61 
62 			status_t			GetCommonRepositoryCachePath(BPath* path,
63 									bool create = false) const;
64 			status_t			GetUserRepositoryCachePath(BPath* path,
65 									bool create = false) const;
66 
67 			status_t			GetCommonRepositoryConfigPath(BPath* path,
68 									bool create = false) const;
69 			status_t			GetUserRepositoryConfigPath(BPath* path,
70 									bool create = false) const;
71 
72 			status_t			GetRepositoryNames(BStringList& names);
73 
74 			status_t			VisitCommonRepositoryConfigs(
75 									BRepositoryConfigVisitor& visitor);
76 			status_t			VisitUserRepositoryConfigs(
77 									BRepositoryConfigVisitor& visitor);
78 
79 			status_t			GetRepositoryCache(const BString& name,
80 									BRepositoryCache* repositoryCache);
81 			status_t			GetRepositoryConfig(const BString& name,
82 									BRepositoryConfig* repositoryConfig);
83 
84 			status_t			GetInstallationLocationInfo(
85 									BPackageInstallationLocation location,
86 									BInstallationLocationInfo& _info);
87 			status_t			GetActivePackages(
88 									BPackageInstallationLocation location,
89 									BPackageInfoSet& packageInfos);
90 
91 			status_t			IsPackageActive(
92 									BPackageInstallationLocation location,
93 									const BPackageInfo info, bool* active);
94 
95 			status_t			StartWatching(const BMessenger& target,
96 									uint32 eventMask);
97 			status_t			StopWatching(const BMessenger& target);
98 
99 private:
100 			status_t			_GetRepositoryPath(BPath* path, bool create,
101 									directory_which whichDir) const;
102 			status_t			_VisitRepositoryConfigs(const BPath& path,
103 									BRepositoryConfigVisitor& visitor);
104 };
105 
106 
107 }	// namespace BPackageKit
108 
109 
110 #endif // _PACKAGE__PACKAGE_ROSTER_H_
111