diff --git a/Penumbra.Api b/Penumbra.Api index 2b6bcf33..79ffdd69 160000 --- a/Penumbra.Api +++ b/Penumbra.Api @@ -1 +1 @@ -Subproject commit 2b6bcf338794b34bcba2730c70dcbb73ce97311b +Subproject commit 79ffdd69a28141a1ac93daa24d76573b2fa0d71e diff --git a/Penumbra/Api/PenumbraApi.cs b/Penumbra/Api/PenumbraApi.cs index 1a0764c7..59ef6677 100644 --- a/Penumbra/Api/PenumbraApi.cs +++ b/Penumbra/Api/PenumbraApi.cs @@ -141,6 +141,7 @@ public class PenumbraApi : IDisposable, IPenumbraApi _communicator.ModPathChanged.Subscribe(ModPathChangeSubscriber, ModPathChanged.Priority.Api); _communicator.ModSettingChanged.Subscribe(OnModSettingChange, Communication.ModSettingChanged.Priority.Api); _communicator.CreatedCharacterBase.Subscribe(OnCreatedCharacterBase, Communication.CreatedCharacterBase.Priority.Api); + _communicator.ModOptionChanged.Subscribe(OnModOptionEdited, ModOptionChanged.Priority.Api); } public unsafe void Dispose() @@ -342,10 +343,7 @@ public class PenumbraApi : IDisposable, IPenumbraApi { CheckInitialized(); if (!_config.EnableMods) - return new[] - { - path, - }; + return [path]; var ret = _collectionManager.Active.Individual(NameToIdentifier(characterName, worldId)).ReverseResolvePath(new FullPath(path)); return ret.Select(r => r.ToString()).ToArray(); @@ -355,10 +353,7 @@ public class PenumbraApi : IDisposable, IPenumbraApi { CheckInitialized(); if (!_config.EnableMods) - return new[] - { - path, - }; + return [path]; AssociatedCollection(gameObjectIdx, out var collection); var ret = collection.ReverseResolvePath(new FullPath(path)); @@ -369,10 +364,7 @@ public class PenumbraApi : IDisposable, IPenumbraApi { CheckInitialized(); if (!_config.EnableMods) - return new[] - { - path, - }; + return [path]; var ret = _collectionResolver.PlayerCollection().ReverseResolvePath(new FullPath(path)); return ret.Select(r => r.ToString()).ToArray(); @@ -698,6 +690,9 @@ public class PenumbraApi : IDisposable, IPenumbraApi { switch (type) { + case ModPathChangeType.Reloaded: + TriggerSettingEdited(mod); + break; case ModPathChangeType.Deleted when oldDirectory != null: ModDeleted?.Invoke(oldDirectory.Name); break; @@ -1262,4 +1257,31 @@ public class PenumbraApi : IDisposable, IPenumbraApi private void OnCreatedCharacterBase(nint gameObject, ModCollection collection, nint drawObject) => CreatedCharacterBase?.Invoke(gameObject, collection.Name, drawObject); + + private void OnModOptionEdited(ModOptionChangeType type, Mod mod, int groupIndex, int optionIndex, int moveIndex) + { + switch (type) + { + case ModOptionChangeType.GroupDeleted: + case ModOptionChangeType.GroupMoved: + case ModOptionChangeType.GroupTypeChanged: + case ModOptionChangeType.PriorityChanged: + case ModOptionChangeType.OptionDeleted: + case ModOptionChangeType.OptionMoved: + case ModOptionChangeType.OptionFilesChanged: + case ModOptionChangeType.OptionFilesAdded: + case ModOptionChangeType.OptionSwapsChanged: + case ModOptionChangeType.OptionMetaChanged: + TriggerSettingEdited(mod); + break; + } + } + + private void TriggerSettingEdited(Mod mod) + { + var collection = _collectionResolver.PlayerCollection(); + var (settings, parent) = collection[mod.Index]; + if (settings != null) + ModSettingChanged?.Invoke(ModSettingChange.Edited, collection.Name, mod.Identifier, parent != collection); + } } diff --git a/Penumbra/Collections/Cache/CollectionCacheManager.cs b/Penumbra/Collections/Cache/CollectionCacheManager.cs index 4e524ddf..94b3ef5a 100644 --- a/Penumbra/Collections/Cache/CollectionCacheManager.cs +++ b/Penumbra/Collections/Cache/CollectionCacheManager.cs @@ -323,6 +323,7 @@ public class CollectionCacheManager : IDisposable FullRecalculation(collection); break; case ModSettingChange.TemporaryMod: + case ModSettingChange.Edited: // handled otherwise break; } diff --git a/Penumbra/Collections/Manager/CollectionManager.cs b/Penumbra/Collections/Manager/CollectionManager.cs index 16bf754c..e95617b1 100644 --- a/Penumbra/Collections/Manager/CollectionManager.cs +++ b/Penumbra/Collections/Manager/CollectionManager.cs @@ -2,23 +2,18 @@ using Penumbra.Collections.Cache; namespace Penumbra.Collections.Manager; -public class CollectionManager +public class CollectionManager( + CollectionStorage storage, + ActiveCollections active, + InheritanceManager inheritances, + CollectionCacheManager caches, + TempCollectionManager temp, + CollectionEditor editor) { - public readonly CollectionStorage Storage; - public readonly ActiveCollections Active; - public readonly InheritanceManager Inheritances; - public readonly CollectionCacheManager Caches; - public readonly TempCollectionManager Temp; - public readonly CollectionEditor Editor; - - public CollectionManager(CollectionStorage storage, ActiveCollections active, InheritanceManager inheritances, - CollectionCacheManager caches, TempCollectionManager temp, CollectionEditor editor) - { - Storage = storage; - Active = active; - Inheritances = inheritances; - Caches = caches; - Temp = temp; - Editor = editor; - } + public readonly CollectionStorage Storage = storage; + public readonly ActiveCollections Active = active; + public readonly InheritanceManager Inheritances = inheritances; + public readonly CollectionCacheManager Caches = caches; + public readonly TempCollectionManager Temp = temp; + public readonly CollectionEditor Editor = editor; } diff --git a/Penumbra/Communication/ModOptionChanged.cs b/Penumbra/Communication/ModOptionChanged.cs index a0b4d26c..f02b17dc 100644 --- a/Penumbra/Communication/ModOptionChanged.cs +++ b/Penumbra/Communication/ModOptionChanged.cs @@ -1,4 +1,5 @@ using OtterGui.Classes; +using Penumbra.Api; using Penumbra.Mods; using Penumbra.Mods.Manager; @@ -18,6 +19,9 @@ public sealed class ModOptionChanged() { public enum Priority { + /// + Api = int.MinValue, + /// CollectionCacheManager = -100, diff --git a/Penumbra/Communication/ModPathChanged.cs b/Penumbra/Communication/ModPathChanged.cs index e6291781..01c8fa64 100644 --- a/Penumbra/Communication/ModPathChanged.cs +++ b/Penumbra/Communication/ModPathChanged.cs @@ -19,15 +19,15 @@ public sealed class ModPathChanged() { public enum Priority { + /// + Api = int.MinValue, + /// EphemeralConfig = -500, /// CollectionCacheManagerAddition = -100, - /// - Api = 0, - /// ModCacheManager = 0, diff --git a/Penumbra/Mods/Editor/ModMetaEditor.cs b/Penumbra/Mods/Editor/ModMetaEditor.cs index bbf0d4b5..31aefdf5 100644 --- a/Penumbra/Mods/Editor/ModMetaEditor.cs +++ b/Penumbra/Mods/Editor/ModMetaEditor.cs @@ -2,7 +2,7 @@ using Penumbra.Meta.Manipulations; using Penumbra.Mods.Manager; using Penumbra.Mods.Subclasses; -namespace Penumbra.Mods; +namespace Penumbra.Mods.Editor; public class ModMetaEditor(ModManager modManager) { diff --git a/Penumbra/Mods/Manager/ModDataEditor.cs b/Penumbra/Mods/Manager/ModDataEditor.cs index 6c5f9c25..e0af6f36 100644 --- a/Penumbra/Mods/Manager/ModDataEditor.cs +++ b/Penumbra/Mods/Manager/ModDataEditor.cs @@ -23,17 +23,8 @@ public enum ModDataChangeType : ushort Note = 0x0800, } -public class ModDataEditor +public class ModDataEditor(SaveService saveService, CommunicatorService communicatorService) { - private readonly SaveService _saveService; - private readonly CommunicatorService _communicatorService; - - public ModDataEditor(SaveService saveService, CommunicatorService communicatorService) - { - _saveService = saveService; - _communicatorService = communicatorService; - } - /// Create the file containing the meta information about a mod from scratch. public void CreateMeta(DirectoryInfo directory, string? name, string? author, string? description, string? version, string? website) @@ -44,12 +35,12 @@ public class ModDataEditor mod.Description = description ?? mod.Description; mod.Version = version ?? mod.Version; mod.Website = website ?? mod.Website; - _saveService.ImmediateSave(new ModMeta(mod)); + saveService.ImmediateSave(new ModMeta(mod)); } public ModDataChangeType LoadLocalData(Mod mod) { - var dataFile = _saveService.FileNames.LocalDataFile(mod); + var dataFile = saveService.FileNames.LocalDataFile(mod); var importDate = 0L; var localTags = Enumerable.Empty(); @@ -101,14 +92,14 @@ public class ModDataEditor } if (save) - _saveService.QueueSave(new ModLocalData(mod)); + saveService.QueueSave(new ModLocalData(mod)); return changes; } public ModDataChangeType LoadMeta(ModCreator creator, Mod mod) { - var metaFile = _saveService.FileNames.ModMetaPath(mod); + var metaFile = saveService.FileNames.ModMetaPath(mod); if (!File.Exists(metaFile)) { Penumbra.Log.Debug($"No mod meta found for {mod.ModPath.Name}."); @@ -161,10 +152,10 @@ public class ModDataEditor } if (newFileVersion != ModMeta.FileVersion) - if (ModMigration.Migrate(creator, _saveService, mod, json, ref newFileVersion)) + if (ModMigration.Migrate(creator, saveService, mod, json, ref newFileVersion)) { changes |= ModDataChangeType.Migration; - _saveService.ImmediateSave(new ModMeta(mod)); + saveService.ImmediateSave(new ModMeta(mod)); } if (importDate != null && mod.ImportDate != importDate.Value) @@ -191,8 +182,8 @@ public class ModDataEditor var oldName = mod.Name; mod.Name = newName; - _saveService.QueueSave(new ModMeta(mod)); - _communicatorService.ModDataChanged.Invoke(ModDataChangeType.Name, mod, oldName.Text); + saveService.QueueSave(new ModMeta(mod)); + communicatorService.ModDataChanged.Invoke(ModDataChangeType.Name, mod, oldName.Text); } public void ChangeModAuthor(Mod mod, string newAuthor) @@ -201,8 +192,8 @@ public class ModDataEditor return; mod.Author = newAuthor; - _saveService.QueueSave(new ModMeta(mod)); - _communicatorService.ModDataChanged.Invoke(ModDataChangeType.Author, mod, null); + saveService.QueueSave(new ModMeta(mod)); + communicatorService.ModDataChanged.Invoke(ModDataChangeType.Author, mod, null); } public void ChangeModDescription(Mod mod, string newDescription) @@ -211,8 +202,8 @@ public class ModDataEditor return; mod.Description = newDescription; - _saveService.QueueSave(new ModMeta(mod)); - _communicatorService.ModDataChanged.Invoke(ModDataChangeType.Description, mod, null); + saveService.QueueSave(new ModMeta(mod)); + communicatorService.ModDataChanged.Invoke(ModDataChangeType.Description, mod, null); } public void ChangeModVersion(Mod mod, string newVersion) @@ -221,8 +212,8 @@ public class ModDataEditor return; mod.Version = newVersion; - _saveService.QueueSave(new ModMeta(mod)); - _communicatorService.ModDataChanged.Invoke(ModDataChangeType.Version, mod, null); + saveService.QueueSave(new ModMeta(mod)); + communicatorService.ModDataChanged.Invoke(ModDataChangeType.Version, mod, null); } public void ChangeModWebsite(Mod mod, string newWebsite) @@ -231,8 +222,8 @@ public class ModDataEditor return; mod.Website = newWebsite; - _saveService.QueueSave(new ModMeta(mod)); - _communicatorService.ModDataChanged.Invoke(ModDataChangeType.Website, mod, null); + saveService.QueueSave(new ModMeta(mod)); + communicatorService.ModDataChanged.Invoke(ModDataChangeType.Website, mod, null); } public void ChangeModTag(Mod mod, int tagIdx, string newTag) @@ -247,9 +238,9 @@ public class ModDataEditor return; mod.Favorite = state; - _saveService.QueueSave(new ModLocalData(mod)); + saveService.QueueSave(new ModLocalData(mod)); ; - _communicatorService.ModDataChanged.Invoke(ModDataChangeType.Favorite, mod, null); + communicatorService.ModDataChanged.Invoke(ModDataChangeType.Favorite, mod, null); } public void ChangeModNote(Mod mod, string newNote) @@ -258,9 +249,9 @@ public class ModDataEditor return; mod.Note = newNote; - _saveService.QueueSave(new ModLocalData(mod)); + saveService.QueueSave(new ModLocalData(mod)); ; - _communicatorService.ModDataChanged.Invoke(ModDataChangeType.Favorite, mod, null); + communicatorService.ModDataChanged.Invoke(ModDataChangeType.Favorite, mod, null); } private void ChangeTag(Mod mod, int tagIdx, string newTag, bool local) @@ -282,19 +273,19 @@ public class ModDataEditor } if (flags.HasFlag(ModDataChangeType.ModTags)) - _saveService.QueueSave(new ModMeta(mod)); + saveService.QueueSave(new ModMeta(mod)); if (flags.HasFlag(ModDataChangeType.LocalTags)) - _saveService.QueueSave(new ModLocalData(mod)); + saveService.QueueSave(new ModLocalData(mod)); if (flags != 0) - _communicatorService.ModDataChanged.Invoke(flags, mod, null); + communicatorService.ModDataChanged.Invoke(flags, mod, null); } public void MoveDataFile(DirectoryInfo oldMod, DirectoryInfo newMod) { - var oldFile = _saveService.FileNames.LocalDataFile(oldMod.Name); - var newFile = _saveService.FileNames.LocalDataFile(newMod.Name); + var oldFile = saveService.FileNames.LocalDataFile(oldMod.Name); + var newFile = saveService.FileNames.LocalDataFile(newMod.Name); if (!File.Exists(oldFile)) return; diff --git a/Penumbra/Mods/Manager/ModOptionEditor.cs b/Penumbra/Mods/Manager/ModOptionEditor.cs index 73cb80cc..3459ce1a 100644 --- a/Penumbra/Mods/Manager/ModOptionEditor.cs +++ b/Penumbra/Mods/Manager/ModOptionEditor.cs @@ -31,19 +31,8 @@ public enum ModOptionChangeType DefaultOptionChanged, } -public class ModOptionEditor +public class ModOptionEditor(CommunicatorService communicator, SaveService saveService, Configuration config) { - private readonly Configuration _config; - private readonly CommunicatorService _communicator; - private readonly SaveService _saveService; - - public ModOptionEditor(CommunicatorService communicator, SaveService saveService, Configuration config) - { - _communicator = communicator; - _saveService = saveService; - _config = config; - } - /// Change the type of a group given by mod and index to type, if possible. public void ChangeModGroupType(Mod mod, int groupIdx, GroupType type) { @@ -52,8 +41,8 @@ public class ModOptionEditor return; mod.Groups[groupIdx] = group.Convert(type); - _saveService.QueueSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.GroupTypeChanged, mod, groupIdx, -1, -1); + saveService.QueueSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.GroupTypeChanged, mod, groupIdx, -1, -1); } /// Change the settings stored as default options in a mod. @@ -64,8 +53,8 @@ public class ModOptionEditor return; group.DefaultSettings = defaultOption; - _saveService.QueueSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.DefaultOptionChanged, mod, groupIdx, -1, -1); + saveService.QueueSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.DefaultOptionChanged, mod, groupIdx, -1, -1); } /// Rename an option group if possible. @@ -76,7 +65,7 @@ public class ModOptionEditor if (oldName == newName || !VerifyFileName(mod, group, newName, true)) return; - _saveService.ImmediateDelete(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); + saveService.ImmediateDelete(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); var _ = group switch { SingleModGroup s => s.Name = newName, @@ -84,8 +73,8 @@ public class ModOptionEditor _ => newName, }; - _saveService.ImmediateSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.GroupRenamed, mod, groupIdx, -1, -1); + saveService.ImmediateSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.GroupRenamed, mod, groupIdx, -1, -1); } /// Add a new, empty option group of the given type and name. @@ -107,8 +96,8 @@ public class ModOptionEditor Name = newName, Priority = maxPriority, }); - _saveService.ImmediateSave(new ModSaveGroup(mod, mod.Groups.Count - 1, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.GroupAdded, mod, mod.Groups.Count - 1, -1, -1); + saveService.ImmediateSave(new ModSaveGroup(mod, mod.Groups.Count - 1, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.GroupAdded, mod, mod.Groups.Count - 1, -1, -1); } /// Add a new mod, empty option group of the given type and name if it does not exist already. @@ -128,11 +117,11 @@ public class ModOptionEditor /// Delete a given option group. Fires an event to prepare before actually deleting. public void DeleteModGroup(Mod mod, int groupIdx) { - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.PrepareChange, mod, groupIdx, -1, -1); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.PrepareChange, mod, groupIdx, -1, -1); mod.Groups.RemoveAt(groupIdx); UpdateSubModPositions(mod, groupIdx); - _saveService.SaveAllOptionGroups(mod, false, _config.ReplaceNonAsciiOnImport); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.GroupDeleted, mod, groupIdx, -1, -1); + saveService.SaveAllOptionGroups(mod, false, config.ReplaceNonAsciiOnImport); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.GroupDeleted, mod, groupIdx, -1, -1); } /// Move the index of a given option group. @@ -142,8 +131,8 @@ public class ModOptionEditor return; UpdateSubModPositions(mod, Math.Min(groupIdxFrom, groupIdxTo)); - _saveService.SaveAllOptionGroups(mod, false, _config.ReplaceNonAsciiOnImport); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.GroupMoved, mod, groupIdxFrom, -1, groupIdxTo); + saveService.SaveAllOptionGroups(mod, false, config.ReplaceNonAsciiOnImport); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.GroupMoved, mod, groupIdxFrom, -1, groupIdxTo); } /// Change the description of the given option group. @@ -159,8 +148,8 @@ public class ModOptionEditor MultiModGroup m => m.Description = newDescription, _ => newDescription, }; - _saveService.QueueSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.DisplayChange, mod, groupIdx, -1, -1); + saveService.QueueSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.DisplayChange, mod, groupIdx, -1, -1); } /// Change the description of the given option. @@ -172,8 +161,8 @@ public class ModOptionEditor return; s.Description = newDescription; - _saveService.QueueSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.DisplayChange, mod, groupIdx, optionIdx, -1); + saveService.QueueSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.DisplayChange, mod, groupIdx, optionIdx, -1); } /// Change the internal priority of the given option group. @@ -189,8 +178,8 @@ public class ModOptionEditor MultiModGroup m => m.Priority = newPriority, _ => newPriority, }; - _saveService.QueueSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.PriorityChanged, mod, groupIdx, -1, -1); + saveService.QueueSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.PriorityChanged, mod, groupIdx, -1, -1); } /// Change the internal priority of the given option. @@ -206,8 +195,8 @@ public class ModOptionEditor return; m.PrioritizedOptions[optionIdx] = (m.PrioritizedOptions[optionIdx].Mod, newPriority); - _saveService.QueueSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.PriorityChanged, mod, groupIdx, optionIdx, -1); + saveService.QueueSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.PriorityChanged, mod, groupIdx, optionIdx, -1); return; } } @@ -232,8 +221,8 @@ public class ModOptionEditor break; } - _saveService.QueueSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.DisplayChange, mod, groupIdx, optionIdx, -1); + saveService.QueueSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.DisplayChange, mod, groupIdx, optionIdx, -1); } /// Add a new empty option of the given name for the given group. @@ -252,8 +241,8 @@ public class ModOptionEditor break; } - _saveService.QueueSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionAdded, mod, groupIdx, group.Count - 1, -1); + saveService.QueueSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionAdded, mod, groupIdx, group.Count - 1, -1); } /// Add a new empty option of the given name for the given group if it does not exist already. @@ -298,15 +287,15 @@ public class ModOptionEditor break; } - _saveService.QueueSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionAdded, mod, groupIdx, group.Count - 1, -1); + saveService.QueueSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionAdded, mod, groupIdx, group.Count - 1, -1); } /// Delete the given option from the given group. public void DeleteOption(Mod mod, int groupIdx, int optionIdx) { var group = mod.Groups[groupIdx]; - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.PrepareChange, mod, groupIdx, optionIdx, -1); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.PrepareChange, mod, groupIdx, optionIdx, -1); switch (group) { case SingleModGroup s: @@ -319,8 +308,8 @@ public class ModOptionEditor } group.UpdatePositions(optionIdx); - _saveService.QueueSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionDeleted, mod, groupIdx, optionIdx, -1); + saveService.QueueSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionDeleted, mod, groupIdx, optionIdx, -1); } /// Move an option inside the given option group. @@ -330,8 +319,8 @@ public class ModOptionEditor if (!group.MoveOption(optionIdxFrom, optionIdxTo)) return; - _saveService.QueueSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionMoved, mod, groupIdx, optionIdxFrom, optionIdxTo); + saveService.QueueSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionMoved, mod, groupIdx, optionIdxFrom, optionIdxTo); } /// Set the meta manipulations for a given option. Replaces existing manipulations. @@ -342,10 +331,10 @@ public class ModOptionEditor && subMod.Manipulations.All(m => manipulations.TryGetValue(m, out var old) && old.EntryEquals(m))) return; - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.PrepareChange, mod, groupIdx, optionIdx, -1); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.PrepareChange, mod, groupIdx, optionIdx, -1); subMod.ManipulationData.SetTo(manipulations); - _saveService.QueueSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionMetaChanged, mod, groupIdx, optionIdx, -1); + saveService.QueueSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionMetaChanged, mod, groupIdx, optionIdx, -1); } /// Set the file redirections for a given option. Replaces existing redirections. @@ -355,10 +344,10 @@ public class ModOptionEditor if (subMod.FileData.SetEquals(replacements)) return; - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.PrepareChange, mod, groupIdx, optionIdx, -1); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.PrepareChange, mod, groupIdx, optionIdx, -1); subMod.FileData.SetTo(replacements); - _saveService.QueueSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionFilesChanged, mod, groupIdx, optionIdx, -1); + saveService.QueueSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionFilesChanged, mod, groupIdx, optionIdx, -1); } /// Add additional file redirections to a given option, keeping already existing ones. Only fires an event if anything is actually added. @@ -369,8 +358,8 @@ public class ModOptionEditor subMod.FileData.AddFrom(additions); if (oldCount != subMod.FileData.Count) { - _saveService.QueueSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionFilesAdded, mod, groupIdx, optionIdx, -1); + saveService.QueueSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionFilesAdded, mod, groupIdx, optionIdx, -1); } } @@ -381,10 +370,10 @@ public class ModOptionEditor if (subMod.FileSwapData.SetEquals(swaps)) return; - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.PrepareChange, mod, groupIdx, optionIdx, -1); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.PrepareChange, mod, groupIdx, optionIdx, -1); subMod.FileSwapData.SetTo(swaps); - _saveService.QueueSave(new ModSaveGroup(mod, groupIdx, _config.ReplaceNonAsciiOnImport)); - _communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionSwapsChanged, mod, groupIdx, optionIdx, -1); + saveService.QueueSave(new ModSaveGroup(mod, groupIdx, config.ReplaceNonAsciiOnImport)); + communicator.ModOptionChanged.Invoke(ModOptionChangeType.OptionSwapsChanged, mod, groupIdx, optionIdx, -1); }