ReactOS 0.4.16-dev-927-g467dec4
CCleanupHandlerList Class Reference

#include <CCleanupHandlerList.hpp>

Public Member Functions

void LoadHandlers (WCHAR Drive)
 
DWORDLONG ScanDrive (IEmptyVolumeCacheCallBack *picb)
 
void ExecuteCleanup (IEmptyVolumeCacheCallBack *picb)
 
template<typename Fn >
void ForEach (Fn callback)
 

Private Attributes

CAtlList< CCleanupHandler * > m_Handlers
 
CStringW m_DriveStr
 

Detailed Description

Definition at line 9 of file CCleanupHandlerList.hpp.

Member Function Documentation

◆ ExecuteCleanup()

void CCleanupHandlerList::ExecuteCleanup ( IEmptyVolumeCacheCallBack picb)

Definition at line 128 of file CCleanupHandlerList.cpp.

129{
131 CString Caption;
133
134 DWORD TotalSelected = 0;
135 ForEach(
137 {
138 if (current->StateFlags & HANDLER_STATE_SELECTED)
139 TotalSelected++;
140 });
141
143 progress.Start(TotalSelected, Title, Caption);
144 int ItemIndex = 0;
145 ForEach(
147 {
148 if (!(current->StateFlags & HANDLER_STATE_SELECTED))
149 return;
150
151 Caption.Format(IDS_CLEANING, current->wszDisplayName.m_pData);
152 progress.Step(++ItemIndex, Caption);
153
154 // If there is nothing to clean, we might get STG_E_NOMOREFILES
155 if (current->SpaceUsed > 0)
156 {
157 HRESULT hr = current->Handler->Purge(-1, picb);
158 if (FAILED_UNEXPECTEDLY(hr))
159 return;
160 }
161 });
162 progress.Stop();
163}
#define HANDLER_STATE_SELECTED
#define IDS_CLEANING
Definition: resource.h:30
#define IDS_CLEANING_CAPTION
Definition: resource.h:29
#define IDS_DISK_CLEANUP
Definition: resource.h:25
cd_progress_ptr progress
Definition: cdjpeg.h:152
PXSTR GetString() noexcept
Definition: atlsimpstr.h:367
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:818
void ForEach(Fn callback)
static const WCHAR Title[]
Definition: oid.c:1259
unsigned long DWORD
Definition: ntddk_ex.h:95
if(dx< 0)
Definition: linetemp.h:194
struct task_struct * current
Definition: linux.c:32
#define MAKEINTRESOURCE
Definition: winuser.h:591

◆ ForEach()

template<typename Fn >
void CCleanupHandlerList::ForEach ( Fn  callback)
inline

Definition at line 22 of file CCleanupHandlerList.hpp.

23 {
24 for (POSITION it = m_Handlers.GetHeadPosition(); it; m_Handlers.GetNext(it))
25 {
27
29 }
30 }
CAtlList< CCleanupHandler * > m_Handlers
static IPrintDialogCallback callback
Definition: printdlg.c:326

Referenced by ExecuteCleanup(), CCleanMgrProperties::OnInitDialog(), ScanDrive(), and CCleanMgrProperties::UpdateSpaceUsed().

◆ LoadHandlers()

void CCleanupHandlerList::LoadHandlers ( WCHAR  Drive)

Definition at line 10 of file CCleanupHandlerList.cpp.

