using System.Globalization; using StabilityMatrix.Core.Models; using StabilityMatrix.Core.Models.Database; using StabilityMatrix.Core.Models.FileInterfaces; using StabilityMatrix.Core.Models.PackageModification; using StabilityMatrix.Core.Models.Progress; using StabilityMatrix.Core.Models.Update; namespace StabilityMatrix.Core.Helper; public record struct RunningPackageStatusChangedEventArgs(PackagePair? CurrentPackagePair); public class EventManager { public static EventManager Instance { get; } = new(); private EventManager() { } public event EventHandler? GlobalProgressChanged; public event EventHandler? InstalledPackagesChanged; public event EventHandler? OneClickInstallFinished; public event EventHandler? TeachingTooltipNeeded; public event EventHandler? DevModeSettingChanged; public event EventHandler? UpdateAvailable; public event EventHandler? PackageLaunchRequested; public event EventHandler? ScrollToBottomRequested; public event EventHandler? ProgressChanged; public event EventHandler? RunningPackageStatusChanged; public event EventHandler? PackageInstallProgressAdded; public delegate Task AddPackageInstallEventHandler( object? sender, IPackageModificationRunner runner, IReadOnlyList steps, Action onCompleted ); public event EventHandler? ToggleProgressFlyout; public event EventHandler? CultureChanged; public event EventHandler? ModelIndexChanged; public event EventHandler? ImageFileAdded; public event EventHandler? InferenceTextToImageRequested; public event EventHandler? InferenceUpscaleRequested; public event EventHandler? InferenceImageToImageRequested; public event EventHandler? InferenceImageToVideoRequested; public event EventHandler? NavigateAndFindCivitModelRequested; public event EventHandler? DownloadsTeachingTipRequested; public event EventHandler? RecommendedModelsDialogClosed; public void OnGlobalProgressChanged(int progress) => GlobalProgressChanged?.Invoke(this, progress); public void OnInstalledPackagesChanged() => InstalledPackagesChanged?.Invoke(this, EventArgs.Empty); public void OnOneClickInstallFinished(bool skipped) => OneClickInstallFinished?.Invoke(this, skipped); public void OnTeachingTooltipNeeded() => TeachingTooltipNeeded?.Invoke(this, EventArgs.Empty); public void OnDevModeSettingChanged(bool value) => DevModeSettingChanged?.Invoke(this, value); public void OnUpdateAvailable(UpdateInfo args) => UpdateAvailable?.Invoke(this, args); public void OnPackageLaunchRequested(Guid packageId) => PackageLaunchRequested?.Invoke(this, packageId); public void OnScrollToBottomRequested() => ScrollToBottomRequested?.Invoke(this, EventArgs.Empty); public void OnProgressChanged(ProgressItem progress) => ProgressChanged?.Invoke(this, progress); public void OnRunningPackageStatusChanged(PackagePair? currentPackagePair) => RunningPackageStatusChanged?.Invoke( this, new RunningPackageStatusChangedEventArgs(currentPackagePair) ); public void OnPackageInstallProgressAdded(IPackageModificationRunner runner) => PackageInstallProgressAdded?.Invoke(this, runner); public void OnToggleProgressFlyout() => ToggleProgressFlyout?.Invoke(this, EventArgs.Empty); public void OnCultureChanged(CultureInfo culture) => CultureChanged?.Invoke(this, culture); public void OnModelIndexChanged() => ModelIndexChanged?.Invoke(this, EventArgs.Empty); public void OnImageFileAdded(FilePath filePath) => ImageFileAdded?.Invoke(this, filePath); public void OnInferenceTextToImageRequested(LocalImageFile imageFile) => InferenceTextToImageRequested?.Invoke(this, imageFile); public void OnInferenceUpscaleRequested(LocalImageFile imageFile) => InferenceUpscaleRequested?.Invoke(this, imageFile); public void OnInferenceImageToImageRequested(LocalImageFile imageFile) => InferenceImageToImageRequested?.Invoke(this, imageFile); public void OnInferenceImageToVideoRequested(LocalImageFile imageFile) => InferenceImageToVideoRequested?.Invoke(this, imageFile); public void OnNavigateAndFindCivitModelRequested(int modelId) => NavigateAndFindCivitModelRequested?.Invoke(this, modelId); public void OnDownloadsTeachingTipRequested() => DownloadsTeachingTipRequested?.Invoke(this, EventArgs.Empty); public void OnRecommendedModelsDialogClosed() => RecommendedModelsDialogClosed?.Invoke(this, EventArgs.Empty); }