Optimalization, file name&extension

This commit is contained in:
2022-02-08 09:53:20 +01:00
parent 2b5ab06b57
commit 755793c85c
22 changed files with 268 additions and 85 deletions

View File

@@ -72,7 +72,7 @@ namespace FileTime.Avalonia.ViewModels
{
get
{
if (!_isInitialized) Task.Run(Refresh);
if (!_isInitialized) Task.Run(Refresh).Wait();
return _containers;
}
set
@@ -90,7 +90,7 @@ namespace FileTime.Avalonia.ViewModels
{
get
{
if (!_isInitialized) Task.Run(Refresh);
if (!_isInitialized) Task.Run(Refresh).Wait();
return _elements;
}
set
@@ -107,7 +107,7 @@ namespace FileTime.Avalonia.ViewModels
{
get
{
if (!_isInitialized) Task.Run(Refresh);
if (!_isInitialized) Task.Run(Refresh).Wait();
return _items;
}
set
@@ -139,15 +139,15 @@ namespace FileTime.Avalonia.ViewModels
private async Task Container_Refreshed(object? sender, AsyncEventArgs e, CancellationToken token = default)
{
await Refresh(false, false, token);
await Refresh(false, false, token: token);
}
[Obsolete($"Use the parametrizable version of {nameof(Refresh)}.")]
private async Task Refresh()
{
await Refresh(true);
await Refresh(true, silent: true);
}
private async Task Refresh(bool initializeChildren, bool alloweReuse = true, CancellationToken token = default)
private async Task Refresh(bool initializeChildren, bool alloweReuse = true, bool silent = false, CancellationToken token = default)
{
if (_isRefreshing) return;
@@ -169,9 +169,9 @@ namespace FileTime.Avalonia.ViewModels
}
}
if(await _container.GetElements() is IReadOnlyList<IElement> elements)
if (await _container.GetElements() is IReadOnlyList<IElement> elements)
{
foreach(var element in elements)
foreach (var element in elements)
{
var generator = async (IElement e) =>
{
@@ -203,9 +203,18 @@ namespace FileTime.Avalonia.ViewModels
containerToRemove?.Dispose();
}
Containers = new ObservableCollection<ContainerViewModel>(newContainers);
Elements = new ObservableCollection<ElementViewModel>(newElements);
Items = new ObservableCollection<IItemViewModel>(newContainers.Cast<IItemViewModel>().Concat(newElements));
if (silent)
{
_containers = new ObservableCollection<ContainerViewModel>(newContainers);
_elements = new ObservableCollection<ElementViewModel>(newElements);
_items = new ObservableCollection<IItemViewModel>(newContainers.Cast<IItemViewModel>().Concat(newElements));
}
else
{
Containers = new ObservableCollection<ContainerViewModel>(newContainers);
Elements = new ObservableCollection<ElementViewModel>(newElements);
Items = new ObservableCollection<IItemViewModel>(newContainers.Cast<IItemViewModel>().Concat(newElements));
}
for (var i = 0; i < Items.Count; i++)
{
@@ -260,19 +269,35 @@ namespace FileTime.Avalonia.ViewModels
return await generator(item);
}
public void Unload(bool recursive = true)
public void Unload(bool recursive = true, bool unloadParent = true, bool unloadEvents = false)
{
_isInitialized = false;
if (recursive)
{
foreach (var container in _containers)
{
container.Unload(true);
container.Unload(true, false, true);
container.Dispose();
container.ChildrenToAdopt.Clear();
}
}
if (unloadParent)
{
var parent = Parent;
while (parent != null)
{
var lastParent = parent;
parent = parent.Parent;
lastParent.Unload();
}
}
if(unloadEvents)
{
Container.Refreshed.Remove(Container_Refreshed);
}
_containers.Clear();
_elements.Clear();
_items.Clear();