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