xref: /haiku/headers/os/package/hpkg/PackageWriter.h (revision 71452e98334eaac603bf542d159e24788a46bebb)
1 /*
2  * Copyright 2009,2011, Haiku, Inc.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _PACKAGE__HPKG__PACKAGE_WRITER_H_
6 #define _PACKAGE__HPKG__PACKAGE_WRITER_H_
7 
8 
9 #include <SupportDefs.h>
10 
11 #include <package/hpkg/ErrorOutput.h>
12 
13 
14 class BPositionIO;
15 
16 
17 namespace BPackageKit {
18 
19 namespace BHPKG {
20 
21 namespace BPrivate {
22 	class PackageWriterImpl;
23 }
24 using BPrivate::PackageWriterImpl;
25 
26 
27 class BPackageWriterListener : public BErrorOutput {
28 public:
29 	virtual	void				PrintErrorVarArgs(const char* format,
30 									va_list args) = 0;
31 
32 	virtual	void				OnEntryAdded(const char* path) = 0;
33 
34 	virtual void				OnTOCSizeInfo(uint64 uncompressedStringsSize,
35 									uint64 uncompressedMainSize,
36 									uint64 uncompressedTOCSize) = 0;
37 	virtual void				OnPackageAttributesSizeInfo(uint32 stringCount,
38 									uint32 uncompressedSize) = 0;
39 	virtual void				OnPackageSizeInfo(uint32 headerSize,
40 									uint64 heapSize, uint64 tocSize,
41 									uint32 packageAttributesSize,
42 									uint64 totalSize) = 0;
43 };
44 
45 
46 class BPackageWriterParameters {
47 public:
48 								BPackageWriterParameters();
49 								~BPackageWriterParameters();
50 
51 			uint32				Flags() const;
52 			void				SetFlags(uint32 flags);
53 
54 			uint32				Compression() const;
55 			void				SetCompression(uint32 compression);
56 
57 			int32				CompressionLevel() const;
58 			void				SetCompressionLevel(int32 compressionLevel);
59 
60 private:
61 			uint32				fFlags;
62 			uint32				fCompression;
63 			int32				fCompressionLevel;
64 };
65 
66 
67 class BPackageWriter {
68 public:
69 								BPackageWriter(
70 									BPackageWriterListener* listener);
71 								~BPackageWriter();
72 
73 			status_t			Init(const char* fileName,
74 									const BPackageWriterParameters* parameters
75 										= NULL);
76 			status_t			Init(BPositionIO* file, bool keepFile,
77 									const BPackageWriterParameters* parameters
78 										= NULL);
79 			status_t			SetInstallPath(const char* installPath);
80 			void				SetCheckLicenses(bool checkLicenses);
81 			status_t			AddEntry(const char* fileName, int fd = -1);
82 			status_t			Finish();
83 
84 			status_t			Recompress(BPositionIO* inputFile);
85 									// to be called after Init(); no Finish()
86 
87 private:
88 			PackageWriterImpl*	fImpl;
89 };
90 
91 
92 }	// namespace BHPKG
93 
94 }	// namespace BPackageKit
95 
96 
97 #endif	// _PACKAGE__HPKG__PACKAGE_WRITER_H_
98