11556Srgrimes/*
21556Srgrimes * Copyright 2010, Haiku.
31556Srgrimes * Distributed under the terms of the MIT License.
41556Srgrimes *
51556Srgrimes * Authors:
61556Srgrimes *		Clemens Zeidler <haiku@clemens-zeidler.de>
71556Srgrimes */
81556Srgrimes#ifndef INDEX_SERVER_H
91556Srgrimes#define INDEX_SERVER_H
101556Srgrimes
111556Srgrimes
121556Srgrimes#include <Application.h>
131556Srgrimes#include <MessageRunner.h>
141556Srgrimes#include <VolumeRoster.h>
151556Srgrimes
161556Srgrimes#include <AddOnMonitorHandler.h>
171556Srgrimes#include <ObjectList.h>
181556Srgrimes
191556Srgrimes#include "IndexServerAddOn.h"
201556Srgrimes#include "VolumeWatcher.h"
211556Srgrimes
221556Srgrimes
231556Srgrimes#define DEBUG_INDEX_SERVER
241556Srgrimes#ifdef DEBUG_INDEX_SERVER
251556Srgrimes#include <stdio.h>
261556Srgrimes#	define STRACE(x...) printf(x)
271556Srgrimes#else
281556Srgrimes#	define STRACE(x...) ;
291556Srgrimes#endif
301556Srgrimes
311556Srgrimes
321556Srgrimesclass IndexServer;
3317987Speter
3417987Speter
351556Srgrimesclass VolumeObserverHandler : public BHandler {
361556Srgrimespublic:
371556Srgrimes								VolumeObserverHandler(IndexServer* indexServer);
381556Srgrimes			void				MessageReceived(BMessage *message);
391556Srgrimesprivate:
401556Srgrimes			IndexServer*		fIndexServer;
411556Srgrimes};
4217987Speter
4317987Speter
4417987Speterclass AnalyserMonitorHandler : public AddOnMonitorHandler {
4517987Speterpublic:
4617987Speter								AnalyserMonitorHandler(
4717987Speter									IndexServer* indexServer);
4817987Speter
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