OLD | NEW |
| (Empty) |
1 // Update.h | |
2 | |
3 #ifndef __UPDATE_H | |
4 #define __UPDATE_H | |
5 | |
6 #include "Common/Wildcard.h" | |
7 #include "Windows/FileFind.h" | |
8 #include "../../Archive/IArchive.h" | |
9 | |
10 #include "UpdateAction.h" | |
11 #include "ArchiveOpenCallback.h" | |
12 #include "UpdateCallback.h" | |
13 #include "Property.h" | |
14 #include "LoadCodecs.h" | |
15 | |
16 struct CArchivePath | |
17 { | |
18 UString Prefix; // path(folder) prefix including slash | |
19 UString Name; // base name | |
20 UString BaseExtension; // archive type extension or "exe" extension | |
21 UString VolExtension; // archive type extension for volumes | |
22 | |
23 bool Temp; | |
24 UString TempPrefix; // path(folder) for temp location | |
25 UString TempPostfix; | |
26 | |
27 CArchivePath(): Temp(false) {}; | |
28 | |
29 void ParseFromPath(const UString &path) | |
30 { | |
31 SplitPathToParts(path, Prefix, Name); | |
32 if (Name.IsEmpty()) | |
33 return; | |
34 int dotPos = Name.ReverseFind(L'.'); | |
35 if (dotPos <= 0) | |
36 return; | |
37 if (dotPos == Name.Length() - 1) | |
38 { | |
39 Name = Name.Left(dotPos); | |
40 BaseExtension.Empty(); | |
41 return; | |
42 } | |
43 if (BaseExtension.CompareNoCase(Name.Mid(dotPos + 1)) == 0) | |
44 { | |
45 BaseExtension = Name.Mid(dotPos + 1); | |
46 Name = Name.Left(dotPos); | |
47 } | |
48 else | |
49 BaseExtension.Empty(); | |
50 } | |
51 | |
52 UString GetPathWithoutExt() const | |
53 { | |
54 return Prefix + Name; | |
55 } | |
56 | |
57 UString GetFinalPath() const | |
58 { | |
59 UString path = GetPathWithoutExt(); | |
60 if (!BaseExtension.IsEmpty()) | |
61 path += UString(L'.') + BaseExtension; | |
62 return path; | |
63 } | |
64 | |
65 | |
66 UString GetTempPath() const | |
67 { | |
68 UString path = TempPrefix + Name; | |
69 if (!BaseExtension.IsEmpty()) | |
70 path += UString(L'.') + BaseExtension; | |
71 path += L".tmp"; | |
72 path += TempPostfix; | |
73 return path; | |
74 } | |
75 }; | |
76 | |
77 struct CUpdateArchiveCommand | |
78 { | |
79 UString UserArchivePath; | |
80 CArchivePath ArchivePath; | |
81 NUpdateArchive::CActionSet ActionSet; | |
82 }; | |
83 | |
84 struct CCompressionMethodMode | |
85 { | |
86 int FormatIndex; | |
87 CObjectVector<CProperty> Properties; | |
88 CCompressionMethodMode(): FormatIndex(-1) {} | |
89 }; | |
90 | |
91 struct CUpdateOptions | |
92 { | |
93 CCompressionMethodMode MethodMode; | |
94 | |
95 CObjectVector<CUpdateArchiveCommand> Commands; | |
96 bool UpdateArchiveItself; | |
97 CArchivePath ArchivePath; | |
98 | |
99 bool SfxMode; | |
100 UString SfxModule; | |
101 | |
102 bool OpenShareForWrite; | |
103 | |
104 bool StdInMode; | |
105 UString StdInFileName; | |
106 bool StdOutMode; | |
107 | |
108 bool EMailMode; | |
109 bool EMailRemoveAfter; | |
110 UString EMailAddress; | |
111 | |
112 UString WorkingDir; | |
113 | |
114 bool Init(const CCodecs *codecs, const CIntVector &formatIndices, const UStrin
g &arcPath); | |
115 | |
116 CUpdateOptions(): | |
117 UpdateArchiveItself(true), | |
118 SfxMode(false), | |
119 StdInMode(false), | |
120 StdOutMode(false), | |
121 EMailMode(false), | |
122 EMailRemoveAfter(false), | |
123 OpenShareForWrite(false) | |
124 {}; | |
125 CRecordVector<UInt64> VolumesSizes; | |
126 }; | |
127 | |
128 struct CErrorInfo | |
129 { | |
130 DWORD SystemError; | |
131 UString FileName; | |
132 UString FileName2; | |
133 UString Message; | |
134 // UStringVector ErrorPaths; | |
135 // CRecordVector<DWORD> ErrorCodes; | |
136 CErrorInfo(): SystemError(0) {}; | |
137 }; | |
138 | |
139 struct CUpdateErrorInfo: public CErrorInfo | |
140 { | |
141 }; | |
142 | |
143 #define INTERFACE_IUpdateCallbackUI2(x) \ | |
144 INTERFACE_IUpdateCallbackUI(x) \ | |
145 virtual HRESULT OpenResult(const wchar_t *name, HRESULT result) x; \ | |
146 virtual HRESULT StartScanning() x; \ | |
147 virtual HRESULT ScanProgress(UInt64 numFolders, UInt64 numFiles, const wchar_t
*path) x; \ | |
148 virtual HRESULT CanNotFindError(const wchar_t *name, DWORD systemError) x; \ | |
149 virtual HRESULT FinishScanning() x; \ | |
150 virtual HRESULT StartArchive(const wchar_t *name, bool updating) x; \ | |
151 virtual HRESULT FinishArchive() x; \ | |
152 | |
153 struct IUpdateCallbackUI2: public IUpdateCallbackUI | |
154 { | |
155 INTERFACE_IUpdateCallbackUI2(=0) | |
156 }; | |
157 | |
158 HRESULT UpdateArchive( | |
159 CCodecs *codecs, | |
160 const NWildcard::CCensor &censor, | |
161 CUpdateOptions &options, | |
162 CUpdateErrorInfo &errorInfo, | |
163 IOpenCallbackUI *openCallback, | |
164 IUpdateCallbackUI2 *callback); | |
165 | |
166 #endif | |
OLD | NEW |