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