1617be97dSIngo Weinhold /* 2617be97dSIngo Weinhold * Copyright 2013, Haiku, Inc. All Rights Reserved. 3617be97dSIngo Weinhold * Distributed under the terms of the MIT License. 4617be97dSIngo Weinhold * 5617be97dSIngo Weinhold * Authors: 6617be97dSIngo Weinhold * Ingo Weinhold <ingo_weinhold@gmx.de> 7617be97dSIngo Weinhold */ 8617be97dSIngo Weinhold #ifndef _COPY_ENGINE_H 9617be97dSIngo Weinhold #define _COPY_ENGINE_H 10617be97dSIngo Weinhold 11617be97dSIngo Weinhold 12617be97dSIngo Weinhold #include <stdarg.h> 13617be97dSIngo Weinhold 14*4cf3529cSIngo Weinhold #include <EntryOperationEngineBase.h> 15617be97dSIngo Weinhold 16617be97dSIngo Weinhold 17617be97dSIngo Weinhold class BFile; 18617be97dSIngo Weinhold class BNode; 19617be97dSIngo Weinhold 20617be97dSIngo Weinhold 21617be97dSIngo Weinhold namespace BPrivate { 22617be97dSIngo Weinhold 23617be97dSIngo Weinhold 24*4cf3529cSIngo Weinhold class BCopyEngine : public BEntryOperationEngineBase { 25617be97dSIngo Weinhold public: 26617be97dSIngo Weinhold class BController; 27617be97dSIngo Weinhold 28617be97dSIngo Weinhold enum { 29617be97dSIngo Weinhold COPY_RECURSIVELY = 0x01, 30617be97dSIngo Weinhold MERGE_EXISTING_DIRECTORIES = 0x02, 31617be97dSIngo Weinhold UNLINK_DESTINATION = 0x04, 32617be97dSIngo Weinhold }; 33617be97dSIngo Weinhold 34617be97dSIngo Weinhold public: 35617be97dSIngo Weinhold BCopyEngine(uint32 flags = 0); 36617be97dSIngo Weinhold ~BCopyEngine(); 37617be97dSIngo Weinhold 38617be97dSIngo Weinhold BController* Controller() const; 39617be97dSIngo Weinhold void SetController(BController* controller); 40617be97dSIngo Weinhold 41617be97dSIngo Weinhold uint32 Flags() const; 42617be97dSIngo Weinhold BCopyEngine& SetFlags(uint32 flags); 43617be97dSIngo Weinhold BCopyEngine& AddFlags(uint32 flags); 44617be97dSIngo Weinhold BCopyEngine& RemoveFlags(uint32 flags); 45617be97dSIngo Weinhold 46*4cf3529cSIngo Weinhold status_t CopyEntry(const Entry& sourceEntry, 47*4cf3529cSIngo Weinhold const Entry& destEntry); 48617be97dSIngo Weinhold 49617be97dSIngo Weinhold private: 50617be97dSIngo Weinhold status_t _CopyEntry(const char* sourcePath, 51617be97dSIngo Weinhold const char* destPath); 52617be97dSIngo Weinhold status_t _CopyFileData(const char* sourcePath, 53617be97dSIngo Weinhold BFile& source, const char* destPath, 54617be97dSIngo Weinhold BFile& destination); 55617be97dSIngo Weinhold status_t _CopyAttributes(const char* sourcePath, 56617be97dSIngo Weinhold BNode& source, const char* destPath, 57617be97dSIngo Weinhold BNode& destination); 58617be97dSIngo Weinhold 59617be97dSIngo Weinhold void _NotifyError(status_t error, const char* format, 60617be97dSIngo Weinhold ...); 61617be97dSIngo Weinhold void _NotifyErrorVarArgs(status_t error, 62617be97dSIngo Weinhold const char* format, va_list args); 63617be97dSIngo Weinhold status_t _HandleEntryError(const char* path, 64617be97dSIngo Weinhold status_t error, const char* format, ...); 65617be97dSIngo Weinhold status_t _HandleAttributeError(const char* path, 66617be97dSIngo Weinhold const char* attribute, uint32 attributeType, 67617be97dSIngo Weinhold status_t error, const char* format, ...); 68617be97dSIngo Weinhold 69617be97dSIngo Weinhold private: 70617be97dSIngo Weinhold BController* fController; 71617be97dSIngo Weinhold uint32 fFlags; 72617be97dSIngo Weinhold char* fBuffer; 73617be97dSIngo Weinhold size_t fBufferSize; 74617be97dSIngo Weinhold }; 75617be97dSIngo Weinhold 76617be97dSIngo Weinhold 77617be97dSIngo Weinhold class BCopyEngine::BController { 78617be97dSIngo Weinhold public: 79617be97dSIngo Weinhold BController(); 80617be97dSIngo Weinhold virtual ~BController(); 81617be97dSIngo Weinhold 82617be97dSIngo Weinhold virtual bool EntryStarted(const char* path); 83617be97dSIngo Weinhold virtual bool EntryFinished(const char* path, status_t error); 84617be97dSIngo Weinhold 85617be97dSIngo Weinhold virtual bool AttributeStarted(const char* path, 86617be97dSIngo Weinhold const char* attribute, 87617be97dSIngo Weinhold uint32 attributeType); 88617be97dSIngo Weinhold virtual bool AttributeFinished(const char* path, 89617be97dSIngo Weinhold const char* attribute, 90617be97dSIngo Weinhold uint32 attributeType, status_t error); 91617be97dSIngo Weinhold 92617be97dSIngo Weinhold virtual void ErrorOccurred(const char* message, 93617be97dSIngo Weinhold status_t error); 94617be97dSIngo Weinhold }; 95617be97dSIngo Weinhold 96617be97dSIngo Weinhold 97617be97dSIngo Weinhold } // namespace BPrivate 98617be97dSIngo Weinhold 99617be97dSIngo Weinhold 100617be97dSIngo Weinhold using ::BPrivate::BCopyEngine; 101617be97dSIngo Weinhold 102617be97dSIngo Weinhold 103617be97dSIngo Weinhold #endif // _COPY_ENGINE_H 104