You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.6 KiB
49 lines
1.6 KiB
using System.Collections.Generic; |
|
using System.Collections.ObjectModel; |
|
using System.Linq; |
|
using CommunityToolkit.Mvvm.ComponentModel; |
|
using StabilityMatrix.Core.Models.Api; |
|
|
|
namespace StabilityMatrix.Avalonia.ViewModels.Dialogs; |
|
|
|
public partial class ModelVersionViewModel : ObservableObject |
|
{ |
|
private readonly HashSet<string> installedModelHashes; |
|
|
|
[ObservableProperty] |
|
private CivitModelVersion modelVersion; |
|
|
|
[ObservableProperty] |
|
private ObservableCollection<CivitFileViewModel> civitFileViewModels; |
|
|
|
[ObservableProperty] |
|
private bool isInstalled; |
|
|
|
public ModelVersionViewModel(HashSet<string> installedModelHashes, CivitModelVersion modelVersion) |
|
{ |
|
this.installedModelHashes = installedModelHashes; |
|
ModelVersion = modelVersion; |
|
|
|
IsInstalled = |
|
ModelVersion.Files?.Any( |
|
file => |
|
file is { Type: CivitFileType.Model, Hashes.BLAKE3: not null } |
|
&& installedModelHashes.Contains(file.Hashes.BLAKE3) |
|
) ?? false; |
|
|
|
CivitFileViewModels = new ObservableCollection<CivitFileViewModel>( |
|
ModelVersion.Files?.Select(file => new CivitFileViewModel(installedModelHashes, file)) |
|
?? new List<CivitFileViewModel>() |
|
); |
|
} |
|
|
|
public void RefreshInstallStatus() |
|
{ |
|
IsInstalled = |
|
ModelVersion.Files?.Any( |
|
file => |
|
file is { Type: CivitFileType.Model, Hashes.BLAKE3: not null } |
|
&& installedModelHashes.Contains(file.Hashes.BLAKE3) |
|
) ?? false; |
|
} |
|
}
|
|
|