xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/Far/PluginDelete.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // PluginDelete.cpp
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker 
5*f6dc9357SAndroid Build Coastguard Worker #include <stdio.h>
6*f6dc9357SAndroid Build Coastguard Worker 
7*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/StringConvert.h"
8*f6dc9357SAndroid Build Coastguard Worker #include "FarUtils.h"
9*f6dc9357SAndroid Build Coastguard Worker 
10*f6dc9357SAndroid Build Coastguard Worker #include "Messages.h"
11*f6dc9357SAndroid Build Coastguard Worker #include "Plugin.h"
12*f6dc9357SAndroid Build Coastguard Worker #include "UpdateCallbackFar.h"
13*f6dc9357SAndroid Build Coastguard Worker 
14*f6dc9357SAndroid Build Coastguard Worker using namespace NFar;
15*f6dc9357SAndroid Build Coastguard Worker 
DeleteFiles(PluginPanelItem * panelItems,unsigned numItems,int opMode)16*f6dc9357SAndroid Build Coastguard Worker int CPlugin::DeleteFiles(PluginPanelItem *panelItems, unsigned numItems, int opMode)
17*f6dc9357SAndroid Build Coastguard Worker {
18*f6dc9357SAndroid Build Coastguard Worker   if (numItems == 0)
19*f6dc9357SAndroid Build Coastguard Worker     return FALSE;
20*f6dc9357SAndroid Build Coastguard Worker   if (_agent->IsThere_ReadOnlyArc())
21*f6dc9357SAndroid Build Coastguard Worker   {
22*f6dc9357SAndroid Build Coastguard Worker     g_StartupInfo.ShowMessage(NMessageID::kUpdateNotSupportedForThisArchive);
23*f6dc9357SAndroid Build Coastguard Worker     return FALSE;
24*f6dc9357SAndroid Build Coastguard Worker   }
25*f6dc9357SAndroid Build Coastguard Worker   if ((opMode & OPM_SILENT) == 0)
26*f6dc9357SAndroid Build Coastguard Worker   {
27*f6dc9357SAndroid Build Coastguard Worker     const char *msgItems[]=
28*f6dc9357SAndroid Build Coastguard Worker     {
29*f6dc9357SAndroid Build Coastguard Worker       g_StartupInfo.GetMsgString(NMessageID::kDeleteTitle),
30*f6dc9357SAndroid Build Coastguard Worker       g_StartupInfo.GetMsgString(NMessageID::kDeleteFiles),
31*f6dc9357SAndroid Build Coastguard Worker       g_StartupInfo.GetMsgString(NMessageID::kDeleteDelete),
32*f6dc9357SAndroid Build Coastguard Worker       g_StartupInfo.GetMsgString(NMessageID::kDeleteCancel)
33*f6dc9357SAndroid Build Coastguard Worker     };
34*f6dc9357SAndroid Build Coastguard Worker 
35*f6dc9357SAndroid Build Coastguard Worker     // char msg[1024];
36*f6dc9357SAndroid Build Coastguard Worker     AString str1;
37*f6dc9357SAndroid Build Coastguard Worker 
38*f6dc9357SAndroid Build Coastguard Worker     if (numItems == 1)
39*f6dc9357SAndroid Build Coastguard Worker     {
40*f6dc9357SAndroid Build Coastguard Worker       str1 = g_StartupInfo.GetMsgString(NMessageID::kDeleteFile);
41*f6dc9357SAndroid Build Coastguard Worker       AString name (panelItems[0].FindData.cFileName);
42*f6dc9357SAndroid Build Coastguard Worker       const unsigned kSizeLimit = 48;
43*f6dc9357SAndroid Build Coastguard Worker       if (name.Len() > kSizeLimit)
44*f6dc9357SAndroid Build Coastguard Worker       {
45*f6dc9357SAndroid Build Coastguard Worker         UString s = MultiByteToUnicodeString(name, CP_OEMCP);
46*f6dc9357SAndroid Build Coastguard Worker         ReduceString(s, kSizeLimit);
47*f6dc9357SAndroid Build Coastguard Worker         name = UnicodeStringToMultiByte(s, CP_OEMCP);
48*f6dc9357SAndroid Build Coastguard Worker       }
49*f6dc9357SAndroid Build Coastguard Worker       str1.Replace(AString ("%.40s"), name);
50*f6dc9357SAndroid Build Coastguard Worker       msgItems[1] = str1;
51*f6dc9357SAndroid Build Coastguard Worker       // sprintf(msg, g_StartupInfo.GetMsgString(NMessageID::kDeleteFile), panelItems[0].FindData.cFileName);
52*f6dc9357SAndroid Build Coastguard Worker       // msgItems[2] = msg;
53*f6dc9357SAndroid Build Coastguard Worker     }
54*f6dc9357SAndroid Build Coastguard Worker     else if (numItems > 1)
55*f6dc9357SAndroid Build Coastguard Worker     {
56*f6dc9357SAndroid Build Coastguard Worker       str1 = g_StartupInfo.GetMsgString(NMessageID::kDeleteNumberOfFiles);
57*f6dc9357SAndroid Build Coastguard Worker       {
58*f6dc9357SAndroid Build Coastguard Worker         AString n;
59*f6dc9357SAndroid Build Coastguard Worker         n.Add_UInt32(numItems);
60*f6dc9357SAndroid Build Coastguard Worker         str1.Replace(AString ("%d"), n);
61*f6dc9357SAndroid Build Coastguard Worker       }
62*f6dc9357SAndroid Build Coastguard Worker       msgItems[1] = str1;
63*f6dc9357SAndroid Build Coastguard Worker       // sprintf(msg, g_StartupInfo.GetMsgString(NMessageID::kDeleteNumberOfFiles), numItems);
64*f6dc9357SAndroid Build Coastguard Worker       // msgItems[1] = msg;
65*f6dc9357SAndroid Build Coastguard Worker     }
66*f6dc9357SAndroid Build Coastguard Worker     if (g_StartupInfo.ShowMessage(FMSG_WARNING, NULL, msgItems, Z7_ARRAY_SIZE(msgItems), 2) != 0)
67*f6dc9357SAndroid Build Coastguard Worker       return (FALSE);
68*f6dc9357SAndroid Build Coastguard Worker   }
69*f6dc9357SAndroid Build Coastguard Worker 
70*f6dc9357SAndroid Build Coastguard Worker   CScreenRestorer screenRestorer;
71*f6dc9357SAndroid Build Coastguard Worker   CProgressBox progressBox;
72*f6dc9357SAndroid Build Coastguard Worker   CProgressBox *progressBoxPointer = NULL;
73*f6dc9357SAndroid Build Coastguard Worker   if ((opMode & OPM_SILENT) == 0 && (opMode & OPM_FIND ) == 0)
74*f6dc9357SAndroid Build Coastguard Worker   {
75*f6dc9357SAndroid Build Coastguard Worker     screenRestorer.Save();
76*f6dc9357SAndroid Build Coastguard Worker 
77*f6dc9357SAndroid Build Coastguard Worker     progressBoxPointer = &progressBox;
78*f6dc9357SAndroid Build Coastguard Worker     progressBox.Init(
79*f6dc9357SAndroid Build Coastguard Worker         // g_StartupInfo.GetMsgString(NMessageID::kWaitTitle),
80*f6dc9357SAndroid Build Coastguard Worker         g_StartupInfo.GetMsgString(NMessageID::kDeleting));
81*f6dc9357SAndroid Build Coastguard Worker   }
82*f6dc9357SAndroid Build Coastguard Worker 
83*f6dc9357SAndroid Build Coastguard Worker   /*
84*f6dc9357SAndroid Build Coastguard Worker   CWorkDirTempFile tempFile;
85*f6dc9357SAndroid Build Coastguard Worker   if (tempFile.CreateTempFile(m_FileName) != S_OK)
86*f6dc9357SAndroid Build Coastguard Worker     return FALSE;
87*f6dc9357SAndroid Build Coastguard Worker   */
88*f6dc9357SAndroid Build Coastguard Worker 
89*f6dc9357SAndroid Build Coastguard Worker   CObjArray<UInt32> indices(numItems);
90*f6dc9357SAndroid Build Coastguard Worker   unsigned i;
91*f6dc9357SAndroid Build Coastguard Worker   for (i = 0; i < numItems; i++)
92*f6dc9357SAndroid Build Coastguard Worker     indices[i] = (UInt32)panelItems[i].UserData;
93*f6dc9357SAndroid Build Coastguard Worker 
94*f6dc9357SAndroid Build Coastguard Worker   /*
95*f6dc9357SAndroid Build Coastguard Worker   UStringVector pathVector;
96*f6dc9357SAndroid Build Coastguard Worker   GetPathParts(pathVector);
97*f6dc9357SAndroid Build Coastguard Worker 
98*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<IOutFolderArchive> outArchive;
99*f6dc9357SAndroid Build Coastguard Worker   HRESULT result = m_ArchiveHandler.QueryInterface(IID_IOutFolderArchive, &outArchive);
100*f6dc9357SAndroid Build Coastguard Worker   if (result != S_OK)
101*f6dc9357SAndroid Build Coastguard Worker   {
102*f6dc9357SAndroid Build Coastguard Worker     g_StartupInfo.ShowMessage(NMessageID::kUpdateNotSupportedForThisArchive);
103*f6dc9357SAndroid Build Coastguard Worker     return FALSE;
104*f6dc9357SAndroid Build Coastguard Worker   }
105*f6dc9357SAndroid Build Coastguard Worker   */
106*f6dc9357SAndroid Build Coastguard Worker 
107*f6dc9357SAndroid Build Coastguard Worker   CUpdateCallback100Imp *updateCallbackSpec = new CUpdateCallback100Imp;
108*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<IFolderArchiveUpdateCallback> updateCallback(updateCallbackSpec);
109*f6dc9357SAndroid Build Coastguard Worker 
110*f6dc9357SAndroid Build Coastguard Worker   updateCallbackSpec->Init(/* m_ArchiveHandler, */ progressBoxPointer);
111*f6dc9357SAndroid Build Coastguard Worker   updateCallbackSpec->PasswordIsDefined = PasswordIsDefined;
112*f6dc9357SAndroid Build Coastguard Worker   updateCallbackSpec->Password = Password;
113*f6dc9357SAndroid Build Coastguard Worker 
114*f6dc9357SAndroid Build Coastguard Worker   /*
115*f6dc9357SAndroid Build Coastguard Worker   outArchive->SetFolder(_folder);
116*f6dc9357SAndroid Build Coastguard Worker   result = outArchive->DeleteItems(tempFile.OutStream, indices, numItems, updateCallback);
117*f6dc9357SAndroid Build Coastguard Worker   updateCallback.Release();
118*f6dc9357SAndroid Build Coastguard Worker   outArchive.Release();
119*f6dc9357SAndroid Build Coastguard Worker 
120*f6dc9357SAndroid Build Coastguard Worker   if (result == S_OK)
121*f6dc9357SAndroid Build Coastguard Worker   {
122*f6dc9357SAndroid Build Coastguard Worker     result = AfterUpdate(tempFile, pathVector);
123*f6dc9357SAndroid Build Coastguard Worker   }
124*f6dc9357SAndroid Build Coastguard Worker   */
125*f6dc9357SAndroid Build Coastguard Worker 
126*f6dc9357SAndroid Build Coastguard Worker   HRESULT result;
127*f6dc9357SAndroid Build Coastguard Worker   {
128*f6dc9357SAndroid Build Coastguard Worker     CMyComPtr<IFolderOperations> folderOperations;
129*f6dc9357SAndroid Build Coastguard Worker     result = _folder.QueryInterface(IID_IFolderOperations, &folderOperations);
130*f6dc9357SAndroid Build Coastguard Worker     if (folderOperations)
131*f6dc9357SAndroid Build Coastguard Worker       result = folderOperations->Delete(indices, numItems, updateCallback);
132*f6dc9357SAndroid Build Coastguard Worker     else if (result != S_OK)
133*f6dc9357SAndroid Build Coastguard Worker       result = E_FAIL;
134*f6dc9357SAndroid Build Coastguard Worker   }
135*f6dc9357SAndroid Build Coastguard Worker 
136*f6dc9357SAndroid Build Coastguard Worker   if (result != S_OK)
137*f6dc9357SAndroid Build Coastguard Worker   {
138*f6dc9357SAndroid Build Coastguard Worker     ShowSysErrorMessage(result);
139*f6dc9357SAndroid Build Coastguard Worker     return FALSE;
140*f6dc9357SAndroid Build Coastguard Worker   }
141*f6dc9357SAndroid Build Coastguard Worker 
142*f6dc9357SAndroid Build Coastguard Worker   SetCurrentDirVar();
143*f6dc9357SAndroid Build Coastguard Worker   return TRUE;
144*f6dc9357SAndroid Build Coastguard Worker }
145