1*f6dc9357SAndroid Build Coastguard Worker // Agent/Agent.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_AGENT_AGENT_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_AGENT_AGENT_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyCom.h" 7*f6dc9357SAndroid Build Coastguard Worker 8*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/PropVariant.h" 9*f6dc9357SAndroid Build Coastguard Worker 10*f6dc9357SAndroid Build Coastguard Worker #include "../Common/LoadCodecs.h" 11*f6dc9357SAndroid Build Coastguard Worker #include "../Common/OpenArchive.h" 12*f6dc9357SAndroid Build Coastguard Worker #include "../Common/UpdateAction.h" 13*f6dc9357SAndroid Build Coastguard Worker 14*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/IFolder.h" 15*f6dc9357SAndroid Build Coastguard Worker 16*f6dc9357SAndroid Build Coastguard Worker #include "AgentProxy.h" 17*f6dc9357SAndroid Build Coastguard Worker #include "IFolderArchive.h" 18*f6dc9357SAndroid Build Coastguard Worker 19*f6dc9357SAndroid Build Coastguard Worker extern CCodecs *g_CodecsObj; 20*f6dc9357SAndroid Build Coastguard Worker HRESULT LoadGlobalCodecs(); 21*f6dc9357SAndroid Build Coastguard Worker void FreeGlobalCodecs(); 22*f6dc9357SAndroid Build Coastguard Worker 23*f6dc9357SAndroid Build Coastguard Worker class CAgentFolder; 24*f6dc9357SAndroid Build Coastguard Worker 25*f6dc9357SAndroid Build Coastguard Worker Z7_PURE_INTERFACES_BEGIN 26*f6dc9357SAndroid Build Coastguard Worker 27*f6dc9357SAndroid Build Coastguard Worker #define Z7_IFACEM_IArchiveFolderInternal(x) \ 28*f6dc9357SAndroid Build Coastguard Worker x(GetAgentFolder(CAgentFolder **agentFolder)) 29*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_CONSTR_FOLDERARC(IArchiveFolderInternal, 0xC) 30*f6dc9357SAndroid Build Coastguard Worker 31*f6dc9357SAndroid Build Coastguard Worker Z7_PURE_INTERFACES_END 32*f6dc9357SAndroid Build Coastguard Worker 33*f6dc9357SAndroid Build Coastguard Worker struct CProxyItem 34*f6dc9357SAndroid Build Coastguard Worker { 35*f6dc9357SAndroid Build Coastguard Worker unsigned DirIndex; 36*f6dc9357SAndroid Build Coastguard Worker unsigned Index; 37*f6dc9357SAndroid Build Coastguard Worker }; 38*f6dc9357SAndroid Build Coastguard Worker 39*f6dc9357SAndroid Build Coastguard Worker class CAgent; 40*f6dc9357SAndroid Build Coastguard Worker 41*f6dc9357SAndroid Build Coastguard Worker enum AGENT_OP 42*f6dc9357SAndroid Build Coastguard Worker { 43*f6dc9357SAndroid Build Coastguard Worker AGENT_OP_Uni, 44*f6dc9357SAndroid Build Coastguard Worker AGENT_OP_Delete, 45*f6dc9357SAndroid Build Coastguard Worker AGENT_OP_CreateFolder, 46*f6dc9357SAndroid Build Coastguard Worker AGENT_OP_Rename, 47*f6dc9357SAndroid Build Coastguard Worker AGENT_OP_CopyFromFile, 48*f6dc9357SAndroid Build Coastguard Worker AGENT_OP_Comment 49*f6dc9357SAndroid Build Coastguard Worker }; 50*f6dc9357SAndroid Build Coastguard Worker 51*f6dc9357SAndroid Build Coastguard Worker class CAgentFolder Z7_final: 52*f6dc9357SAndroid Build Coastguard Worker public IFolderFolder, 53*f6dc9357SAndroid Build Coastguard Worker public IFolderAltStreams, 54*f6dc9357SAndroid Build Coastguard Worker public IFolderProperties, 55*f6dc9357SAndroid Build Coastguard Worker public IArchiveGetRawProps, 56*f6dc9357SAndroid Build Coastguard Worker public IGetFolderArcProps, 57*f6dc9357SAndroid Build Coastguard Worker public IFolderCompare, 58*f6dc9357SAndroid Build Coastguard Worker public IFolderGetItemName, 59*f6dc9357SAndroid Build Coastguard Worker public IArchiveFolder, 60*f6dc9357SAndroid Build Coastguard Worker public IArchiveFolderInternal, 61*f6dc9357SAndroid Build Coastguard Worker public IInArchiveGetStream, 62*f6dc9357SAndroid Build Coastguard Worker public IFolderSetZoneIdMode, 63*f6dc9357SAndroid Build Coastguard Worker public IFolderSetZoneIdFile, 64*f6dc9357SAndroid Build Coastguard Worker public IFolderOperations, 65*f6dc9357SAndroid Build Coastguard Worker public IFolderSetFlatMode, 66*f6dc9357SAndroid Build Coastguard Worker public CMyUnknownImp 67*f6dc9357SAndroid Build Coastguard Worker { 68*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_BEGIN2(IFolderFolder) 69*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderAltStreams) 70*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderProperties) 71*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IArchiveGetRawProps) 72*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IGetFolderArcProps) 73*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderCompare) 74*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderGetItemName) 75*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IArchiveFolder) 76*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IArchiveFolderInternal) 77*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IInArchiveGetStream) 78*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderSetZoneIdMode) 79*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderSetZoneIdFile) 80*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderOperations) 81*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderSetFlatMode) 82*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_END 83*f6dc9357SAndroid Build Coastguard Worker Z7_COM_ADDREF_RELEASE 84*f6dc9357SAndroid Build Coastguard Worker 85*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderFolder) 86*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderAltStreams) 87*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderProperties) 88*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IArchiveGetRawProps) 89*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IGetFolderArcProps) 90*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderCompare) 91*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderGetItemName) 92*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IArchiveFolder) 93*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IArchiveFolderInternal) 94*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IInArchiveGetStream) 95*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderSetZoneIdMode) 96*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderSetZoneIdFile) 97*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderOperations) 98*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderSetFlatMode) 99*f6dc9357SAndroid Build Coastguard Worker 100*f6dc9357SAndroid Build Coastguard Worker void LoadFolder(unsigned proxyDirIndex); 101*f6dc9357SAndroid Build Coastguard Worker public: 102*f6dc9357SAndroid Build Coastguard Worker HRESULT BindToFolder_Internal(unsigned proxyDirIndex, IFolderFolder **resultFolder); 103*f6dc9357SAndroid Build Coastguard Worker HRESULT BindToAltStreams_Internal(unsigned proxyDirIndex, IFolderFolder **resultFolder); 104*f6dc9357SAndroid Build Coastguard Worker int GetRealIndex(unsigned index) const; 105*f6dc9357SAndroid Build Coastguard Worker void GetRealIndices(const UInt32 *indices, UInt32 numItems, 106*f6dc9357SAndroid Build Coastguard Worker bool includeAltStreams, bool includeFolderSubItemsInFlatMode, CUIntVector &realIndices) const; 107*f6dc9357SAndroid Build Coastguard Worker 108*f6dc9357SAndroid Build Coastguard Worker int CompareItems3(UInt32 index1, UInt32 index2, PROPID propID); 109*f6dc9357SAndroid Build Coastguard Worker int CompareItems2(UInt32 index1, UInt32 index2, PROPID propID, Int32 propIsRaw); 110*f6dc9357SAndroid Build Coastguard Worker CAgentFolder()111*f6dc9357SAndroid Build Coastguard Worker CAgentFolder(): 112*f6dc9357SAndroid Build Coastguard Worker _isAltStreamFolder(false), 113*f6dc9357SAndroid Build Coastguard Worker _flatMode(false), 114*f6dc9357SAndroid Build Coastguard Worker _loadAltStreams(false), // _loadAltStreams alt streams works in flat mode, but we don't use it now 115*f6dc9357SAndroid Build Coastguard Worker _proxyDirIndex(0), 116*f6dc9357SAndroid Build Coastguard Worker _zoneMode(NExtract::NZoneIdMode::kNone) 117*f6dc9357SAndroid Build Coastguard Worker /* , _replaceAltStreamCharsMode(0) */ 118*f6dc9357SAndroid Build Coastguard Worker {} 119*f6dc9357SAndroid Build Coastguard Worker Init(const CProxyArc * proxy,const CProxyArc2 * proxy2,unsigned proxyDirIndex,CAgent * agent)120*f6dc9357SAndroid Build Coastguard Worker void Init(const CProxyArc *proxy, const CProxyArc2 *proxy2, 121*f6dc9357SAndroid Build Coastguard Worker unsigned proxyDirIndex, 122*f6dc9357SAndroid Build Coastguard Worker /* IFolderFolder *parentFolder, */ 123*f6dc9357SAndroid Build Coastguard Worker CAgent *agent) 124*f6dc9357SAndroid Build Coastguard Worker { 125*f6dc9357SAndroid Build Coastguard Worker _proxy = proxy; 126*f6dc9357SAndroid Build Coastguard Worker _proxy2 = proxy2; 127*f6dc9357SAndroid Build Coastguard Worker _proxyDirIndex = proxyDirIndex; 128*f6dc9357SAndroid Build Coastguard Worker _isAltStreamFolder = false; 129*f6dc9357SAndroid Build Coastguard Worker if (_proxy2) 130*f6dc9357SAndroid Build Coastguard Worker _isAltStreamFolder = _proxy2->IsAltDir(proxyDirIndex); 131*f6dc9357SAndroid Build Coastguard Worker // _parentFolder = parentFolder; 132*f6dc9357SAndroid Build Coastguard Worker _agent = (IInFolderArchive *)agent; 133*f6dc9357SAndroid Build Coastguard Worker _agentSpec = agent; 134*f6dc9357SAndroid Build Coastguard Worker } 135*f6dc9357SAndroid Build Coastguard Worker 136*f6dc9357SAndroid Build Coastguard Worker void GetPathParts(UStringVector &pathParts, bool &isAltStreamFolder); 137*f6dc9357SAndroid Build Coastguard Worker HRESULT CommonUpdateOperation( 138*f6dc9357SAndroid Build Coastguard Worker AGENT_OP operation, 139*f6dc9357SAndroid Build Coastguard Worker bool moveMode, 140*f6dc9357SAndroid Build Coastguard Worker const wchar_t *newItemName, 141*f6dc9357SAndroid Build Coastguard Worker const NUpdateArchive::CActionSet *actionSet, 142*f6dc9357SAndroid Build Coastguard Worker const UInt32 *indices, UInt32 numItems, 143*f6dc9357SAndroid Build Coastguard Worker IProgress *progress); 144*f6dc9357SAndroid Build Coastguard Worker 145*f6dc9357SAndroid Build Coastguard Worker 146*f6dc9357SAndroid Build Coastguard Worker void GetPrefix(UInt32 index, UString &prefix) const; 147*f6dc9357SAndroid Build Coastguard Worker UString GetName(UInt32 index) const; 148*f6dc9357SAndroid Build Coastguard Worker UString GetFullPrefix(UInt32 index) const; // relative too root folder of archive 149*f6dc9357SAndroid Build Coastguard Worker 150*f6dc9357SAndroid Build Coastguard Worker public: 151*f6dc9357SAndroid Build Coastguard Worker bool _isAltStreamFolder; 152*f6dc9357SAndroid Build Coastguard Worker bool _flatMode; 153*f6dc9357SAndroid Build Coastguard Worker bool _loadAltStreams; // in Flat mode 154*f6dc9357SAndroid Build Coastguard Worker const CProxyArc *_proxy; 155*f6dc9357SAndroid Build Coastguard Worker const CProxyArc2 *_proxy2; 156*f6dc9357SAndroid Build Coastguard Worker unsigned _proxyDirIndex; 157*f6dc9357SAndroid Build Coastguard Worker NExtract::NZoneIdMode::EEnum _zoneMode; 158*f6dc9357SAndroid Build Coastguard Worker CByteBuffer _zoneBuf; 159*f6dc9357SAndroid Build Coastguard Worker // Int32 _replaceAltStreamCharsMode; 160*f6dc9357SAndroid Build Coastguard Worker // CMyComPtr<IFolderFolder> _parentFolder; 161*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IInFolderArchive> _agent; 162*f6dc9357SAndroid Build Coastguard Worker CAgent *_agentSpec; 163*f6dc9357SAndroid Build Coastguard Worker CRecordVector<CProxyItem> _items; 164*f6dc9357SAndroid Build Coastguard Worker }; 165*f6dc9357SAndroid Build Coastguard Worker 166*f6dc9357SAndroid Build Coastguard Worker 167*f6dc9357SAndroid Build Coastguard Worker 168*f6dc9357SAndroid Build Coastguard Worker class CAgent Z7_final: 169*f6dc9357SAndroid Build Coastguard Worker public IInFolderArchive, 170*f6dc9357SAndroid Build Coastguard Worker public IFolderArcProps, 171*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_EXTRACT_ONLY 172*f6dc9357SAndroid Build Coastguard Worker public IOutFolderArchive, 173*f6dc9357SAndroid Build Coastguard Worker public ISetProperties, 174*f6dc9357SAndroid Build Coastguard Worker #endif 175*f6dc9357SAndroid Build Coastguard Worker public CMyUnknownImp 176*f6dc9357SAndroid Build Coastguard Worker { 177*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_BEGIN2(IInFolderArchive) 178*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderArcProps) 179*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_EXTRACT_ONLY 180*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IOutFolderArchive) 181*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(ISetProperties) 182*f6dc9357SAndroid Build Coastguard Worker #endif 183*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_END 184*f6dc9357SAndroid Build Coastguard Worker Z7_COM_ADDREF_RELEASE 185*f6dc9357SAndroid Build Coastguard Worker 186*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IInFolderArchive) 187*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderArcProps) 188*f6dc9357SAndroid Build Coastguard Worker 189*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_EXTRACT_ONLY 190*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ISetProperties) 191*f6dc9357SAndroid Build Coastguard Worker 192*f6dc9357SAndroid Build Coastguard Worker public: 193*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IOutFolderArchive) 194*f6dc9357SAndroid Build Coastguard Worker HRESULT CommonUpdate(ISequentialOutStream *outArchiveStream, 195*f6dc9357SAndroid Build Coastguard Worker unsigned numUpdateItems, IArchiveUpdateCallback *updateCallback); 196*f6dc9357SAndroid Build Coastguard Worker 197*f6dc9357SAndroid Build Coastguard Worker HRESULT CreateFolder(ISequentialOutStream *outArchiveStream, 198*f6dc9357SAndroid Build Coastguard Worker const wchar_t *folderName, IFolderArchiveUpdateCallback *updateCallback100); 199*f6dc9357SAndroid Build Coastguard Worker 200*f6dc9357SAndroid Build Coastguard Worker HRESULT RenameItem(ISequentialOutStream *outArchiveStream, 201*f6dc9357SAndroid Build Coastguard Worker const UInt32 *indices, UInt32 numItems, const wchar_t *newItemName, 202*f6dc9357SAndroid Build Coastguard Worker IFolderArchiveUpdateCallback *updateCallback100); 203*f6dc9357SAndroid Build Coastguard Worker 204*f6dc9357SAndroid Build Coastguard Worker HRESULT CommentItem(ISequentialOutStream *outArchiveStream, 205*f6dc9357SAndroid Build Coastguard Worker const UInt32 *indices, UInt32 numItems, const wchar_t *newItemName, 206*f6dc9357SAndroid Build Coastguard Worker IFolderArchiveUpdateCallback *updateCallback100); 207*f6dc9357SAndroid Build Coastguard Worker 208*f6dc9357SAndroid Build Coastguard Worker HRESULT UpdateOneFile(ISequentialOutStream *outArchiveStream, 209*f6dc9357SAndroid Build Coastguard Worker const UInt32 *indices, UInt32 numItems, const wchar_t *diskFilePath, 210*f6dc9357SAndroid Build Coastguard Worker IFolderArchiveUpdateCallback *updateCallback100); 211*f6dc9357SAndroid Build Coastguard Worker #endif 212*f6dc9357SAndroid Build Coastguard Worker 213*f6dc9357SAndroid Build Coastguard Worker private: 214*f6dc9357SAndroid Build Coastguard Worker HRESULT ReadItems(); 215*f6dc9357SAndroid Build Coastguard Worker 216*f6dc9357SAndroid Build Coastguard Worker public: 217*f6dc9357SAndroid Build Coastguard Worker CProxyArc *_proxy; 218*f6dc9357SAndroid Build Coastguard Worker CProxyArc2 *_proxy2; 219*f6dc9357SAndroid Build Coastguard Worker CArchiveLink _archiveLink; 220*f6dc9357SAndroid Build Coastguard Worker 221*f6dc9357SAndroid Build Coastguard Worker UString ArchiveType; 222*f6dc9357SAndroid Build Coastguard Worker 223*f6dc9357SAndroid Build Coastguard Worker FStringVector _names; 224*f6dc9357SAndroid Build Coastguard Worker FString _folderPrefix; // for new files from disk 225*f6dc9357SAndroid Build Coastguard Worker 226*f6dc9357SAndroid Build Coastguard Worker UString _updatePathPrefix; 227*f6dc9357SAndroid Build Coastguard Worker CAgentFolder *_agentFolder; 228*f6dc9357SAndroid Build Coastguard Worker 229*f6dc9357SAndroid Build Coastguard Worker UString _archiveFilePath; // it can be path of non-existing file if file is virtual 230*f6dc9357SAndroid Build Coastguard Worker 231*f6dc9357SAndroid Build Coastguard Worker DWORD _attrib; 232*f6dc9357SAndroid Build Coastguard Worker bool _updatePathPrefix_is_AltFolder; 233*f6dc9357SAndroid Build Coastguard Worker bool ThereIsPathProp; 234*f6dc9357SAndroid Build Coastguard Worker bool _isDeviceFile; 235*f6dc9357SAndroid Build Coastguard Worker bool _isHashHandler; 236*f6dc9357SAndroid Build Coastguard Worker 237*f6dc9357SAndroid Build Coastguard Worker FString _hashBaseFolderPrefix; 238*f6dc9357SAndroid Build Coastguard Worker 239*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_EXTRACT_ONLY 240*f6dc9357SAndroid Build Coastguard Worker CObjectVector<UString> m_PropNames; 241*f6dc9357SAndroid Build Coastguard Worker CObjectVector<NWindows::NCOM::CPropVariant> m_PropValues; 242*f6dc9357SAndroid Build Coastguard Worker #endif 243*f6dc9357SAndroid Build Coastguard Worker 244*f6dc9357SAndroid Build Coastguard Worker CAgent(); 245*f6dc9357SAndroid Build Coastguard Worker ~CAgent(); 246*f6dc9357SAndroid Build Coastguard Worker GetArc()247*f6dc9357SAndroid Build Coastguard Worker const CArc &GetArc() const { return _archiveLink.Arcs.Back(); } GetArchive()248*f6dc9357SAndroid Build Coastguard Worker IInArchive *GetArchive() const { if ( _archiveLink.Arcs.IsEmpty()) return NULL; return GetArc().Archive; } 249*f6dc9357SAndroid Build Coastguard Worker bool CanUpdate() const; 250*f6dc9357SAndroid Build Coastguard Worker Is_Attrib_ReadOnly()251*f6dc9357SAndroid Build Coastguard Worker bool Is_Attrib_ReadOnly() const 252*f6dc9357SAndroid Build Coastguard Worker { 253*f6dc9357SAndroid Build Coastguard Worker return _attrib != INVALID_FILE_ATTRIBUTES && (_attrib & FILE_ATTRIBUTE_READONLY); 254*f6dc9357SAndroid Build Coastguard Worker } 255*f6dc9357SAndroid Build Coastguard Worker IsThere_ReadOnlyArc()256*f6dc9357SAndroid Build Coastguard Worker bool IsThere_ReadOnlyArc() const 257*f6dc9357SAndroid Build Coastguard Worker { 258*f6dc9357SAndroid Build Coastguard Worker FOR_VECTOR (i, _archiveLink.Arcs) 259*f6dc9357SAndroid Build Coastguard Worker { 260*f6dc9357SAndroid Build Coastguard Worker const CArc &arc = _archiveLink.Arcs[i]; 261*f6dc9357SAndroid Build Coastguard Worker if (arc.FormatIndex < 0 262*f6dc9357SAndroid Build Coastguard Worker || arc.IsReadOnly 263*f6dc9357SAndroid Build Coastguard Worker || !g_CodecsObj->Formats[arc.FormatIndex].UpdateEnabled) 264*f6dc9357SAndroid Build Coastguard Worker return true; 265*f6dc9357SAndroid Build Coastguard Worker } 266*f6dc9357SAndroid Build Coastguard Worker return false; 267*f6dc9357SAndroid Build Coastguard Worker } 268*f6dc9357SAndroid Build Coastguard Worker GetTypeOfArc(const CArc & arc)269*f6dc9357SAndroid Build Coastguard Worker UString GetTypeOfArc(const CArc &arc) const 270*f6dc9357SAndroid Build Coastguard Worker { 271*f6dc9357SAndroid Build Coastguard Worker if (arc.FormatIndex < 0) 272*f6dc9357SAndroid Build Coastguard Worker return UString("Parser"); 273*f6dc9357SAndroid Build Coastguard Worker return g_CodecsObj->GetFormatNamePtr(arc.FormatIndex); 274*f6dc9357SAndroid Build Coastguard Worker } 275*f6dc9357SAndroid Build Coastguard Worker GetErrorMessage()276*f6dc9357SAndroid Build Coastguard Worker UString GetErrorMessage() const 277*f6dc9357SAndroid Build Coastguard Worker { 278*f6dc9357SAndroid Build Coastguard Worker UString s; 279*f6dc9357SAndroid Build Coastguard Worker for (int i = (int)_archiveLink.Arcs.Size() - 1; i >= 0; i--) 280*f6dc9357SAndroid Build Coastguard Worker { 281*f6dc9357SAndroid Build Coastguard Worker const CArc &arc = _archiveLink.Arcs[i]; 282*f6dc9357SAndroid Build Coastguard Worker 283*f6dc9357SAndroid Build Coastguard Worker UString s2; 284*f6dc9357SAndroid Build Coastguard Worker if (arc.ErrorInfo.ErrorFormatIndex >= 0) 285*f6dc9357SAndroid Build Coastguard Worker { 286*f6dc9357SAndroid Build Coastguard Worker if (arc.ErrorInfo.ErrorFormatIndex == arc.FormatIndex) 287*f6dc9357SAndroid Build Coastguard Worker s2 += "Warning: The archive is open with offset"; 288*f6dc9357SAndroid Build Coastguard Worker else 289*f6dc9357SAndroid Build Coastguard Worker { 290*f6dc9357SAndroid Build Coastguard Worker s2 += "Cannot open the file as ["; 291*f6dc9357SAndroid Build Coastguard Worker s2 += g_CodecsObj->GetFormatNamePtr(arc.ErrorInfo.ErrorFormatIndex); 292*f6dc9357SAndroid Build Coastguard Worker s2 += "] archive"; 293*f6dc9357SAndroid Build Coastguard Worker } 294*f6dc9357SAndroid Build Coastguard Worker } 295*f6dc9357SAndroid Build Coastguard Worker 296*f6dc9357SAndroid Build Coastguard Worker if (!arc.ErrorInfo.ErrorMessage.IsEmpty()) 297*f6dc9357SAndroid Build Coastguard Worker { 298*f6dc9357SAndroid Build Coastguard Worker if (!s2.IsEmpty()) 299*f6dc9357SAndroid Build Coastguard Worker s2.Add_LF(); 300*f6dc9357SAndroid Build Coastguard Worker s2 += "\n["; 301*f6dc9357SAndroid Build Coastguard Worker s2 += GetTypeOfArc(arc); 302*f6dc9357SAndroid Build Coastguard Worker s2 += "]: "; 303*f6dc9357SAndroid Build Coastguard Worker s2 += arc.ErrorInfo.ErrorMessage; 304*f6dc9357SAndroid Build Coastguard Worker } 305*f6dc9357SAndroid Build Coastguard Worker 306*f6dc9357SAndroid Build Coastguard Worker if (!s2.IsEmpty()) 307*f6dc9357SAndroid Build Coastguard Worker { 308*f6dc9357SAndroid Build Coastguard Worker if (!s.IsEmpty()) 309*f6dc9357SAndroid Build Coastguard Worker s += "--------------------\n"; 310*f6dc9357SAndroid Build Coastguard Worker s += arc.Path; 311*f6dc9357SAndroid Build Coastguard Worker s.Add_LF(); 312*f6dc9357SAndroid Build Coastguard Worker s += s2; 313*f6dc9357SAndroid Build Coastguard Worker s.Add_LF(); 314*f6dc9357SAndroid Build Coastguard Worker } 315*f6dc9357SAndroid Build Coastguard Worker } 316*f6dc9357SAndroid Build Coastguard Worker return s; 317*f6dc9357SAndroid Build Coastguard Worker } 318*f6dc9357SAndroid Build Coastguard Worker KeepModeForNextOpen()319*f6dc9357SAndroid Build Coastguard Worker void KeepModeForNextOpen() { _archiveLink.KeepModeForNextOpen(); } 320*f6dc9357SAndroid Build Coastguard Worker }; 321*f6dc9357SAndroid Build Coastguard Worker 322*f6dc9357SAndroid Build Coastguard Worker 323*f6dc9357SAndroid Build Coastguard Worker // #ifdef NEW_FOLDER_INTERFACE 324*f6dc9357SAndroid Build Coastguard Worker 325*f6dc9357SAndroid Build Coastguard Worker struct CCodecIcons 326*f6dc9357SAndroid Build Coastguard Worker { 327*f6dc9357SAndroid Build Coastguard Worker struct CIconPair 328*f6dc9357SAndroid Build Coastguard Worker { 329*f6dc9357SAndroid Build Coastguard Worker UString Ext; 330*f6dc9357SAndroid Build Coastguard Worker int IconIndex; 331*f6dc9357SAndroid Build Coastguard Worker }; 332*f6dc9357SAndroid Build Coastguard Worker CObjectVector<CIconPair> IconPairs; 333*f6dc9357SAndroid Build Coastguard Worker 334*f6dc9357SAndroid Build Coastguard Worker // void Clear() { IconPairs.Clear(); } 335*f6dc9357SAndroid Build Coastguard Worker void LoadIcons(HMODULE m); 336*f6dc9357SAndroid Build Coastguard Worker bool FindIconIndex(const UString &ext, int &iconIndex) const; 337*f6dc9357SAndroid Build Coastguard Worker }; 338*f6dc9357SAndroid Build Coastguard Worker 339*f6dc9357SAndroid Build Coastguard Worker 340*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_COM_1( 341*f6dc9357SAndroid Build Coastguard Worker CArchiveFolderManager 342*f6dc9357SAndroid Build Coastguard Worker , IFolderManager 343*f6dc9357SAndroid Build Coastguard Worker ) 344*f6dc9357SAndroid Build Coastguard Worker CObjectVector<CCodecIcons> CodecIconsVector; 345*f6dc9357SAndroid Build Coastguard Worker CCodecIcons InternalIcons; 346*f6dc9357SAndroid Build Coastguard Worker bool WasLoaded; 347*f6dc9357SAndroid Build Coastguard Worker 348*f6dc9357SAndroid Build Coastguard Worker void LoadFormats(); 349*f6dc9357SAndroid Build Coastguard Worker // int FindFormat(const UString &type); 350*f6dc9357SAndroid Build Coastguard Worker public: CArchiveFolderManager()351*f6dc9357SAndroid Build Coastguard Worker CArchiveFolderManager(): 352*f6dc9357SAndroid Build Coastguard Worker WasLoaded(false) 353*f6dc9357SAndroid Build Coastguard Worker {} 354*f6dc9357SAndroid Build Coastguard Worker }; 355*f6dc9357SAndroid Build Coastguard Worker 356*f6dc9357SAndroid Build Coastguard Worker // #endif 357*f6dc9357SAndroid Build Coastguard Worker 358*f6dc9357SAndroid Build Coastguard Worker #endif 359