using OwlCore.AbstractUI.Models; using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using ZuneModCore.Mods; namespace ZuneModCore { public abstract class Mod { /// /// A list of all available mods /// public static readonly IReadOnlyList AvailableMods = new List { new FeaturesOverrideMod(), new VideoSyncMod(), new WebservicesMod(), new BackgroundImageMod(), new MbidLocatorMod(), }.AsReadOnly(); public static string ZuneInstallDir { get; set; } = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Zune"); public abstract string Id { get; } public abstract string Title { get; } public abstract string Description { get; } public abstract string Author { get; } public virtual AbstractUIElementGroup? GetDefaultOptionsUI() => null; public virtual Task Init() => Task.CompletedTask; public abstract Task Apply(); public abstract Task Reset(); private AbstractUIElementGroup? _OptionsUI; public AbstractUIElementGroup? OptionsUI { get { if (_OptionsUI == null) _OptionsUI = GetDefaultOptionsUI(); return _OptionsUI; } set => _OptionsUI = value; } public string StorageDirectory { get { string dir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "ZuneModCore", Id); // Create the directory just in case the consumer assumes the folder exists already Directory.CreateDirectory(dir); return dir; } } public abstract IReadOnlyList? DependentMods { get; } } }