Item Attributes
This commit is contained in:
@@ -2,6 +2,6 @@ namespace FileTime.App.Core.ViewModels
|
||||
{
|
||||
public interface IContainerSizeContainerViewModel : IItemViewModel
|
||||
{
|
||||
|
||||
long Size { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,5 @@ namespace FileTime.App.Core.ViewModels
|
||||
{
|
||||
public interface IContainerViewModel : IItemViewModel
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,6 @@ namespace FileTime.App.Core.ViewModels
|
||||
{
|
||||
public interface IElementViewModel : IItemViewModel
|
||||
{
|
||||
|
||||
long? Size { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,5 @@ namespace FileTime.App.Core.ViewModels
|
||||
{
|
||||
public interface IFileViewModel : IElementViewModel
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
using System.Reactive.Subjects;
|
||||
using FileTime.App.Core.Models;
|
||||
using FileTime.App.Core.Models.Enums;
|
||||
using FileTime.Core.Models;
|
||||
@@ -6,10 +7,13 @@ namespace FileTime.App.Core.ViewModels
|
||||
{
|
||||
public interface IItemViewModel
|
||||
{
|
||||
IItem? Item { get; set; }
|
||||
IItem? BaseItem { get; set; }
|
||||
IObservable<IReadOnlyList<ItemNamePart>>? DisplayName { get; set; }
|
||||
IObservable<bool>? IsSelected { get; set; }
|
||||
IObservable<bool>? IsMarked { get; set; }
|
||||
ItemViewMode ViewMode { get; set; }
|
||||
BehaviorSubject<bool> IsAlternative { get; }
|
||||
IObservable<ItemViewMode> ViewMode { get; set; }
|
||||
DateTime? CreatedAt { get; set; }
|
||||
string? Attributes { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,11 @@
|
||||
using MvvmGen;
|
||||
|
||||
namespace FileTime.App.Core.ViewModels
|
||||
{
|
||||
public class ContainerSizeContainerViewModel : ItemViewModel, IContainerSizeContainerViewModel
|
||||
[ViewModel]
|
||||
public partial class ContainerSizeContainerViewModel : ItemViewModel, IContainerSizeContainerViewModel
|
||||
{
|
||||
|
||||
[Property]
|
||||
private long _size;
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,11 @@
|
||||
using MvvmGen;
|
||||
|
||||
namespace FileTime.App.Core.ViewModels
|
||||
{
|
||||
public class ElementViewModel : ItemViewModel, IElementViewModel
|
||||
[ViewModel]
|
||||
public partial class ElementViewModel : ItemViewModel, IElementViewModel
|
||||
{
|
||||
|
||||
[Property]
|
||||
private long? _size;
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,5 @@ namespace FileTime.App.Core.ViewModels
|
||||
{
|
||||
public class FileViewModel : ElementViewModel, IFileViewModel
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
using System.Reactive.Subjects;
|
||||
using FileTime.App.Core.Models;
|
||||
using FileTime.App.Core.Models.Enums;
|
||||
using FileTime.Core.Models;
|
||||
@@ -9,7 +10,7 @@ namespace FileTime.App.Core.ViewModels
|
||||
public abstract partial class ItemViewModel : IItemViewModel
|
||||
{
|
||||
[Property]
|
||||
private IItem? _item;
|
||||
private IItem? _baseItem;
|
||||
|
||||
[Property]
|
||||
private IObservable<IReadOnlyList<ItemNamePart>>? _displayName;
|
||||
@@ -21,6 +22,15 @@ namespace FileTime.App.Core.ViewModels
|
||||
private IObservable<bool>? _isMarked;
|
||||
|
||||
[Property]
|
||||
private ItemViewMode _viewMode;
|
||||
private IObservable<ItemViewMode> _viewMode;
|
||||
|
||||
[Property]
|
||||
private DateTime? _createdAt;
|
||||
|
||||
[Property]
|
||||
private string? _attributes;
|
||||
|
||||
[Property]
|
||||
private BehaviorSubject<bool> _isAlternative = new(false);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Reactive.Linq;
|
||||
using System.Reactive.Subjects;
|
||||
using FileTime.App.Core.Models.Enums;
|
||||
using FileTime.App.Core.Services;
|
||||
using FileTime.Core.Models;
|
||||
using FileTime.Core.Services;
|
||||
@@ -39,15 +40,16 @@ namespace FileTime.App.Core.ViewModels
|
||||
{
|
||||
CurrentLocation = tab.CurrentLocation.AsObservable();
|
||||
CurrentItems = tab.CurrentItems.Select(items => items.Select(MapItemToViewModel).ToList());
|
||||
CurrentSelectedItem = CurrentItems.CombineLatest(
|
||||
CurrentSelectedItem = Observable.CombineLatest(
|
||||
CurrentItems,
|
||||
tab.CurrentSelectedItem,
|
||||
(currentItems, currentSelectedItemPath) => currentItems.FirstOrDefault(i => i.Item?.FullName == currentSelectedItemPath?.Path));
|
||||
(currentItems, currentSelectedItemPath) => currentItems.FirstOrDefault(i => i.BaseItem?.FullName == currentSelectedItemPath?.Path));
|
||||
tab.CurrentLocation.Subscribe((_) => _markedItems.OnNext(Enumerable.Empty<FullName>()));
|
||||
|
||||
Tab = tab;
|
||||
}
|
||||
|
||||
private IItemViewModel MapItemToViewModel(IItem item)
|
||||
private IItemViewModel MapItemToViewModel(IItem item, int index)
|
||||
{
|
||||
if (item is IContainer container)
|
||||
{
|
||||
@@ -56,6 +58,14 @@ namespace FileTime.App.Core.ViewModels
|
||||
|
||||
return containerViewModel;
|
||||
}
|
||||
else if (item is IFileElement fileElement)
|
||||
{
|
||||
var fileViewModel = _serviceProvider.GetRequiredService<IFileViewModel>();
|
||||
InitIItemViewModel(fileViewModel, item);
|
||||
fileViewModel.Size = fileElement.Size;
|
||||
|
||||
return fileViewModel;
|
||||
}
|
||||
else if (item is IElement element)
|
||||
{
|
||||
var elementViewModel = _serviceProvider.GetRequiredService<IElementViewModel>();
|
||||
@@ -68,17 +78,29 @@ namespace FileTime.App.Core.ViewModels
|
||||
|
||||
void InitIItemViewModel(IItemViewModel itemViewModel, IItem item)
|
||||
{
|
||||
itemViewModel.Item = item;
|
||||
itemViewModel.BaseItem = item;
|
||||
itemViewModel.DisplayName = _appState.SearchText.Select(s => _itemNameConverterService.GetDisplayName(item.DisplayName, s));
|
||||
itemViewModel.IsMarked = MarkedItems.Select(m => m.Contains(item.FullName));
|
||||
itemViewModel.IsSelected = MarkedItems.Select(m => m.Contains(item.FullName));
|
||||
itemViewModel.IsAlternative.OnNext(index % 2 == 0);
|
||||
itemViewModel.ViewMode = Observable.CombineLatest(itemViewModel.IsMarked, itemViewModel.IsSelected, itemViewModel.IsAlternative, GenerateViewMode);
|
||||
itemViewModel.Attributes = item.Attributes;
|
||||
itemViewModel.CreatedAt = item.CreatedAt;
|
||||
}
|
||||
}
|
||||
|
||||
~TabViewModel()
|
||||
private ItemViewMode GenerateViewMode(bool isMarked, bool isSelected, bool sAlternative)
|
||||
=> (isMarked, isSelected, sAlternative) switch
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
(true, true, _) => ItemViewMode.MarkedSelected,
|
||||
(true, false, true) => ItemViewMode.MarkedAlternative,
|
||||
(false, true, _) => ItemViewMode.Selected,
|
||||
(false, false, true) => ItemViewMode.Alternative,
|
||||
(true, false, false) => ItemViewMode.Marked,
|
||||
_ => ItemViewMode.Default
|
||||
};
|
||||
|
||||
~TabViewModel() => Dispose(false);
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user