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);
}