1/*
2 * Copyright 2006, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
3 * All rights reserved. Distributed under the terms of the MIT License.
4 */
5#ifndef MIME_SNIFFER_ADDON_MANAGER_H
6#define MIME_SNIFFER_ADDON_MANAGER_H
7
8#include <List.h>
9#include <Locker.h>
10
11class BFile;
12class BMimeSnifferAddon;
13class BMimeType;
14
15namespace BPrivate {
16namespace Storage {
17namespace Mime {
18
19
20class MimeSnifferAddonManager {
21private:
22								MimeSnifferAddonManager();
23								~MimeSnifferAddonManager();
24
25public:
26	static	MimeSnifferAddonManager* Default();
27	static	status_t			CreateDefault();
28	static	void				DeleteDefault();
29
30			status_t			AddMimeSnifferAddon(BMimeSnifferAddon* addon);
31
32			size_t				MinimalBufferSize();
33
34			float				GuessMimeType(const char* fileName,
35									BMimeType* type);
36			float				GuessMimeType(BFile* file,
37									const void* buffer, int32 length,
38									BMimeType* type);
39
40private:
41			struct AddonReference;
42
43			status_t			_GetAddons(AddonReference**& references,
44									int32& count);
45			void				_PutAddons(AddonReference** references,
46									int32 count);
47
48			static MimeSnifferAddonManager*	sManager;
49
50			BLocker				fLock;
51			BList				fAddons;
52			size_t				fMinimalBufferSize;
53};
54
55}	// namespace Mime
56}	// namespace Storage
57}	// namespace BPrivate
58
59using BPrivate::Storage::Mime::MimeSnifferAddonManager;
60
61#endif	// MIME_SNIFFER_ADDON_MANAGER_H
62
63