1/*
2 * Copyright 2002-2007, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _MIME_ASSOCIATED_TYPES_H
6#define _MIME_ASSOCIATED_TYPES_H
7
8
9#include <SupportDefs.h>
10
11#include <map>
12#include <set>
13#include <string>
14
15class BMessage;
16class BString;
17struct entry_ref;
18
19
20namespace BPrivate {
21namespace Storage {
22namespace Mime {
23
24
25class DatabaseLocation;
26class MimeSniffer;
27
28
29class AssociatedTypes {
30public:
31	AssociatedTypes(DatabaseLocation* databaseLocation,
32		MimeSniffer* mimeSniffer);
33	~AssociatedTypes();
34
35	status_t GetAssociatedTypes(const char *extension, BMessage *types);
36	status_t GuessMimeType(const char *filename, BString *result);
37	status_t GuessMimeType(const entry_ref *ref, BString *result);
38
39	status_t SetFileExtensions(const char *type, const BMessage *extensions);
40	status_t DeleteFileExtensions(const char *type);
41
42	void PrintToStream() const;
43private:
44	status_t AddAssociatedType(const char *extension, const char *type);
45	status_t RemoveAssociatedType(const char *extension, const char *type);
46
47	status_t BuildAssociatedTypesTable();
48
49	status_t ProcessType(const char *type);
50	std::string PrepExtension(const char *extension) const;
51
52	std::map<std::string, std::set<std::string> > fFileExtensions;	// mime type => set of associated file extensions
53	std::map<std::string, std::set<std::string> > fAssociatedTypes;	// file extension => set of associated mime types
54
55private:
56	DatabaseLocation*	fDatabaseLocation;
57	MimeSniffer*		fMimeSniffer;
58	bool				fHaveDoneFullBuild;
59};
60
61} // namespace Mime
62} // namespace Storage
63} // namespace BPrivate
64
65#endif	// _MIME_ASSOCIATED_TYPES_H
66