private static async Task parseRecycleBinAction(AppServiceRequestReceivedEventArgs args, string action) { switch (action) { case "Empty": // Shell function to empty recyclebin Shell32.SHEmptyRecycleBin(IntPtr.Zero, null, Shell32.SHERB.SHERB_NOCONFIRMATION | Shell32.SHERB.SHERB_NOPROGRESSUI); break; case "Query": var responseQuery = new ValueSet(); Shell32.SHQUERYRBINFO queryBinInfo = new Shell32.SHQUERYRBINFO(); queryBinInfo.cbSize = (uint)Marshal.SizeOf(queryBinInfo); var res = Shell32.SHQueryRecycleBin("", ref queryBinInfo); if (res == HRESULT.S_OK) { var numItems = queryBinInfo.i64NumItems; var binSize = queryBinInfo.i64Size; responseQuery.Add("NumItems", numItems); responseQuery.Add("BinSize", binSize); await args.Request.SendResponseAsync(responseQuery); } break; case "Enumerate": // Enumerate recyclebin contents and send response to UWP var responseEnum = new ValueSet(); var folderContentsList = new List <ShellFileItem>(); foreach (var folderItem in recycler) { try { var shellFileItem = GetRecycleBinItem(folderItem); folderContentsList.Add(shellFileItem); } catch (FileNotFoundException) { // Happens if files are being deleted } finally { folderItem.Dispose(); } } responseEnum.Add("Enumerate", JsonConvert.SerializeObject(folderContentsList)); await args.Request.SendResponseAsync(responseEnum); break; default: break; } }
private static async Task parseRecycleBinAction(AppServiceRequestReceivedEventArgs args, string action) { switch (action) { case "Empty": // Shell function to empty recyclebin Shell32.SHEmptyRecycleBin(IntPtr.Zero, null, Shell32.SHERB.SHERB_NOCONFIRMATION | Shell32.SHERB.SHERB_NOPROGRESSUI); break; case "Query": var responseQuery = new ValueSet(); Shell32.SHQUERYRBINFO queryBinInfo = new Shell32.SHQUERYRBINFO(); queryBinInfo.cbSize = (uint)Marshal.SizeOf(queryBinInfo); var res = Shell32.SHQueryRecycleBin(null, ref queryBinInfo); if (res == HRESULT.S_OK) { var numItems = queryBinInfo.i64NumItems; var binSize = queryBinInfo.i64Size; responseQuery.Add("NumItems", numItems); responseQuery.Add("BinSize", binSize); await args.Request.SendResponseAsync(responseQuery); } break; case "Enumerate": // Enumerate recyclebin contents and send response to UWP var responseEnum = new ValueSet(); var folderContentsList = new List <ShellFileItem>(); foreach (var folderItem in recycler) { try { string recyclePath = folderItem.FileSystemPath; // True path on disk string fileName = Path.GetFileName(folderItem.Name); // Original file name string filePath = folderItem.Name; // Original file path + name bool isFolder = folderItem.IsFolder && Path.GetExtension(folderItem.Name) != ".zip"; if (folderItem.Properties == null) { folderContentsList.Add(new ShellFileItem(isFolder, recyclePath, fileName, filePath, DateTime.Now, null, 0, null)); continue; } folderItem.Properties.TryGetValue <System.Runtime.InteropServices.ComTypes.FILETIME?>( Ole32.PROPERTYKEY.System.DateCreated, out var fileTime); var recycleDate = fileTime?.ToDateTime().ToLocalTime() ?? DateTime.Now; // This is LocalTime string fileSize = folderItem.Properties.TryGetValue <ulong?>( Ole32.PROPERTYKEY.System.Size, out var fileSizeBytes) ? folderItem.Properties.GetPropertyString(Ole32.PROPERTYKEY.System.Size) : null; folderItem.Properties.TryGetValue <string>( Ole32.PROPERTYKEY.System.ItemTypeText, out var fileType); folderContentsList.Add(new ShellFileItem(isFolder, recyclePath, fileName, filePath, recycleDate, fileSize, fileSizeBytes ?? 0, fileType)); } catch (FileNotFoundException) { // Happens if files are being deleted } finally { folderItem.Dispose(); } } responseEnum.Add("Enumerate", JsonConvert.SerializeObject(folderContentsList)); await args.Request.SendResponseAsync(responseEnum); break; default: break; } }