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