1/*
2 * Copyright 2010, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Clemens Zeidler <haiku@clemens-zeidler.de>
7 */
8#ifndef INDEX_SERVER_H
9#define INDEX_SERVER_H
10
11
12#include <Application.h>
13#include <MessageRunner.h>
14#include <VolumeRoster.h>
15
16#include <AddOnMonitorHandler.h>
17#include <ObjectList.h>
18
19#include "IndexServerAddOn.h"
20#include "VolumeWatcher.h"
21
22
23#define DEBUG_INDEX_SERVER
24#ifdef DEBUG_INDEX_SERVER
25#include <stdio.h>
26#	define STRACE(x...) printf(x)
27#else
28#	define STRACE(x...) ;
29#endif
30
31
32class IndexServer;
33
34
35class VolumeObserverHandler : public BHandler {
36public:
37								VolumeObserverHandler(IndexServer* indexServer);
38			void				MessageReceived(BMessage *message);
39private:
40			IndexServer*		fIndexServer;
41};
42
43
44class AnalyserMonitorHandler : public AddOnMonitorHandler {
45public:
46								AnalyserMonitorHandler(
47									IndexServer* indexServer);
48
49private:
50			void				AddOnEnabled(
51									const add_on_entry_info* entryInfo);
52			void				AddOnDisabled(
53									const add_on_entry_info* entryInfo);
54
55			IndexServer*		fIndexServer;
56};
57
58
59class IndexServer : public BApplication {
60public:
61								IndexServer();
62	virtual						~IndexServer();
63
64	virtual void				ReadyToRun();
65	virtual	void				MessageReceived(BMessage *message);
66
67	virtual	bool				QuitRequested();
68
69			void				AddVolume(const BVolume& volume);
70			void				RemoveVolume(const BVolume& volume);
71
72			void				RegisterAddOn(entry_ref ref);
73			void				UnregisterAddOn(entry_ref ref);
74
75			//! thread safe
76			FileAnalyser*		CreateFileAnalyser(const BString& name,
77									const BVolume& volume);
78private:
79			void				_StartWatchingVolumes();
80			void				_StopWatchingVolumes();
81
82			void				_SetupVolumeWatcher(VolumeWatcher* watcher);
83			FileAnalyser*		_SetupFileAnalyser(IndexServerAddOn* addon,
84									const BVolume& volume);
85			void				_StartWatchingAddOns();
86
87	inline	IndexServerAddOn*	_FindAddon(const BString& name);
88
89			BVolumeRoster		fVolumeRoster;
90			BObjectList<VolumeWatcher>		fVolumeWatcherList;
91			BObjectList<IndexServerAddOn>	fAddOnList;
92
93			VolumeObserverHandler	fVolumeObserverHandler;
94
95			AnalyserMonitorHandler	fAddOnMonitorHandler;
96			BMessageRunner*			fPulseRunner;
97};
98
99
100#endif
101