Imported Upstream version 9.20
[platform/upstream/7zip.git] / CPP / 7zip / UI / Common / Update.h
1 // Update.h\r
2 \r
3 #ifndef __COMMON_UPDATE_H\r
4 #define __COMMON_UPDATE_H\r
5 \r
6 #include "Common/Wildcard.h"\r
7 \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
13 \r
14 struct CArchivePath\r
15 {\r
16   UString OriginalPath;\r
17 \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
22 \r
23   bool Temp;\r
24   UString TempPrefix;  // path(folder) for temp location\r
25   UString TempPostfix;\r
26 \r
27   CArchivePath(): Temp(false) {};\r
28   \r
29   void ParseFromPath(const UString &path)\r
30   {\r
31     OriginalPath = path;\r
32 \r
33     SplitPathToParts(path, Prefix, Name);\r
34     int dotPos = Name.ReverseFind(L'.');\r
35     if (dotPos < 0)\r
36       return;\r
37     if (dotPos == Name.Length() - 1)\r
38     {\r
39       Name = Name.Left(dotPos);\r
40       BaseExtension.Empty();\r
41       return;\r
42     }\r
43     if (BaseExtension.CompareNoCase(Name.Mid(dotPos + 1)) == 0)\r
44     {\r
45       BaseExtension = Name.Mid(dotPos + 1);\r
46       Name = Name.Left(dotPos);\r
47     }\r
48     else\r
49       BaseExtension.Empty();\r
50   }\r
51 \r
52   UString GetPathWithoutExt() const\r
53   {\r
54     return Prefix + Name;\r
55   }\r
56 \r
57   UString GetFinalPath() const\r
58   {\r
59     UString path = GetPathWithoutExt();\r
60     if (!BaseExtension.IsEmpty())\r
61       path += UString(L'.') + BaseExtension;\r
62     return path;\r
63   }\r
64 \r
65   \r
66   UString GetTempPath() const\r
67   {\r
68     UString path = TempPrefix + Name;\r
69     if (!BaseExtension.IsEmpty())\r
70       path += UString(L'.') + BaseExtension;\r
71     path += L".tmp";\r
72     path += TempPostfix;\r
73     return path;\r
74   }\r
75 };\r
76 \r
77 struct CUpdateArchiveCommand\r
78 {\r
79   UString UserArchivePath;\r
80   CArchivePath ArchivePath;\r
81   NUpdateArchive::CActionSet ActionSet;\r
82 };\r
83 \r
84 struct CCompressionMethodMode\r
85 {\r
86   int FormatIndex;\r
87   CObjectVector<CProperty> Properties;\r
88   CCompressionMethodMode(): FormatIndex(-1) {}\r
89 };\r
90 \r
91 struct CUpdateOptions\r
92 {\r
93   CCompressionMethodMode MethodMode;\r
94 \r
95   CObjectVector<CUpdateArchiveCommand> Commands;\r
96   bool UpdateArchiveItself;\r
97   CArchivePath ArchivePath;\r
98   \r
99   bool SfxMode;\r
100   UString SfxModule;\r
101   \r
102   bool OpenShareForWrite;\r
103 \r
104   bool StdInMode;\r
105   UString StdInFileName;\r
106   bool StdOutMode;\r
107   \r
108   bool EMailMode;\r
109   bool EMailRemoveAfter;\r
110   UString EMailAddress;\r
111 \r
112   UString WorkingDir;\r
113 \r
114   bool Init(const CCodecs *codecs, const CIntVector &formatIndices, const UString &arcPath);\r
115 \r
116   CUpdateOptions():\r
117     UpdateArchiveItself(true),\r
118     SfxMode(false),\r
119     StdInMode(false),\r
120     StdOutMode(false),\r
121     EMailMode(false),\r
122     EMailRemoveAfter(false),\r
123     OpenShareForWrite(false)\r
124       {};\r
125 \r
126   void SetAddActionCommand()\r
127   {\r
128     Commands.Clear();\r
129     CUpdateArchiveCommand c;\r
130     c.ActionSet = NUpdateArchive::kAddActionSet;\r
131     Commands.Add(c);\r
132   }\r
133 \r
134   CRecordVector<UInt64> VolumesSizes;\r
135 };\r
136 \r
137 struct CErrorInfo\r
138 {\r
139   DWORD SystemError;\r
140   UString FileName;\r
141   UString FileName2;\r
142   UString Message;\r
143   // UStringVector ErrorPaths;\r
144   // CRecordVector<DWORD> ErrorCodes;\r
145   CErrorInfo(): SystemError(0) {};\r
146 };\r
147 \r
148 struct CUpdateErrorInfo: public CErrorInfo\r
149 {\r
150 };\r
151 \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
161 \r
162 struct IUpdateCallbackUI2: public IUpdateCallbackUI\r
163 {\r
164   INTERFACE_IUpdateCallbackUI2(=0)\r
165 };\r
166 \r
167 HRESULT UpdateArchive(\r
168     CCodecs *codecs,\r
169     const NWildcard::CCensor &censor,\r
170     CUpdateOptions &options,\r
171     CUpdateErrorInfo &errorInfo,\r
172     IOpenCallbackUI *openCallback,\r
173     IUpdateCallbackUI2 *callback);\r
174 \r
175 #endif\r