/* * Copyright (c) 2008 Stephan Aßmus . All rights reserved. * Distributed under the terms of the MIT/X11 license. * * Copyright (c) 1999 Mike Steed. You are free to use and distribute this software * as long as it is accompanied by it's documentation and this copyright notice. * The software comes with no warranty, etc. */ #ifndef SCANNER_H #define SCANNER_H #include #include #include #include #include #include "Snapshot.h" class BDirectory; using std::string; class Scanner: public BLooper { public: Scanner(BVolume* volume, BHandler* handler); virtual ~Scanner(); virtual void MessageReceived(BMessage* message); VolumeSnapshot* Snapshot() const { return fBusy ? NULL : fSnapshot; } void Refresh(FileInfo* startInfo = NULL); void Cancel(); bool IsBusy() const { return fBusy; } const char* Task() const { return fTask.c_str(); } float Progress() const { return min_c(1.0, fProgress); } FileInfo* CurrentDir() const { return fBusy ? NULL : fSnapshot->currentDir; } void ChangeDir(FileInfo* info) { fSnapshot->currentDir = info; } void SetDesiredPath(string &path); dev_t Device() const { return fVolume->Device(); } void RequestQuit(); private: void _RunScan(FileInfo *startInfo); FileInfo* _GetFileInfo(BDirectory* dir, FileInfo* parent); void _ChangeToDesired(); bool _DirectoryContains(FileInfo* currentDir, entry_ref* ref); BMessenger fListener; BMessage fDoneMessage; BMessage fProgressMessage; BVolume* fVolume; off_t fVolumeBytesInUse; off_t fVolumeBytesScanned; float fProgress; float fLastReport; VolumeSnapshot* fSnapshot; string fDesiredPath; string fTask; bool fBusy; bool fQuitRequested; VolumeSnapshot* fPreviousSnapshot; }; #endif // SCANNER_H