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.
233 lines
9.4 KiB
233 lines
9.4 KiB
using System; |
|
using System.Collections.Generic; |
|
using System.Collections.Immutable; |
|
using System.Collections.ObjectModel; |
|
using AvaloniaEdit.Utils; |
|
using Microsoft.Extensions.DependencyInjection; |
|
using StabilityMatrix.Avalonia.Models; |
|
using StabilityMatrix.Avalonia.Services; |
|
using StabilityMatrix.Avalonia.ViewModels; |
|
using StabilityMatrix.Avalonia.ViewModels.Dialogs; |
|
using StabilityMatrix.Core.Api; |
|
using StabilityMatrix.Core.Database; |
|
using StabilityMatrix.Core.Helper; |
|
using StabilityMatrix.Core.Helper.Cache; |
|
using StabilityMatrix.Core.Helper.Factory; |
|
using StabilityMatrix.Core.Models; |
|
using StabilityMatrix.Core.Models.Api; |
|
using StabilityMatrix.Core.Models.Packages; |
|
using StabilityMatrix.Core.Models.Progress; |
|
using StabilityMatrix.Core.Python; |
|
using StabilityMatrix.Core.Services; |
|
|
|
namespace StabilityMatrix.Avalonia.DesignData; |
|
|
|
public static class DesignData |
|
{ |
|
private static IServiceProvider Services { get; } |
|
|
|
static DesignData() |
|
{ |
|
var services = new ServiceCollection(); |
|
|
|
var activePackageId = new Guid(); |
|
services.AddSingleton<ISettingsManager, MockSettingsManager>(_ => new MockSettingsManager |
|
{ |
|
Settings = |
|
{ |
|
InstalledPackages = new List<InstalledPackage> |
|
{ |
|
new() |
|
{ |
|
Id = activePackageId, |
|
DisplayName = "My Installed Package", |
|
PackageName = "stable-diffusion-webui", |
|
PackageVersion = "v1.0.0", |
|
LibraryPath = "Packages\\example-webui", |
|
LastUpdateCheck = DateTimeOffset.Now |
|
} |
|
}, |
|
ActiveInstalledPackage = activePackageId |
|
} |
|
}); |
|
|
|
// General services |
|
services.AddLogging(); |
|
services.AddSingleton<IPackageFactory, PackageFactory>() |
|
.AddSingleton<INotificationService, MockNotificationService>() |
|
.AddSingleton<ISharedFolders, MockSharedFolders>() |
|
.AddSingleton<IDownloadService, MockDownloadService>() |
|
.AddSingleton<ModelFinder>(); |
|
|
|
// Placeholder services that nobody should need during design time |
|
services |
|
.AddSingleton<IPyRunner>(_ => null!) |
|
.AddSingleton<ILiteDbContext>(_ => null!) |
|
.AddSingleton<ICivitApi>(_ => null!) |
|
.AddSingleton<IGithubApiCache>(_ => null!) |
|
.AddSingleton<IPrerequisiteHelper>(_ => null!); |
|
|
|
// Using some default service implementations from App |
|
App.ConfigurePackages(services); |
|
App.ConfigurePageViewModels(services); |
|
App.ConfigureDialogViewModels(services); |
|
App.ConfigureViews(services); |
|
|
|
Services = services.BuildServiceProvider(); |
|
|
|
var dialogFactory = Services.GetRequiredService<ServiceManager<ViewModelBase>>(); |
|
var settingsManager = Services.GetRequiredService<ISettingsManager>(); |
|
var downloadService = Services.GetRequiredService<IDownloadService>(); |
|
var modelFinder = Services.GetRequiredService<ModelFinder>(); |
|
var packageFactory = Services.GetRequiredService<IPackageFactory>(); |
|
var notificationService = Services.GetRequiredService<INotificationService>(); |
|
|
|
// Main window |
|
MainWindowViewModel = new MainWindowViewModel(settingsManager, dialogFactory) |
|
{ |
|
Pages = new List<PageViewModelBase> |
|
{ |
|
LaunchPageViewModel, |
|
PackageManagerViewModel, |
|
CheckpointBrowserViewModel |
|
}, |
|
FooterPages = new List<object> |
|
{ |
|
SettingsViewModel |
|
} |
|
}; |
|
|
|
// Sample data |
|
var sampleCivitVersions = new List<CivitModelVersion> |
|
{ |
|
new() |
|
{ |
|
Name = "BB95 Furry Mix", |
|
Description = "v1.0.0", |
|
} |
|
}; |
|
|
|
// Sample data for dialogs |
|
SelectModelVersionViewModel.Versions = sampleCivitVersions; |
|
SelectModelVersionViewModel.SelectedVersion = sampleCivitVersions[0]; |
|
|
|
LaunchOptionsViewModel = Services.GetRequiredService<LaunchOptionsViewModel>(); |
|
LaunchOptionsViewModel.Cards = new[] |
|
{ |
|
LaunchOptionCard.FromDefinition(new LaunchOptionDefinition |
|
{ |
|
Name = "Host", |
|
Type = LaunchOptionType.String, |
|
Description = "The host name for the Web UI", |
|
DefaultValue = "localhost", |
|
Options = { "--host" } |
|
}), |
|
LaunchOptionCard.FromDefinition(new LaunchOptionDefinition |
|
{ |
|
Name = "API", |
|
Type = LaunchOptionType.Bool, |
|
Options = { "--api" } |
|
}) |
|
}; |
|
LaunchOptionsViewModel.UpdateFilterCards(); |
|
|
|
InstallerViewModel = Services.GetRequiredService<InstallerViewModel>(); |
|
InstallerViewModel.AvailablePackages = |
|
packageFactory.GetAllAvailablePackages().ToImmutableArray(); |
|
InstallerViewModel.SelectedPackage = InstallerViewModel.AvailablePackages[0]; |
|
InstallerViewModel.ReleaseNotes = "## Release Notes\nThis is a test release note."; |
|
|
|
// Checkpoints page |
|
CheckpointsPageViewModel.CheckpointFolders = new ObservableCollection<CheckpointFolder> |
|
{ |
|
new(settingsManager, downloadService, modelFinder) |
|
{ |
|
Title = "Lora", |
|
DirectoryPath = "Packages/lora", |
|
CheckpointFiles = new ObservableCollection<CheckpointFile> |
|
{ |
|
new() |
|
{ |
|
FilePath = "~/Models/Lora/electricity-light.safetensors", |
|
Title = "Auroral Background", |
|
ConnectedModel = new ConnectedModelInfo |
|
{ |
|
VersionName = "Lightning Auroral", |
|
BaseModel = "SD 1.5", |
|
ModelName = "Auroral Background", |
|
ModelType = CivitModelType.LORA, |
|
FileMetadata = new CivitFileMetadata |
|
{ |
|
Format = CivitModelFormat.SafeTensor, |
|
Fp = CivitModelFpType.fp16, |
|
Size = CivitModelSize.pruned, |
|
} |
|
} |
|
}, |
|
new() |
|
{ |
|
FilePath = "~/Models/Lora/model.safetensors", |
|
Title = "Some model" |
|
}, |
|
} |
|
}, |
|
new(settingsManager, downloadService, modelFinder) |
|
{ |
|
Title = "VAE", |
|
DirectoryPath = "Packages/VAE", |
|
CheckpointFiles = new ObservableCollection<CheckpointFile> |
|
{ |
|
new() |
|
{ |
|
FilePath = "~/Models/VAE/vae_v2.pt", |
|
Title = "VAE v2", |
|
} |
|
} |
|
} |
|
}; |
|
|
|
CheckpointBrowserViewModel.ModelCards = new |
|
ObservableCollection<CheckpointBrowserCardViewModel> |
|
{ |
|
new(new CivitModel |
|
{ |
|
Name = "BB95 Furry Mix", |
|
Description = "A furry mix of BB95", |
|
}, downloadService, settingsManager, |
|
dialogFactory, notificationService) |
|
}; |
|
|
|
ProgressManagerViewModel.ProgressItems = new ObservableDictionary<Guid, ProgressItem> |
|
{ |
|
{ |
|
Guid.NewGuid(), |
|
new ProgressItem(new Guid(), "Test File.exe", new ProgressReport(0.5f, "Downloading...")) |
|
}, |
|
{ |
|
Guid.NewGuid(), |
|
new ProgressItem(new Guid(), "Test File 2.uwu", new ProgressReport(0.25f, "Extracting...")) |
|
} |
|
}; |
|
} |
|
|
|
public static MainWindowViewModel MainWindowViewModel { get; } |
|
public static LaunchPageViewModel LaunchPageViewModel => Services.GetRequiredService<LaunchPageViewModel>(); |
|
public static PackageManagerViewModel PackageManagerViewModel => Services.GetRequiredService<PackageManagerViewModel>(); |
|
public static CheckpointsPageViewModel CheckpointsPageViewModel => Services.GetRequiredService<CheckpointsPageViewModel>(); |
|
public static SettingsViewModel SettingsViewModel => Services.GetRequiredService<SettingsViewModel>(); |
|
public static CheckpointBrowserViewModel CheckpointBrowserViewModel => Services.GetRequiredService<CheckpointBrowserViewModel>(); |
|
public static SelectModelVersionViewModel SelectModelVersionViewModel => Services.GetRequiredService<SelectModelVersionViewModel>(); |
|
public static OneClickInstallViewModel OneClickInstallViewModel => Services.GetRequiredService<OneClickInstallViewModel>(); |
|
public static InstallerViewModel InstallerViewModel { get; } |
|
|
|
public static SelectDataDirectoryViewModel SelectDataDirectoryViewModel => Services.GetRequiredService<SelectDataDirectoryViewModel>(); |
|
public static LaunchOptionsViewModel LaunchOptionsViewModel { get; } |
|
|
|
public static ProgressManagerViewModel ProgressManagerViewModel => |
|
Services.GetRequiredService<ProgressManagerViewModel>(); |
|
|
|
public static RefreshBadgeViewModel RefreshBadgeViewModel => new() |
|
{ |
|
State = ProgressState.Success |
|
}; |
|
}
|
|
|