1//----------------------------------------------------------------------
2//  This software is part of the Haiku distribution and is covered
3//  by the MIT License.
4//---------------------------------------------------------------------
5/*!
6	\file SupportingApps.h
7	SupportingApps class declarations
8*/
9
10#ifndef _MIME_SUPPORTING_APPS_H
11#define _MIME_SUPPORTING_APPS_H
12
13#include <SupportDefs.h>
14
15#include <map>
16#include <set>
17#include <string>
18
19class BMessage;
20
21namespace BPrivate {
22namespace Storage {
23namespace Mime {
24
25
26class DatabaseLocation;
27
28
29class SupportingApps {
30public:
31	SupportingApps(DatabaseLocation* databaseLocation);
32	~SupportingApps();
33
34	status_t GetSupportingApps(const char *type, BMessage *apps);
35
36	status_t SetSupportedTypes(const char *app, const BMessage *types, bool fullSync);
37	status_t DeleteSupportedTypes(const char *app, bool fullSync);
38private:
39	status_t AddSupportingApp(const char *type, const char *app);
40	status_t RemoveSupportingApp(const char *type, const char *app);
41
42	status_t BuildSupportingAppsTable();
43
44	std::map<std::string, std::set<std::string> > fSupportedTypes;	// app sig => set of supported types
45	std::map<std::string, std::set<std::string> > fSupportingApps;	// mime type => set of supporting apps
46	std::map<std::string, std::set<std::string> > fStrandedTypes;	// app sig => set of no longer supported types for whom the
47																	//            given app is still listed as a supporting app
48
49private:
50	DatabaseLocation* fDatabaseLocation;
51	bool fHaveDoneFullBuild;
52};
53
54} // namespace Mime
55} // namespace Storage
56} // namespace BPrivate
57
58#endif	// _MIME_SUPPORTING_APPS_H
59