haiku/src/servers/index/CatchUpManager.h

78 lines
1.6 KiB
C++

/*
* Copyright 2010, Haiku.
* Distributed under the terms of the MIT License.
*
* Authors:
* Clemens Zeidler <haiku@clemens-zeidler.de>
*/
#ifndef CATCH_UP_MANAGER_H
#define CATCH_UP_MANAGER_H
#include "AnalyserDispatcher.h"
#define DEBUG_CATCH_UP
#ifdef DEBUG_CATCH_UP
#include <stdio.h>
# define STRACE(x...) printf(x)
#else
# define STRACE(x...) ;
#endif
class CatchUpAnalyser : public AnalyserDispatcher {
public:
CatchUpAnalyser(const BVolume& volume,
time_t start, time_t end,
BHandler* manager);
void MessageReceived(BMessage *message);
void StartAnalysing();
void AnalyseEntry(const entry_ref& ref);
const BVolume& Volume() { return fVolume; }
private:
void _CatchUp();
void _WriteSyncSatus(bigtime_t syncTime);
BVolume fVolume;
time_t fStart;
time_t fEnd;
BHandler* fCatchUpManager;
};
typedef BObjectList<CatchUpAnalyser> CatchUpAnalyserList;
class CatchUpManager : public BHandler {
public:
CatchUpManager(const BVolume& volume);
~CatchUpManager();
void MessageReceived(BMessage *message);
//! Add analyser to the queue.
bool AddAnalyser(const FileAnalyser* analyser);
void RemoveAnalyser(const BString& name);
//! Spawn a CatchUpAnalyser and fill it with the analyser in the
//! queue
bool CatchUp();
//! Stop all catch up threads and put the analyser back into the
//! queue.
void Stop();
private:
BVolume fVolume;
FileAnalyserList fFileAnalyserQueue;
CatchUpAnalyserList fCatchUpAnalyserList;
};
#endif