using System.ComponentModel; using System.Linq.Expressions; using StabilityMatrix.Core.Models; using StabilityMatrix.Core.Models.FileInterfaces; using StabilityMatrix.Core.Models.Settings; namespace StabilityMatrix.Core.Services; public interface ISettingsManager { bool IsPortableMode { get; } string LibraryDir { get; } bool IsLibraryDirSet { get; } string DatabasePath { get; } string ModelsDirectory { get; } string DownloadsDirectory { get; } Settings Settings { get; } event EventHandler? LibraryDirChanged; event EventHandler? SettingsPropertyChanged; /// /// Register a handler that fires once when LibraryDir is first set. /// Will fire instantly if it is already set. /// void RegisterOnLibraryDirSet(Action handler); /// SettingsTransaction BeginTransaction(); /// void Transaction(Action func, bool ignoreMissingLibraryDir = false); /// void Transaction(Expression> expression, TValue value); /// void RelayPropertyFor( T source, Expression> sourceProperty, Expression> settingsProperty) where T : INotifyPropertyChanged; /// void RegisterPropertyChangedHandler( Expression> settingsProperty, Action onPropertyChanged); /// /// Attempts to locate and set the library path /// Return true if found, false otherwise /// bool TryFindLibrary(); /// /// Save a new library path to %APPDATA%/StabilityMatrix/library.json /// void SetLibraryPath(string path); /// /// Enable and create settings files for portable mode /// Creates the ./Data directory and the `.sm-portable` marker file /// void SetPortableMode(); /// /// Iterable of installed packages using the old absolute path format. /// Can be called with Any() to check if the user needs to migrate. /// IEnumerable GetOldInstalledPackages(); Guid GetOldActivePackageId(); void AddPathExtension(string pathExtension); string GetPathExtensionsAsString(); /// /// Insert path extensions to the front of the PATH environment variable /// void InsertPathExtensions(); void UpdatePackageVersionNumber(Guid id, string? newVersion); void SetLastUpdateCheck(InstalledPackage package); List GetLaunchArgs(Guid packageId); void SaveLaunchArgs(Guid packageId, List launchArgs); string? GetActivePackageHost(); string? GetActivePackagePort(); void SetSharedFolderCategoryVisible(SharedFolderType type, bool visible); bool IsSharedFolderCategoryVisible(SharedFolderType type); bool IsEulaAccepted(); void SetEulaAccepted(); void IndexCheckpoints(); }