[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;
/* restore file */
if (lpcmi->lpVerb == MAKEINTRESOURCEA(1))
if (lpcmi->lpVerb == MAKEINTRESOURCEA(1))
ret = RestoreFile(Context.hDeletedFile);
/* delete file */
else
@ -1244,10 +1244,10 @@ HRESULT WINAPI SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRB
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) ||
!(pSHQueryRBInfo) || (pSHQueryRBInfo->cbSize < sizeof(SHQUERYRBINFO)))
if (!pszRootPath || (pszRootPath[0] == 0) ||
!pSHQueryRBInfo || (pSHQueryRBInfo->cbSize < sizeof(SHQUERYRBINFO)))
{
return E_INVALIDARG;
}
@ -1255,5 +1255,33 @@ HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryR
pSHQueryRBInfo->i64Size = 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;
}

View file

@ -376,18 +376,6 @@ cleanup:
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
RestoreFile(
IN HANDLE hDeletedFile)

View file

@ -164,17 +164,6 @@ GetDeletedFileDetailsW(
#define GetDeletedFileDetails GetDeletedFileDetailsA
#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
* hDeletedFile: handle of the deleted file to restore
* Returns TRUE if operation succeeded, FALSE otherwise.