1/* 2 * Copyright 2009, Stephan A��mus <superstippi@gmx.de> 3 * All rights reserved. Distributed under the terms of the MIT License. 4 */ 5#ifndef UNZIP_ENGINE_H 6#define UNZIP_ENGINE_H 7 8 9#include <stdio.h> 10 11#include <Messenger.h> 12#include <String.h> 13 14#include "CommandPipe.h" 15#include "HashMap.h" 16#include "HashString.h" 17 18class ProgressReporter; 19 20 21class UnzipEngine : private BCommandPipe::LineReader { 22public: 23 UnzipEngine(ProgressReporter* reporter, 24 sem_id cancelSemaphore = -1); 25 virtual ~UnzipEngine(); 26 27 status_t SetTo(const char* pathToPackage, 28 const char* destinationFolder); 29 30 inline off_t BytesToUncompress() const 31 { return fBytesToUncompress; } 32 inline uint64 ItemsToUncompress() const 33 { return fItemsToUncompress; } 34 35 status_t UnzipPackage(); 36 37private: 38 // BCommandPipe::LineReader 39 friend class BCommandPipe; 40 41 virtual bool IsCanceled(); 42 virtual status_t ReadLine(const BString& line); 43 44 status_t _ReadLineListing(const BString& line); 45 status_t _ReadLineExtract(const BString& line); 46 47 void _UpdateProgress(const char* item, 48 const char* targetFolder); 49 50private: 51 BString fPackage; 52 BString fDestinationFolder; 53 bool fRetrievingListing; 54 55 typedef HashMap<HashString, off_t> EntrySizeMap; 56 EntrySizeMap fEntrySizeMap; 57 58 off_t fBytesToUncompress; 59 off_t fBytesUncompressed; 60 off_t fLastBytesUncompressed; 61 uint64 fItemsToUncompress; 62 uint64 fItemsUncompressed; 63 uint64 fLastItemsUncompressed; 64 65 ProgressReporter* fProgressReporter; 66 sem_id fCancelSemaphore; 67}; 68 69 70#endif // UNZIP_ENGINE_H 71