11{
12 m_DriveStr.Format(L"%c:", Drive);
13
14 CRegKey VolumeCaches;
15 if (VolumeCaches.Open(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\VolumeCaches", KEY_READ) != ERROR_SUCCESS)
16 return;
17
18 LONG ItemIndex = 0;
19 WCHAR szKeyName[MAX_PATH];
20
21 WCHAR wszVolume[] = { Drive, L':', L'\\', UNICODE_NULL };
22
23 while (TRUE)
24 {
25 DWORD dwSize = _countof(szKeyName);
26 if (VolumeCaches.EnumKey(ItemIndex++, szKeyName, &dwSize) != ERROR_SUCCESS)
27 {
28 break;
29 }
30
31
32 CRegKey hSubKey;
33 if (hSubKey.Open(VolumeCaches, szKeyName, KEY_READ) == ERROR_SUCCESS)
34 {
35 WCHAR GuidStr[50] = {};
36 dwSize = _countof(GuidStr);
37 if (hSubKey.QueryStringValue(NULL, GuidStr, &dwSize) != ERROR_SUCCESS)
38 {
39 continue;
40 }
41
42 GUID guid = {};
44 continue;
45
46 CCleanupHandler* handler = new CCleanupHandler(hSubKey, szKeyName, guid);
47
48 if (!handler->Initialize(wszVolume))
49 {
50 delete handler;
51 continue;
52 }
53
54 m_Handlers.AddTail(handler);
55 }
56 }
57
58 // Sort handlers
59 BOOL fChanged = m_Handlers.GetCount() > 0;
60 while (fChanged)
61 {
62 fChanged = FALSE;
63
64 for (size_t n = 0; n < m_Handlers.GetCount() - 1; n++)
65 {
66 POSITION leftPos = m_Handlers.FindIndex(n);
67 POSITION rightPos = m_Handlers.FindIndex(n+1);
68 CCleanupHandler* left = m_Handlers.GetAt(leftPos);
69 CCleanupHandler* right = m_Handlers.GetAt(rightPos);
70
71 if (right->Priority < left->Priority)
72 {
73 m_Handlers.SwapElements(leftPos, rightPos);
74 fChanged = TRUE;
75 }
76 else if (right->Priority == left->Priority)
77 {
78 CStringW leftStr(left->wszDisplayName);
79 if (leftStr.Compare(right->wszDisplayName) > 0)
80 {
81 m_Handlers.SwapElements(leftPos, rightPos);
82 fChanged = TRUE;
83 }
84 }
85 }
86 }
87}
PWCHAR Drive
Definition: chkdsk.c:73
LONG Open(HKEY hKeyParent, LPCTSTR lpszKeyName, REGSAM samDesired=KEY_READ|KEY_WRITE) noexcept
Definition: atlbase.h:1173
LONG QueryStringValue(LPCTSTR pszValueName, LPTSTR pszValue, ULONG *pnChars) noexcept
Definition: atlbase.h:1240
LONG EnumKey(DWORD iIndex, LPTSTR pszName, LPDWORD pnNameLength, FILETIME *pftLastWriteTime=NULL) noexcept
Definition: atlbase.h:1421
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define MAX_PATH
Definition: compat.h:34
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
UINT(* handler)(MSIPACKAGE *)
Definition: action.c:7512
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338
unsigned int BOOL
Definition: ntddk_ex.h:94
GLdouble n
Definition: glext.h:7729
GLdouble GLdouble right
Definition: glext.h:10859
GLint left
Definition: glext.h:7726
const GUID * guid
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define KEY_READ
Definition: nt_native.h:1023
#define UNICODE_NULL
#define L(x)
Definition: ntvdm.h:50
long LONG
Definition: pedump.c:60
#define _countof(array)
Definition: sndvol32.h:70
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ ScanDrive()

DWORDLONG CCleanupHandlerList::ScanDrive ( IEmptyVolumeCacheCallBack picb)

Definition at line 91 of file CCleanupHandlerList.cpp.

92{
94 CString Caption;
97 progress.Start((DWORD)m_Handlers.GetCount(), Title, Caption);
98 int ItemIndex = 0;
99 DWORDLONG TotalSpaceUsed = 0;
100 ForEach(
102 {
103 Caption.Format(IDS_SCANNING, current->wszDisplayName.m_pData);
104 progress.Step(++ItemIndex, Caption);
105
106 HRESULT hr = current->Handler->GetSpaceUsed(&current->SpaceUsed, picb);
107
109 {
110 current->ShowHandler = false;
111 current->StateFlags &= ~HANDLER_STATE_SELECTED;
112 return;
113 }
114
115 if (current->SpaceUsed == 0 && current->DontShowIfZero())
116 {
117 current->ShowHandler = false;
118 current->StateFlags &= ~HANDLER_STATE_SELECTED;
119 }
120 TotalSpaceUsed += current->SpaceUsed;
121 });
122 progress.Stop();
123
124 return TotalSpaceUsed;
125}
#define IDS_CALCULATING
Definition: resource.h:27
#define IDS_SCANNING
Definition: resource.h:28
unsigned long long DWORDLONG
Definition: intsafe.h:93
HRESULT hr
Definition: shlfolder.c:183

Member Data Documentation

◆ m_DriveStr

CStringW CCleanupHandlerList::m_DriveStr
private

Definition at line 13 of file CCleanupHandlerList.hpp.

Referenced by ExecuteCleanup(), LoadHandlers(), and ScanDrive().

◆ m_Handlers

CAtlList<CCleanupHandler *> CCleanupHandlerList::m_Handlers
private

Definition at line 12 of file CCleanupHandlerList.hpp.

Referenced by ForEach(), LoadHandlers(), and ScanDrive().


The documentation for this class was generated from the following files: