xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/FileManager/AltStreamsFolder.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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