3 #ifndef __AGENT_AGENT_H
\r
4 #define __AGENT_AGENT_H
\r
6 #include "Common/MyCom.h"
\r
8 #include "Windows/PropVariant.h"
\r
10 #include "../Common/OpenArchive.h"
\r
11 #include "../Common/UpdateAction.h"
\r
13 #ifdef NEW_FOLDER_INTERFACE
\r
14 #include "../FileManager/IFolder.h"
\r
15 #include "../Common/LoadCodecs.h"
\r
18 #include "AgentProxy.h"
\r
19 #include "IFolderArchive.h"
\r
23 DECL_INTERFACE(IArchiveFolderInternal, 0x01, 0xC)
\r
25 STDMETHOD(GetAgentFolder)(CAgentFolder **agentFolder) PURE;
\r
30 CProxyFolder *Folder;
\r
37 public IFolderFolder,
\r
38 public IFolderProperties,
\r
39 public IGetFolderArcProps,
\r
40 public IArchiveFolder,
\r
41 public IArchiveFolderInternal,
\r
42 public IInArchiveGetStream,
\r
43 #ifdef NEW_FOLDER_INTERFACE
\r
44 public IFolderOperations,
\r
45 public IFolderSetFlatMode,
\r
47 public CMyUnknownImp
\r
51 MY_QUERYINTERFACE_BEGIN2(IFolderFolder)
\r
52 MY_QUERYINTERFACE_ENTRY(IFolderProperties)
\r
53 MY_QUERYINTERFACE_ENTRY(IGetFolderArcProps)
\r
54 MY_QUERYINTERFACE_ENTRY(IArchiveFolder)
\r
55 MY_QUERYINTERFACE_ENTRY(IArchiveFolderInternal)
\r
56 MY_QUERYINTERFACE_ENTRY(IInArchiveGetStream)
\r
57 #ifdef NEW_FOLDER_INTERFACE
\r
58 MY_QUERYINTERFACE_ENTRY(IFolderOperations)
\r
59 MY_QUERYINTERFACE_ENTRY(IFolderSetFlatMode)
\r
61 MY_QUERYINTERFACE_END
\r
64 void LoadFolder(CProxyFolder *folder);
\r
65 HRESULT BindToFolder(CProxyFolder *folder, IFolderFolder **resultFolder);
\r
66 void GetRealIndices(const UINT32 *indices, UINT32 numItems, CUIntVector &realIndices) const;
\r
68 INTERFACE_FolderFolder(;)
\r
69 INTERFACE_FolderProperties(;)
\r
71 STDMETHOD(GetFolderArcProps)(IFolderArcProps **object);
\r
74 STDMETHOD(Extract)(const UINT32 *indices, UINT32 numItems,
\r
75 NExtract::NPathMode::EEnum pathMode,
\r
76 NExtract::NOverwriteMode::EEnum overwriteMode,
\r
77 const wchar_t *path,
\r
79 IFolderArchiveExtractCallback *extractCallback);
\r
81 STDMETHOD(GetAgentFolder)(CAgentFolder **agentFolder);
\r
83 STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream);
\r
85 #ifdef NEW_FOLDER_INTERFACE
\r
86 INTERFACE_FolderOperations(;)
\r
88 STDMETHOD(SetFlatMode)(Int32 flatMode);
\r
91 CAgentFolder(): _proxyFolderItem(NULL), _flatMode(0) {}
\r
93 void Init(CProxyArchive *proxyHandler,
\r
94 CProxyFolder *proxyFolderItem,
\r
95 IFolderFolder *parentFolder,
\r
98 _proxyArchive = proxyHandler;
\r
99 _proxyFolderItem = proxyFolderItem;
\r
100 _parentFolder = parentFolder;
\r
101 _agent = (IInFolderArchive *)agent;
\r
102 _agentSpec = agent;
\r
105 void GetPathParts(UStringVector &pathParts);
\r
106 HRESULT CommonUpdateOperation(
\r
107 bool deleteOperation,
\r
108 bool createFolderOperation,
\r
109 bool renameOperation,
\r
110 const wchar_t *newItemName,
\r
111 const NUpdateArchive::CActionSet *actionSet,
\r
112 const UINT32 *indices, UINT32 numItems,
\r
113 IFolderArchiveUpdateCallback *updateCallback100);
\r
116 UString GetPrefix(UInt32 index) const;
\r
117 UString GetName(UInt32 index) const;
\r
118 UString GetFullPathPrefixPlusPrefix(UInt32 index) const;
\r
119 void GetPrefixIfAny(UInt32 index, NWindows::NCOM::CPropVariant &propVariant) const;
\r
122 CProxyArchive *_proxyArchive;
\r
123 CProxyFolder *_proxyFolderItem;
\r
124 CMyComPtr<IFolderFolder> _parentFolder;
\r
125 CMyComPtr<IInFolderArchive> _agent;
\r
126 CAgent *_agentSpec;
\r
128 CRecordVector<CProxyItem> _items;
\r
134 public IInFolderArchive,
\r
135 public IFolderArcProps,
\r
136 #ifndef EXTRACT_ONLY
\r
137 public IOutFolderArchive,
\r
138 public ISetProperties,
\r
140 public CMyUnknownImp
\r
144 MY_QUERYINTERFACE_BEGIN2(IInFolderArchive)
\r
145 MY_QUERYINTERFACE_ENTRY(IFolderArcProps)
\r
146 #ifndef EXTRACT_ONLY
\r
147 MY_QUERYINTERFACE_ENTRY(IOutFolderArchive)
\r
148 MY_QUERYINTERFACE_ENTRY(ISetProperties)
\r
150 MY_QUERYINTERFACE_END
\r
153 INTERFACE_IInFolderArchive(;)
\r
154 INTERFACE_IFolderArcProps(;)
\r
156 #ifndef EXTRACT_ONLY
\r
157 INTERFACE_IOutFolderArchive(;)
\r
159 HRESULT CommonUpdate(
\r
160 const wchar_t *newArchiveName,
\r
161 int numUpdateItems,
\r
162 IArchiveUpdateCallback *updateCallback);
\r
164 HRESULT CreateFolder(
\r
165 const wchar_t *newArchiveName,
\r
166 const wchar_t *folderName,
\r
167 IFolderArchiveUpdateCallback *updateCallback100);
\r
169 HRESULT RenameItem(
\r
170 const wchar_t *newArchiveName,
\r
171 const UINT32 *indices, UINT32 numItems,
\r
172 const wchar_t *newItemName,
\r
173 IFolderArchiveUpdateCallback *updateCallback100);
\r
176 STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties);
\r
180 CMyComPtr<ICompressCodecsInfo> _compressCodecsInfo;
\r
185 HRESULT ReadItems();
\r
187 CProxyArchive *_proxyArchive;
\r
188 CArchiveLink _archiveLink;
\r
191 UString ArchiveType;
\r
193 UStringVector _names;
\r
194 UString _folderPrefix;
\r
196 UString _archiveNamePrefix;
\r
197 CAgentFolder *_agentFolder;
\r
199 UString _archiveFilePath;
\r
201 #ifndef EXTRACT_ONLY
\r
202 CObjectVector<UString> m_PropNames;
\r
203 CObjectVector<NWindows::NCOM::CPropVariant> m_PropValues;
\r
206 const CArc &GetArc() { return _archiveLink.Arcs.Back(); }
\r
207 IInArchive *GetArchive() { if ( _archiveLink.Arcs.IsEmpty()) return 0; return GetArc().Archive; }
\r
208 bool CanUpdate() const { return _archiveLink.Arcs.Size() <= 1; }
\r
210 UString GetTypeOfArc(const CArc &arc) const { return _codecs->Formats[arc.FormatIndex].Name; }
\r
211 UString GetErrorMessage() const
\r
214 for (int i = _archiveLink.Arcs.Size() - 1; i >= 0; i--)
\r
216 const CArc &arc = _archiveLink.Arcs[i];
\r
217 if (arc.ErrorMessage.IsEmpty())
\r
220 s += L"--------------------\n";
\r
221 s += arc.ErrorMessage;
\r
223 s += GetTypeOfArc(arc);
\r
232 #ifdef NEW_FOLDER_INTERFACE
\r
233 class CArchiveFolderManager:
\r
234 public IFolderManager,
\r
235 public CMyUnknownImp
\r
238 MY_UNKNOWN_IMP1(IFolderManager)
\r
240 INTERFACE_IFolderManager(;)
\r
242 CArchiveFolderManager(): _codecs(0) {}
\r
244 void LoadFormats();
\r
245 int FindFormat(const UString &type);
\r
247 CMyComPtr<ICompressCodecsInfo> _compressCodecsInfo;
\r