Console size scan
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using DeclarativeProperty;
|
||||
using FileTime.Core.Models;
|
||||
|
||||
namespace FileTime.App.ContainerSizeScanner;
|
||||
|
||||
@@ -7,7 +8,7 @@ public class ChildElementPreview : ISizePreviewItem
|
||||
public ChildElementPreview(ISizeScanElement element)
|
||||
{
|
||||
Name = element.Name;
|
||||
Size = element.Size;
|
||||
Size = new DeclarativeProperty<long>(((IElement) element).Size);
|
||||
}
|
||||
|
||||
public string Name { get; }
|
||||
|
||||
@@ -18,6 +18,9 @@ public record SizeScanElement : ISizeScanElement
|
||||
public required DateTime? ModifiedAt { get; init;}
|
||||
|
||||
public required IDeclarativeProperty<long> Size { get; init; }
|
||||
|
||||
long IElement.Size => Size.Value;
|
||||
|
||||
public bool IsHidden => false;
|
||||
public bool IsExists => true;
|
||||
public SupportsDelete CanDelete => SupportsDelete.False;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
using DeclarativeProperty;
|
||||
using FileTime.Core.Enums;
|
||||
using FileTime.Core.Models;
|
||||
using FileTime.Core.Models.Extensions;
|
||||
using FileTime.Core.Timeline;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
@@ -104,10 +103,7 @@ public class SizeScanTask : ISizeScanTask
|
||||
{
|
||||
if (_cancelled) return;
|
||||
|
||||
var fileExtension = element.GetExtension<FileExtension>();
|
||||
var size = fileExtension?.Size ?? 0;
|
||||
|
||||
var sizeProperty = new DeclarativeProperty<long>(size);
|
||||
var sizeProperty = new DeclarativeProperty<long>(element.Size);
|
||||
var childName = sizeScanContainer.FullName!.GetChild(element.Name).Path;
|
||||
|
||||
var childElement = new SizeScanElement
|
||||
|
||||
@@ -25,4 +25,9 @@
|
||||
<ProjectReference Include="..\..\Library\GeneralInputKey\GeneralInputKey.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Models\Traits\" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -7,8 +7,8 @@ namespace FileTime.App.Core.ViewModels;
|
||||
|
||||
public interface IElementViewModel :
|
||||
IItemViewModel,
|
||||
ISizeProvider,
|
||||
IInitable<IElement, ITabViewModel, ItemViewModelType>
|
||||
IInitable<IElement, ITabViewModel, ItemViewModelType>,
|
||||
ISizeProvider
|
||||
{
|
||||
IElement? Element { get; }
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
using FileTime.App.Core.Models.Enums;
|
||||
using FileTime.Core.Models;
|
||||
using FileTime.Core.Models.Extensions;
|
||||
using InitableService;
|
||||
|
||||
namespace FileTime.App.Core.ViewModels;
|
||||
|
||||
public interface IFileViewModel : IElementViewModel, IInitable<IElement, FileExtension, ITabViewModel, ItemViewModelType>
|
||||
{
|
||||
}
|
||||
@@ -44,4 +44,5 @@
|
||||
<ProjectReference Include="..\FileTime.App.Search\FileTime.App.Search.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
</Project>
|
||||
|
||||
43
src/AppCommon/FileTime.App.Core/Helpers/ColorHelper.cs
Normal file
43
src/AppCommon/FileTime.App.Core/Helpers/ColorHelper.cs
Normal file
@@ -0,0 +1,43 @@
|
||||
namespace FileTime.App.Core.Helpers;
|
||||
|
||||
public static class ColorHelper
|
||||
{
|
||||
// Convert an HLS value into an RGB value.
|
||||
public static (byte r, byte g, byte b) HlsToRgb(double h, double l, double s)
|
||||
{
|
||||
double p2;
|
||||
if (l <= 0.5) p2 = l * (1 + s);
|
||||
else p2 = l + s - l * s;
|
||||
|
||||
var p1 = 2 * l - p2;
|
||||
double doubleR, doubleG, doubleB;
|
||||
if (s == 0)
|
||||
{
|
||||
doubleR = l;
|
||||
doubleG = l;
|
||||
doubleB = l;
|
||||
}
|
||||
else
|
||||
{
|
||||
doubleR = QqhToRgb(p1, p2, h + 120);
|
||||
doubleG = QqhToRgb(p1, p2, h);
|
||||
doubleB = QqhToRgb(p1, p2, h - 120);
|
||||
}
|
||||
|
||||
// Convert RGB to the 0 to 255 range.
|
||||
return ((byte) (doubleR * 255.0),
|
||||
(byte) (doubleG * 255.0),
|
||||
(byte) (doubleB * 255.0));
|
||||
}
|
||||
|
||||
private static double QqhToRgb(double q1, double q2, double hue)
|
||||
{
|
||||
if (hue > 360) hue -= 360;
|
||||
else if (hue < 0) hue += 360;
|
||||
|
||||
if (hue < 60) return q1 + (q2 - q1) * hue / 60;
|
||||
if (hue < 180) return q2;
|
||||
if (hue < 240) return q1 + (q2 - q1) * (240 - hue) / 60;
|
||||
return q1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using FileTime.App.ContainerSizeScanner;
|
||||
|
||||
namespace FileTime.App.Core.Helpers;
|
||||
|
||||
public static class SizePreviewItemHelper
|
||||
{
|
||||
public static (byte r, byte g, byte b) GetItemColor(
|
||||
ObservableCollection<ISizePreviewItem> items,
|
||||
ISizePreviewItem currentItem,
|
||||
double hueDiff = 0,
|
||||
double lightness = 0.75
|
||||
)
|
||||
{
|
||||
var i = 0;
|
||||
for (; i < items.Count; i++)
|
||||
{
|
||||
if (items[i].Name == currentItem.Name) break;
|
||||
}
|
||||
|
||||
var hue = (360d * i / (items.Count < 1 ? 1 : items.Count)) + hueDiff;
|
||||
if (hue > 360) hue -= 360;
|
||||
if (hue < 0) hue += 360;
|
||||
|
||||
return ColorHelper.HlsToRgb(hue, lightness, 1);
|
||||
}
|
||||
}
|
||||
@@ -321,7 +321,7 @@ public class NavigationUserCommandHandlerService : UserCommandHandlerServiceBase
|
||||
{
|
||||
if (_selectedTab is null || _currentItems?.Value is null) return Task.CompletedTask;
|
||||
|
||||
var newSelectedItem = getNewSelected(_currentItems.Value);
|
||||
var newSelectedItem = getNewSelected(_currentItems.Value.ToArray());
|
||||
if (newSelectedItem == null) return Task.CompletedTask;
|
||||
|
||||
if (_selectedTab.Tab is { } tab)
|
||||
|
||||
@@ -18,7 +18,6 @@ public static class Startup
|
||||
serviceCollection.TryAddTransient<ITabViewModel, TabViewModel>();
|
||||
serviceCollection.TryAddTransient<IContainerViewModel, ContainerViewModel>();
|
||||
serviceCollection.TryAddTransient<IElementViewModel, ElementViewModel>();
|
||||
serviceCollection.TryAddTransient<IFileViewModel, FileViewModel>();
|
||||
serviceCollection.TryAddTransient<IItemNameConverterService, ItemNameConverterService>();
|
||||
serviceCollection.TryAddTransient<ElementPreviewViewModel>();
|
||||
serviceCollection.TryAddSingleton<IUserCommandHandlerService, UserCommandHandlerService>();
|
||||
|
||||
@@ -4,7 +4,7 @@ using FileTime.Core.Models;
|
||||
|
||||
namespace FileTime.App.Core.ViewModels;
|
||||
|
||||
public partial class ContainerViewModel : ItemViewModel, IContainerViewModel
|
||||
public class ContainerViewModel : ItemViewModel, IContainerViewModel
|
||||
{
|
||||
public IContainer? Container => BaseItem as IContainer;
|
||||
|
||||
|
||||
@@ -5,16 +5,20 @@ using FileTime.Core.Models;
|
||||
|
||||
namespace FileTime.App.Core.ViewModels;
|
||||
|
||||
public partial class ElementViewModel : ItemViewModel, IElementViewModel
|
||||
public class ElementViewModel : ItemViewModel, IElementViewModel
|
||||
{
|
||||
private readonly DeclarativeProperty<long> _size = new(0);
|
||||
public IElement? Element => BaseItem as Element;
|
||||
|
||||
public ElementViewModel(IItemNameConverterService itemNameConverterService, IAppState appState) : base(itemNameConverterService, appState)
|
||||
{
|
||||
}
|
||||
|
||||
public void Init(IElement item, ITabViewModel parentTab, ItemViewModelType itemViewModelType)
|
||||
=> Init((IItem)item, parentTab, itemViewModelType);
|
||||
public void Init(IElement item, ITabViewModel parentTab, ItemViewModelType itemViewModelType)
|
||||
{
|
||||
Init((IItem) item, parentTab, itemViewModelType);
|
||||
_size.SetValueSafe(item.Size);
|
||||
}
|
||||
|
||||
public IDeclarativeProperty<long> Size { get; protected set; } = new DeclarativeProperty<long>(0);
|
||||
public IDeclarativeProperty<long> Size => _size;
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
using DeclarativeProperty;
|
||||
using FileTime.App.Core.Models.Enums;
|
||||
using FileTime.App.Core.Services;
|
||||
using FileTime.Core.Models;
|
||||
using FileTime.Core.Models.Extensions;
|
||||
|
||||
namespace FileTime.App.Core.ViewModels;
|
||||
|
||||
public partial class FileViewModel : ElementViewModel, IFileViewModel
|
||||
{
|
||||
public FileViewModel(IItemNameConverterService itemNameConverterService, IAppState appState) : base(itemNameConverterService, appState)
|
||||
{
|
||||
}
|
||||
|
||||
public void Init(IElement item, FileExtension fileExtension, ITabViewModel parentTab, ItemViewModelType itemViewModelType)
|
||||
{
|
||||
Init(item, parentTab, itemViewModelType);
|
||||
Size = new DeclarativeProperty<long>(fileExtension.Size ?? 0);
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,6 @@ using FileTime.App.Core.Models.Enums;
|
||||
using FileTime.App.Core.Services;
|
||||
using FileTime.Core.Enums;
|
||||
using FileTime.Core.Models;
|
||||
using FileTime.Core.Models.Extensions;
|
||||
using FileTime.Core.Services;
|
||||
using FileTime.Core.Timeline;
|
||||
using InitableService;
|
||||
@@ -206,25 +205,11 @@ public partial class TabViewModel : ITabViewModel
|
||||
}
|
||||
else if (item is IElement element)
|
||||
{
|
||||
var fileExtension = element.GetExtension<FileExtension>();
|
||||
var elementViewModel = _serviceProvider
|
||||
.GetInitableResolver<IElement, ITabViewModel, ItemViewModelType>(element, this, type)
|
||||
.GetRequiredService<IElementViewModel>();
|
||||
|
||||
if (fileExtension is not null)
|
||||
{
|
||||
var fileViewModel = _serviceProvider
|
||||
.GetInitableResolver<IElement, FileExtension, ITabViewModel, ItemViewModelType>(
|
||||
element, fileExtension, this, type)
|
||||
.GetRequiredService<IFileViewModel>();
|
||||
|
||||
return fileViewModel;
|
||||
}
|
||||
else
|
||||
{
|
||||
var elementViewModel = _serviceProvider
|
||||
.GetInitableResolver<IElement, ITabViewModel, ItemViewModelType>(element, this, type)
|
||||
.GetRequiredService<IElementViewModel>();
|
||||
|
||||
return elementViewModel;
|
||||
}
|
||||
return elementViewModel;
|
||||
}
|
||||
|
||||
throw new ArgumentException($"{nameof(item)} is not {nameof(IContainer)} neither {nameof(IElement)}");
|
||||
|
||||
Reference in New Issue
Block a user