3 #ifndef __COMMON_UPDATE_H
\r
4 #define __COMMON_UPDATE_H
\r
6 #include "Common/Wildcard.h"
\r
8 #include "ArchiveOpenCallback.h"
\r
9 #include "LoadCodecs.h"
\r
10 #include "Property.h"
\r
11 #include "UpdateAction.h"
\r
12 #include "UpdateCallback.h"
\r
16 UString OriginalPath;
\r
18 UString Prefix; // path(folder) prefix including slash
\r
19 UString Name; // base name
\r
20 UString BaseExtension; // archive type extension or "exe" extension
\r
21 UString VolExtension; // archive type extension for volumes
\r
24 UString TempPrefix; // path(folder) for temp location
\r
25 UString TempPostfix;
\r
27 CArchivePath(): Temp(false) {};
\r
29 void ParseFromPath(const UString &path)
\r
31 OriginalPath = path;
\r
33 SplitPathToParts(path, Prefix, Name);
\r
34 int dotPos = Name.ReverseFind(L'.');
\r
37 if (dotPos == Name.Length() - 1)
\r
39 Name = Name.Left(dotPos);
\r
40 BaseExtension.Empty();
\r
43 if (BaseExtension.CompareNoCase(Name.Mid(dotPos + 1)) == 0)
\r
45 BaseExtension = Name.Mid(dotPos + 1);
\r
46 Name = Name.Left(dotPos);
\r
49 BaseExtension.Empty();
\r
52 UString GetPathWithoutExt() const
\r
54 return Prefix + Name;
\r
57 UString GetFinalPath() const
\r
59 UString path = GetPathWithoutExt();
\r
60 if (!BaseExtension.IsEmpty())
\r
61 path += UString(L'.') + BaseExtension;
\r
66 UString GetTempPath() const
\r
68 UString path = TempPrefix + Name;
\r
69 if (!BaseExtension.IsEmpty())
\r
70 path += UString(L'.') + BaseExtension;
\r
72 path += TempPostfix;
\r
77 struct CUpdateArchiveCommand
\r
79 UString UserArchivePath;
\r
80 CArchivePath ArchivePath;
\r
81 NUpdateArchive::CActionSet ActionSet;
\r
84 struct CCompressionMethodMode
\r
87 CObjectVector<CProperty> Properties;
\r
88 CCompressionMethodMode(): FormatIndex(-1) {}
\r
91 struct CUpdateOptions
\r
93 CCompressionMethodMode MethodMode;
\r
95 CObjectVector<CUpdateArchiveCommand> Commands;
\r
96 bool UpdateArchiveItself;
\r
97 CArchivePath ArchivePath;
\r
102 bool OpenShareForWrite;
\r
105 UString StdInFileName;
\r
109 bool EMailRemoveAfter;
\r
110 UString EMailAddress;
\r
112 UString WorkingDir;
\r
114 bool Init(const CCodecs *codecs, const CIntVector &formatIndices, const UString &arcPath);
\r
117 UpdateArchiveItself(true),
\r
122 EMailRemoveAfter(false),
\r
123 OpenShareForWrite(false)
\r
126 void SetAddActionCommand()
\r
129 CUpdateArchiveCommand c;
\r
130 c.ActionSet = NUpdateArchive::kAddActionSet;
\r
134 CRecordVector<UInt64> VolumesSizes;
\r
143 // UStringVector ErrorPaths;
\r
144 // CRecordVector<DWORD> ErrorCodes;
\r
145 CErrorInfo(): SystemError(0) {};
\r
148 struct CUpdateErrorInfo: public CErrorInfo
\r
152 #define INTERFACE_IUpdateCallbackUI2(x) \
\r
153 INTERFACE_IUpdateCallbackUI(x) \
\r
154 virtual HRESULT OpenResult(const wchar_t *name, HRESULT result) x; \
\r
155 virtual HRESULT StartScanning() x; \
\r
156 virtual HRESULT ScanProgress(UInt64 numFolders, UInt64 numFiles, const wchar_t *path) x; \
\r
157 virtual HRESULT CanNotFindError(const wchar_t *name, DWORD systemError) x; \
\r
158 virtual HRESULT FinishScanning() x; \
\r
159 virtual HRESULT StartArchive(const wchar_t *name, bool updating) x; \
\r
160 virtual HRESULT FinishArchive() x; \
\r
162 struct IUpdateCallbackUI2: public IUpdateCallbackUI
\r
164 INTERFACE_IUpdateCallbackUI2(=0)
\r
167 HRESULT UpdateArchive(
\r
169 const NWildcard::CCensor &censor,
\r
170 CUpdateOptions &options,
\r
171 CUpdateErrorInfo &errorInfo,
\r
172 IOpenCallbackUI *openCallback,
\r
173 IUpdateCallbackUI2 *callback);
\r