Skip to content

Commit

Permalink
Ghetto scan files asynchronously
Browse files Browse the repository at this point in the history
  • Loading branch information
iMoD1998 committed Oct 9, 2020
1 parent 0e4e365 commit 59ec19b
Showing 1 changed file with 57 additions and 18 deletions.
75 changes: 57 additions & 18 deletions Visual Studio Project Cleaner/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
Expand Down Expand Up @@ -182,37 +182,76 @@ private async void DeleteButton_Click(object sender, RoutedEventArgs e)
}
}

private async Task<List<VisualStudioTempFile>> GetFiles(string Path, bool ScanSubDirs, List<VisualStudioTempExtension> ExtensionsToSearch)
{
List<VisualStudioTempFile> TempFiles = new List<VisualStudioTempFile>();

var FileNames = Directory.GetFiles(Path, "*", ScanSubDirs ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
var EnabledExtensions = ExtensionsToSearch.Where(X => X.Enabled);

/*Can be optimized?*/
foreach (var FileName in FileNames)
{
foreach (var Extension in EnabledExtensions)
{
if (Extension.Pattern.IsMatch(FileName))
{
//this.FileListDataGrid.Items.Add(new VisualStudioTempFile { Path = FileName, Size = new FileInfo(FileName).Length });
TempFiles.Add(new VisualStudioTempFile { Path = FileName, Size = new FileInfo(FileName).Length });
break;
}
}
}

return TempFiles;
}

private async void RefreshButton_Click(object sender, RoutedEventArgs e)
{
this.FileListDataGrid.Items.Clear();

if (!Directory.Exists(PathBox.Text))
return;

try
string Path = PathBox.Text;
bool ScanSubDirs = ScanSubDirsCheckBox.IsEnabled;
var FileExtensionsToSearch = this.FileExtensions.ToList();

if (!FileExtensionsToSearch.Any(X => X.Enabled))
{
var FileNames = Directory.GetFiles(PathBox.Text, "*", ScanSubDirsCheckBox.IsChecked == true ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
var EnabledExtensions = FileExtensions.Where(X => X._Enabled);
await this.ShowMessageAsync("No filetypes selected", "Select a filetype in settings -> file types ");

/*Can be optimized?*/
foreach (var FileName in FileNames)
{
foreach (var Extension in EnabledExtensions)
{
if (Extension.Pattern.IsMatch(FileName))
{
this.FileListDataGrid.Items.Add(new VisualStudioTempFile { Path = FileName, Size = new FileInfo(FileName).Length });
this.SettingsFlyout.IsOpen = true;

break;
}
}
}
return;
}

var Controller = await this.ShowProgressAsync("Scanning files...", "Please wait...");
Controller.SetIndeterminate();

try
{
List<VisualStudioTempFile> TempFiles = await Task.Run(() => GetFiles(Path, ScanSubDirs, FileExtensionsToSearch));

TempFiles.ForEach(X => this.FileListDataGrid.Items.Add(X));

this.FileStatus.Content = $"{this.FileListDataGrid.Items.Count} file(s) { Util.ConvertBytesToString(this.FileListDataGrid.Items.OfType<VisualStudioTempFile>().ToList().Sum(X => X.Size)) }";

await Controller.CloseAsync();
}
catch(UnauthorizedAccessException E)
catch ( Exception E )
{
await this.ShowMessageAsync("Error", "Not enough permissions to access " + PathBox.Text);
if(Controller.IsOpen == true)
{
await Controller.CloseAsync();
}

if (E is UnauthorizedAccessException)
{
await this.ShowMessageAsync("Error", "Not enough permissions to access " + PathBox.Text);
}

this.FileStatus.Content = $"0 file(s) 0 bytes";
}
}

Expand Down

0 comments on commit 59ec19b

Please sign in to comment.