xref: /haiku/headers/private/storage/CopyEngine.h (revision 9f81ca838ce7b92b5689e57d3f86765db4705a7b)
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