xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/FileManager/FSFolder.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // FSFolder.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_FS_FOLDER_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_FS_FOLDER_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyCom.h"
7*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyBuffer.h"
8*f6dc9357SAndroid Build Coastguard Worker 
9*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/FileFind.h"
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker #include "../../Archive/IArchive.h"
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker #include "IFolder.h"
14*f6dc9357SAndroid Build Coastguard Worker #include "TextPairs.h"
15*f6dc9357SAndroid Build Coastguard Worker 
16*f6dc9357SAndroid Build Coastguard Worker namespace NFsFolder {
17*f6dc9357SAndroid Build Coastguard Worker 
18*f6dc9357SAndroid Build Coastguard Worker class CFSFolder;
19*f6dc9357SAndroid Build Coastguard Worker 
20*f6dc9357SAndroid Build Coastguard Worker #define FS_SHOW_LINKS_INFO
21*f6dc9357SAndroid Build Coastguard Worker // #define FS_SHOW_CHANGE_TIME
22*f6dc9357SAndroid Build Coastguard Worker 
23*f6dc9357SAndroid Build Coastguard Worker struct CDirItem: public NWindows::NFile::NFind::CFileInfo
24*f6dc9357SAndroid Build Coastguard Worker {
25*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE
26*f6dc9357SAndroid Build Coastguard Worker   UInt64 PackSize;
27*f6dc9357SAndroid Build Coastguard Worker #endif
28*f6dc9357SAndroid Build Coastguard Worker 
29*f6dc9357SAndroid Build Coastguard Worker #ifdef FS_SHOW_LINKS_INFO
30*f6dc9357SAndroid Build Coastguard Worker   FILETIME ChangeTime;
31*f6dc9357SAndroid Build Coastguard Worker   UInt64 FileIndex;
32*f6dc9357SAndroid Build Coastguard Worker   UInt32 NumLinks;
33*f6dc9357SAndroid Build Coastguard Worker   bool FileInfo_Defined;
34*f6dc9357SAndroid Build Coastguard Worker   bool FileInfo_WasRequested;
35*f6dc9357SAndroid Build Coastguard Worker   bool ChangeTime_Defined;
36*f6dc9357SAndroid Build Coastguard Worker   bool ChangeTime_WasRequested;
37*f6dc9357SAndroid Build Coastguard Worker #endif
38*f6dc9357SAndroid Build Coastguard Worker 
39*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE
40*f6dc9357SAndroid Build Coastguard Worker   bool PackSize_Defined;
41*f6dc9357SAndroid Build Coastguard Worker #endif
42*f6dc9357SAndroid Build Coastguard Worker 
43*f6dc9357SAndroid Build Coastguard Worker   bool FolderStat_Defined;
44*f6dc9357SAndroid Build Coastguard Worker   int Parent;
45*f6dc9357SAndroid Build Coastguard Worker 
46*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE
47*f6dc9357SAndroid Build Coastguard Worker   CByteBuffer Reparse;
48*f6dc9357SAndroid Build Coastguard Worker #endif
49*f6dc9357SAndroid Build Coastguard Worker 
50*f6dc9357SAndroid Build Coastguard Worker   UInt64 NumFolders;
51*f6dc9357SAndroid Build Coastguard Worker   UInt64 NumFiles;
52*f6dc9357SAndroid Build Coastguard Worker };
53*f6dc9357SAndroid Build Coastguard Worker 
54*f6dc9357SAndroid Build Coastguard Worker /*
55*f6dc9357SAndroid Build Coastguard Worker struct CAltStream
56*f6dc9357SAndroid Build Coastguard Worker {
57*f6dc9357SAndroid Build Coastguard Worker   UInt64 Size;
58*f6dc9357SAndroid Build Coastguard Worker   UInt64 PackSize;
59*f6dc9357SAndroid Build Coastguard Worker   bool PackSize_Defined;
60*f6dc9357SAndroid Build Coastguard Worker   int Parent;
61*f6dc9357SAndroid Build Coastguard Worker   UString Name;
62*f6dc9357SAndroid Build Coastguard Worker };
63*f6dc9357SAndroid Build Coastguard Worker */
64*f6dc9357SAndroid Build Coastguard Worker 
65*f6dc9357SAndroid Build Coastguard Worker struct CFsFolderStat
66*f6dc9357SAndroid Build Coastguard Worker {
67*f6dc9357SAndroid Build Coastguard Worker   UInt64 NumFolders;
68*f6dc9357SAndroid Build Coastguard Worker   UInt64 NumFiles;
69*f6dc9357SAndroid Build Coastguard Worker   UInt64 Size;
70*f6dc9357SAndroid Build Coastguard Worker   IProgress *Progress;
71*f6dc9357SAndroid Build Coastguard Worker   FString Path;
72*f6dc9357SAndroid Build Coastguard Worker 
CFsFolderStatCFsFolderStat73*f6dc9357SAndroid Build Coastguard Worker   CFsFolderStat(): NumFolders(0), NumFiles(0), Size(0), Progress(NULL) {}
74*f6dc9357SAndroid Build Coastguard Worker   CFsFolderStat(const FString &path, IProgress *progress = NULL):
75*f6dc9357SAndroid Build Coastguard Worker       NumFolders(0), NumFiles(0), Size(0), Progress(progress), Path(path) {}
76*f6dc9357SAndroid Build Coastguard Worker 
77*f6dc9357SAndroid Build Coastguard Worker   HRESULT Enumerate();
78*f6dc9357SAndroid Build Coastguard Worker };
79*f6dc9357SAndroid Build Coastguard Worker 
80*f6dc9357SAndroid Build Coastguard Worker class CFSFolder Z7_final:
81*f6dc9357SAndroid Build Coastguard Worker   public IFolderFolder,
82*f6dc9357SAndroid Build Coastguard Worker   public IArchiveGetRawProps,
83*f6dc9357SAndroid Build Coastguard Worker   public IFolderCompare,
84*f6dc9357SAndroid Build Coastguard Worker   #ifdef USE_UNICODE_FSTRING
85*f6dc9357SAndroid Build Coastguard Worker   public IFolderGetItemName,
86*f6dc9357SAndroid Build Coastguard Worker   #endif
87*f6dc9357SAndroid Build Coastguard Worker   public IFolderWasChanged,
88*f6dc9357SAndroid Build Coastguard Worker   public IFolderOperations,
89*f6dc9357SAndroid Build Coastguard Worker   // public IFolderOperationsDeleteToRecycleBin,
90*f6dc9357SAndroid Build Coastguard Worker   public IFolderCalcItemFullSize,
91*f6dc9357SAndroid Build Coastguard Worker   public IFolderClone,
92*f6dc9357SAndroid Build Coastguard Worker   public IFolderGetSystemIconIndex,
93*f6dc9357SAndroid Build Coastguard Worker   public IFolderSetFlatMode,
94*f6dc9357SAndroid Build Coastguard Worker   // public IFolderSetShowNtfsStreamsMode,
95*f6dc9357SAndroid Build Coastguard Worker   public CMyUnknownImp
96*f6dc9357SAndroid Build Coastguard Worker {
97*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_BEGIN2(IFolderFolder)
98*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(IArchiveGetRawProps)
99*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(IFolderCompare)
100*f6dc9357SAndroid Build Coastguard Worker     #ifdef USE_UNICODE_FSTRING
101*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(IFolderGetItemName)
102*f6dc9357SAndroid Build Coastguard Worker     #endif
103*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(IFolderWasChanged)
104*f6dc9357SAndroid Build Coastguard Worker     // Z7_COM_QI_ENTRY(IFolderOperationsDeleteToRecycleBin)
105*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(IFolderOperations)
106*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(IFolderCalcItemFullSize)
107*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(IFolderClone)
108*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(IFolderGetSystemIconIndex)
109*f6dc9357SAndroid Build Coastguard Worker     Z7_COM_QI_ENTRY(IFolderSetFlatMode)
110*f6dc9357SAndroid Build Coastguard Worker     // Z7_COM_QI_ENTRY(IFolderSetShowNtfsStreamsMode)
111*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_END
112*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_ADDREF_RELEASE
113*f6dc9357SAndroid Build Coastguard Worker 
114*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IFolderFolder)
115*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IArchiveGetRawProps)
116*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IFolderCompare)
117*f6dc9357SAndroid Build Coastguard Worker   #ifdef USE_UNICODE_FSTRING
118*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IFolderGetItemName)
119*f6dc9357SAndroid Build Coastguard Worker   #endif
120*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IFolderWasChanged)
121*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IFolderOperations)
122*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IFolderCalcItemFullSize)
123*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IFolderClone)
124*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IFolderGetSystemIconIndex)
125*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IFolderSetFlatMode)
126*f6dc9357SAndroid Build Coastguard Worker   // Z7_IFACE_COM7_IMP(IFolderSetShowNtfsStreamsMode)
127*f6dc9357SAndroid Build Coastguard Worker 
128*f6dc9357SAndroid Build Coastguard Worker   bool _flatMode;
129*f6dc9357SAndroid Build Coastguard Worker   bool _commentsAreLoaded;
130*f6dc9357SAndroid Build Coastguard Worker   // bool _scanAltStreams;
131*f6dc9357SAndroid Build Coastguard Worker 
132*f6dc9357SAndroid Build Coastguard Worker   FString _path;
133*f6dc9357SAndroid Build Coastguard Worker   CObjectVector<CDirItem> Files;
134*f6dc9357SAndroid Build Coastguard Worker   FStringVector Folders;
135*f6dc9357SAndroid Build Coastguard Worker   // CObjectVector<CAltStream> Streams;
136*f6dc9357SAndroid Build Coastguard Worker   // CMyComPtr<IFolderFolder> _parentFolder;
137*f6dc9357SAndroid Build Coastguard Worker 
138*f6dc9357SAndroid Build Coastguard Worker   CPairsStorage _comments;
139*f6dc9357SAndroid Build Coastguard Worker 
140*f6dc9357SAndroid Build Coastguard Worker   #ifdef _WIN32
141*f6dc9357SAndroid Build Coastguard Worker   NWindows::NFile::NFind::CFindChangeNotification _findChangeNotification;
142*f6dc9357SAndroid Build Coastguard Worker   #endif
143*f6dc9357SAndroid Build Coastguard Worker 
144*f6dc9357SAndroid Build Coastguard Worker   // HRESULT GetItemFullSize(unsigned index, UInt64 &size, IProgress *progress);
145*f6dc9357SAndroid Build Coastguard Worker   void GetAbsPath(const wchar_t *name, FString &absPath);
146*f6dc9357SAndroid Build Coastguard Worker   HRESULT BindToFolderSpec(CFSTR name, IFolderFolder **resultFolder);
147*f6dc9357SAndroid Build Coastguard Worker 
148*f6dc9357SAndroid Build Coastguard Worker   bool LoadComments();
149*f6dc9357SAndroid Build Coastguard Worker   bool SaveComments();
150*f6dc9357SAndroid Build Coastguard Worker   HRESULT LoadSubItems(int dirItem, const FString &path);
151*f6dc9357SAndroid Build Coastguard Worker 
152*f6dc9357SAndroid Build Coastguard Worker   #ifdef FS_SHOW_LINKS_INFO
153*f6dc9357SAndroid Build Coastguard Worker   bool ReadFileInfo(CDirItem &di);
154*f6dc9357SAndroid Build Coastguard Worker   void ReadChangeTime(CDirItem &di);
155*f6dc9357SAndroid Build Coastguard Worker   #endif
156*f6dc9357SAndroid Build Coastguard Worker 
157*f6dc9357SAndroid Build Coastguard Worker public:
158*f6dc9357SAndroid Build Coastguard Worker   HRESULT Init(const FString &path /* , IFolderFolder *parentFolder */);
159*f6dc9357SAndroid Build Coastguard Worker   #if !defined(_WIN32) || defined(UNDER_CE)
InitToRoot()160*f6dc9357SAndroid Build Coastguard Worker   HRESULT InitToRoot() { return Init((FString) FSTRING_PATH_SEPARATOR /* , NULL */); }
161*f6dc9357SAndroid Build Coastguard Worker   #endif
162*f6dc9357SAndroid Build Coastguard Worker 
CFSFolder()163*f6dc9357SAndroid Build Coastguard Worker   CFSFolder():
164*f6dc9357SAndroid Build Coastguard Worker     _flatMode(false),
165*f6dc9357SAndroid Build Coastguard Worker     _commentsAreLoaded(false)
166*f6dc9357SAndroid Build Coastguard Worker     // , _scanAltStreams(false)
167*f6dc9357SAndroid Build Coastguard Worker     {}
168*f6dc9357SAndroid Build Coastguard Worker 
GetFullPath(const CDirItem & item,FString & path)169*f6dc9357SAndroid Build Coastguard Worker   void GetFullPath(const CDirItem &item, FString &path) const
170*f6dc9357SAndroid Build Coastguard Worker   {
171*f6dc9357SAndroid Build Coastguard Worker     // FString prefix;
172*f6dc9357SAndroid Build Coastguard Worker     // GetPrefix(item, prefix);
173*f6dc9357SAndroid Build Coastguard Worker     path = _path;
174*f6dc9357SAndroid Build Coastguard Worker     if (item.Parent >= 0)
175*f6dc9357SAndroid Build Coastguard Worker       path += Folders[item.Parent];
176*f6dc9357SAndroid Build Coastguard Worker     path += item.Name;
177*f6dc9357SAndroid Build Coastguard Worker   }
178*f6dc9357SAndroid Build Coastguard Worker 
179*f6dc9357SAndroid Build Coastguard Worker   // void GetPrefix(const CDirItem &item, FString &prefix) const;
180*f6dc9357SAndroid Build Coastguard Worker 
181*f6dc9357SAndroid Build Coastguard Worker   FString GetRelPath(const CDirItem &item) const;
182*f6dc9357SAndroid Build Coastguard Worker 
Clear()183*f6dc9357SAndroid Build Coastguard Worker   void Clear()
184*f6dc9357SAndroid Build Coastguard Worker   {
185*f6dc9357SAndroid Build Coastguard Worker     Files.Clear();
186*f6dc9357SAndroid Build Coastguard Worker     Folders.Clear();
187*f6dc9357SAndroid Build Coastguard Worker     // Streams.Clear();
188*f6dc9357SAndroid Build Coastguard Worker   }
189*f6dc9357SAndroid Build Coastguard Worker };
190*f6dc9357SAndroid Build Coastguard Worker 
191*f6dc9357SAndroid Build Coastguard Worker struct CCopyStateIO
192*f6dc9357SAndroid Build Coastguard Worker {
193*f6dc9357SAndroid Build Coastguard Worker   IProgress *Progress;
194*f6dc9357SAndroid Build Coastguard Worker   UInt64 TotalSize;
195*f6dc9357SAndroid Build Coastguard Worker   UInt64 StartPos;
196*f6dc9357SAndroid Build Coastguard Worker   UInt64 CurrentSize;
197*f6dc9357SAndroid Build Coastguard Worker   bool DeleteSrcFile;
198*f6dc9357SAndroid Build Coastguard Worker 
199*f6dc9357SAndroid Build Coastguard Worker   int ErrorFileIndex;
200*f6dc9357SAndroid Build Coastguard Worker   UString ErrorMessage;
201*f6dc9357SAndroid Build Coastguard Worker 
CCopyStateIOCCopyStateIO202*f6dc9357SAndroid Build Coastguard Worker   CCopyStateIO(): TotalSize(0), StartPos(0), DeleteSrcFile(false) {}
203*f6dc9357SAndroid Build Coastguard Worker 
204*f6dc9357SAndroid Build Coastguard Worker   HRESULT MyCopyFile(CFSTR inPath, CFSTR outPath, DWORD attrib = INVALID_FILE_ATTRIBUTES);
205*f6dc9357SAndroid Build Coastguard Worker };
206*f6dc9357SAndroid Build Coastguard Worker 
207*f6dc9357SAndroid Build Coastguard Worker HRESULT SendLastErrorMessage(IFolderOperationsExtractCallback *callback, const FString &fileName);
208*f6dc9357SAndroid Build Coastguard Worker 
209*f6dc9357SAndroid Build Coastguard Worker /* destDirPrefix is allowed to be:
210*f6dc9357SAndroid Build Coastguard Worker    "full_path\" or "full_path:" for alt streams */
211*f6dc9357SAndroid Build Coastguard Worker 
212*f6dc9357SAndroid Build Coastguard Worker HRESULT CopyFileSystemItems(
213*f6dc9357SAndroid Build Coastguard Worker     const UStringVector &itemsPaths,
214*f6dc9357SAndroid Build Coastguard Worker     const FString &destDirPrefix,
215*f6dc9357SAndroid Build Coastguard Worker     bool moveMode,
216*f6dc9357SAndroid Build Coastguard Worker     IFolderOperationsExtractCallback *callback);
217*f6dc9357SAndroid Build Coastguard Worker 
218*f6dc9357SAndroid Build Coastguard Worker }
219*f6dc9357SAndroid Build Coastguard Worker 
220*f6dc9357SAndroid Build Coastguard Worker #endif
221