1 // AltStreamsFolder.h 2 3 #ifndef ZIP7_INC_ALT_STREAMS_FOLDER_H 4 #define ZIP7_INC_ALT_STREAMS_FOLDER_H 5 6 #include "../../../Common/MyCom.h" 7 8 #include "../../../Windows/FileFind.h" 9 10 #include "../../Archive/IArchive.h" 11 12 #include "IFolder.h" 13 14 namespace NAltStreamsFolder { 15 16 class CAltStreamsFolder; 17 18 struct CAltStream 19 { 20 UInt64 Size; 21 UInt64 PackSize; 22 bool PackSize_Defined; 23 UString Name; 24 }; 25 26 27 class CAltStreamsFolder Z7_final: 28 public IFolderFolder, 29 public IFolderCompare, 30 #ifdef USE_UNICODE_FSTRING 31 public IFolderGetItemName, 32 #endif 33 public IFolderWasChanged, 34 public IFolderOperations, 35 // public IFolderOperationsDeleteToRecycleBin, 36 public IFolderClone, 37 public IFolderGetSystemIconIndex, 38 public CMyUnknownImp 39 { 40 Z7_COM_QI_BEGIN2(IFolderFolder) 41 Z7_COM_QI_ENTRY(IFolderCompare) 42 #ifdef USE_UNICODE_FSTRING 43 Z7_COM_QI_ENTRY(IFolderGetItemName) 44 #endif 45 Z7_COM_QI_ENTRY(IFolderWasChanged) 46 // Z7_COM_QI_ENTRY(IFolderOperationsDeleteToRecycleBin) 47 Z7_COM_QI_ENTRY(IFolderOperations) 48 Z7_COM_QI_ENTRY(IFolderClone) 49 Z7_COM_QI_ENTRY(IFolderGetSystemIconIndex) 50 Z7_COM_QI_END 51 Z7_COM_ADDREF_RELEASE 52 53 Z7_IFACE_COM7_IMP(IFolderFolder) 54 Z7_IFACE_COM7_IMP(IFolderCompare) 55 #ifdef USE_UNICODE_FSTRING 56 Z7_IFACE_COM7_IMP(IFolderGetItemName) 57 #endif 58 Z7_IFACE_COM7_IMP(IFolderWasChanged) 59 Z7_IFACE_COM7_IMP(IFolderOperations) 60 Z7_IFACE_COM7_IMP(IFolderClone) 61 Z7_IFACE_COM7_IMP(IFolderGetSystemIconIndex) 62 63 FString _pathBaseFile; // folder 64 FString _pathPrefix; // folder: 65 66 CObjectVector<CAltStream> Streams; 67 // CMyComPtr<IFolderFolder> _parentFolder; 68 69 NWindows::NFile::NFind::CFindChangeNotification _findChangeNotification; 70 71 HRESULT GetItemFullSize(unsigned index, UInt64 &size, IProgress *progress); 72 void GetAbsPath(const wchar_t *name, FString &absPath); 73 74 public: 75 // path must be with ':' at tail 76 HRESULT Init(const FString &path /* , IFolderFolder *parentFolder */); 77 GetFullPath(const CAltStream & item,FString & path)78 void GetFullPath(const CAltStream &item, FString &path) const 79 { 80 path = _pathPrefix; 81 path += us2fs(item.Name); 82 } 83 Clear()84 void Clear() 85 { 86 Streams.Clear(); 87 } 88 }; 89 90 } 91 92 #endif 93