[SHELL32] Implement SHQueryRecycleBinW

This commit is contained in:
Mark Jansen 2023-04-19 20:30:24 +02:00
parent 08d808cc44
commit 4cdcea5e65
No known key found for this signature in database
GPG key ID: B39240EE84BEAE8B
3 changed files with 32 additions and 27 deletions

View file

@ -415,7 +415,7 @@ HRESULT WINAPI CRecycleBinItemContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO l
BOOL ret = TRUE; BOOL ret = TRUE;
/* restore file */ /* restore file */
if (lpcmi->lpVerb == MAKEINTRESOURCEA(1)) if (lpcmi->lpVerb == MAKEINTRESOURCEA(1))
ret = RestoreFile(Context.hDeletedFile); ret = RestoreFile(Context.hDeletedFile);
/* delete file */ /* delete file */
else else
@ -1244,10 +1244,10 @@ HRESULT WINAPI SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRB
HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo) HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo)
{ {
FIXME("%s, %p - stub\n", debugstr_w(pszRootPath), pSHQueryRBInfo); TRACE("%s, %p\n", debugstr_w(pszRootPath), pSHQueryRBInfo);
if (!(pszRootPath) || (pszRootPath[0] == 0) || if (!pszRootPath || (pszRootPath[0] == 0) ||
!(pSHQueryRBInfo) || (pSHQueryRBInfo->cbSize < sizeof(SHQUERYRBINFO))) !pSHQueryRBInfo || (pSHQueryRBInfo->cbSize < sizeof(SHQUERYRBINFO)))
{ {
return E_INVALIDARG; return E_INVALIDARG;
} }
@ -1255,5 +1255,33 @@ HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryR
pSHQueryRBInfo->i64Size = 0; pSHQueryRBInfo->i64Size = 0;
pSHQueryRBInfo->i64NumItems = 0; pSHQueryRBInfo->i64NumItems = 0;
CComPtr<IRecycleBin> spRecycleBin;
HRESULT hr;
if (FAILED_UNEXPECTEDLY((hr = GetDefaultRecycleBin(pszRootPath, &spRecycleBin))))
return hr;
CComPtr<IRecycleBinEnumList> spEnumList;
hr = spRecycleBin->EnumObjects(&spEnumList);
if (!SUCCEEDED(hr))
return hr;
while (TRUE)
{
CComPtr<IRecycleBinFile> spFile;
hr = spEnumList->Next(1, &spFile, NULL);
if (hr == S_FALSE)
return S_OK;
if (FAILED_UNEXPECTEDLY(hr))
return hr;
ULARGE_INTEGER Size = {};
if (FAILED_UNEXPECTEDLY((hr = spFile->GetFileSize(&Size))))
return hr;
pSHQueryRBInfo->i64Size += Size.QuadPart;
pSHQueryRBInfo->i64NumItems++;
}
return S_OK; return S_OK;
} }

View file

@ -376,18 +376,6 @@ cleanup:
return FALSE; return FALSE;
} }
BOOL WINAPI
GetRecycleBinDetails(
IN LPCWSTR pszVolume OPTIONAL,
OUT ULARGE_INTEGER *pulTotalItems,
OUT ULARGE_INTEGER *pulTotalSize)
{
pulTotalItems->QuadPart = 0;
pulTotalSize->QuadPart = 0;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
BOOL WINAPI BOOL WINAPI
RestoreFile( RestoreFile(
IN HANDLE hDeletedFile) IN HANDLE hDeletedFile)

View file

@ -164,17 +164,6 @@ GetDeletedFileDetailsW(
#define GetDeletedFileDetails GetDeletedFileDetailsA #define GetDeletedFileDetails GetDeletedFileDetailsA
#endif #endif
/* Get details about a whole recycle bin
* pszVolume:
* pulTotalItems:
* pulTotalSize
*/
BOOL WINAPI
GetRecycleBinDetails(
IN LPCWSTR pszVolume OPTIONAL,
OUT ULARGE_INTEGER *pulTotalItems,
OUT ULARGE_INTEGER *pulTotalSize);
/* Restores a deleted file /* Restores a deleted file
* hDeletedFile: handle of the deleted file to restore * hDeletedFile: handle of the deleted file to restore
* Returns TRUE if operation succeeded, FALSE otherwise. * Returns TRUE if operation succeeded, FALSE otherwise.