mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
Load folder contents on expand instead of initially for much increased performance
This commit is contained in:
parent
a4df16628b
commit
a37fc2acc1
@ -69,33 +69,45 @@ namespace Wabbajack
|
|||||||
this.WhenActivated(disposables =>
|
this.WhenActivated(disposables =>
|
||||||
{
|
{
|
||||||
var fileTree = GetDirectoryContents(new DirectoryInfo(Settings.Source.ToString()));
|
var fileTree = GetDirectoryContents(new DirectoryInfo(Settings.Source.ToString()));
|
||||||
Files = LoadFileTree(new DirectoryInfo(Settings.Source.ToString()));
|
Files = LoadFiles(new DirectoryInfo(Settings.Source.ToString()));
|
||||||
Disposable.Create(() => { }).DisposeWith(disposables);
|
Disposable.Create(() => { }).DisposeWith(disposables);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<TreeViewItem> LoadFileTree(DirectoryInfo parent)
|
private IEnumerable<TreeViewItem> LoadFiles(DirectoryInfo parent)
|
||||||
{
|
{
|
||||||
var parentTreeItem = new TreeViewItem()
|
var parentTreeItem = new TreeViewItem()
|
||||||
{
|
{
|
||||||
Header = parent,
|
Header = parent,
|
||||||
IsExpanded = true,
|
IsExpanded = true,
|
||||||
ItemsSource = GetRecursiveFileTree(parent)
|
ItemsSource = LoadDirectoryContents(parent)
|
||||||
};
|
};
|
||||||
return [parentTreeItem];
|
return [parentTreeItem];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<TreeViewItem> GetRecursiveFileTree(DirectoryInfo parent)
|
private IEnumerable<TreeViewItem> LoadDirectoryContents(DirectoryInfo parent)
|
||||||
{
|
{
|
||||||
return parent.EnumerateDirectories()
|
return parent.EnumerateDirectories()
|
||||||
.OrderBy(dir => dir.Name)
|
.OrderBy(dir => dir.Name)
|
||||||
.Select(dir => new TreeViewItem() { Header = dir, ItemsSource = GetRecursiveFileTree(dir) })
|
.Select(dir => new TreeViewItem() { Header = dir, ItemsSource = (dir.EnumerateDirectories().Any() || dir.EnumerateFiles().Any()) ? new ObservableCollection<TreeViewItem>([new TreeViewItem() { Header = "Loading..." }]) : null}).Select(item => {
|
||||||
|
item.Expanded += LoadingItem_Expanded;
|
||||||
|
return item;
|
||||||
|
})
|
||||||
.Concat(parent.EnumerateFiles()
|
.Concat(parent.EnumerateFiles()
|
||||||
.OrderBy(file => file.Name)
|
.OrderBy(file => file.Name)
|
||||||
.Select(file => new TreeViewItem() { Header = file }));
|
.Select(file => new TreeViewItem() { Header = file }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void LoadingItem_Expanded(object sender, System.Windows.RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var parent = (TreeViewItem)e.OriginalSource;
|
||||||
|
var children = parent.ItemsSource.OfType<TreeViewItem>();
|
||||||
|
var firstChild = children.Any() ? children.First().Header : null;
|
||||||
|
if (firstChild != null && firstChild is string firstString && firstString == "Loading...")
|
||||||
|
parent.ItemsSource = LoadDirectoryContents((DirectoryInfo)parent.Header);
|
||||||
|
}
|
||||||
|
|
||||||
private IEnumerable<FileSystemInfo> GetDirectoryContents(DirectoryInfo dir)
|
private IEnumerable<FileSystemInfo> GetDirectoryContents(DirectoryInfo dir)
|
||||||
{
|
{
|
||||||
var directories = dir.EnumerateDirectories();
|
var directories = dir.EnumerateDirectories();
|
||||||
|
@ -15,6 +15,7 @@ using Wabbajack.Paths;
|
|||||||
using Wabbajack.Paths.IO;
|
using Wabbajack.Paths.IO;
|
||||||
using Wabbajack.ViewModels.Controls;
|
using Wabbajack.ViewModels.Controls;
|
||||||
using Wabbajack.Services.OSIntegrated;
|
using Wabbajack.Services.OSIntegrated;
|
||||||
|
using ReactiveMarbles.ObservableEvents;
|
||||||
|
|
||||||
namespace Wabbajack
|
namespace Wabbajack
|
||||||
{
|
{
|
||||||
@ -33,6 +34,7 @@ namespace Wabbajack
|
|||||||
this.WhenAny(x => x.ViewModel.Files)
|
this.WhenAny(x => x.ViewModel.Files)
|
||||||
.BindToStrict(this, v => v.FileTreeView.ItemsSource)
|
.BindToStrict(this, v => v.FileTreeView.ItemsSource)
|
||||||
.DisposeWith(disposables);
|
.DisposeWith(disposables);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user