Skip to content

Commit

Permalink
* Fixed campaign settings not using the campaign id
Browse files Browse the repository at this point in the history
* Fixed redundant folder creation in the root settings folder
* Fixed Fluent Campaign settings stored in the root settings folder
  • Loading branch information
Aragas committed Jun 1, 2024
1 parent 109e9a4 commit 3d020b4
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 12 deletions.
2 changes: 1 addition & 1 deletion build/common.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<PropertyGroup>
<GameVersion>1.0.0</GameVersion>
<GameVersionWithPrefix>v$(GameVersion)</GameVersionWithPrefix>
<Version>5.10.0</Version>
<Version>5.11.0</Version>
<HarmonyVersion>2.2.2</HarmonyVersion>
<ButterLibVersion>2.8.15</ButterLibVersion>
<UIExtenderExVersion>2.8.1</UIExtenderExVersion>
Expand Down
6 changes: 6 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
---------------------------------------------------------------------------------------------------
Version: 5.11.0
Game Versions: v1.0.0,v1.0.1,v1.0.2,v1.0.3,v1.1.0,v1.1.1,v1.1.2,v1.1.3,v1.1.4,v1.1.5,v1.1.6,v1.2.x
* Fixed campaign settings not using the campaign id
* Fixed redundant folder creation in the root settings folder
* Fixed Fluent Campaign settings stored in the root settings folder
---------------------------------------------------------------------------------------------------
Version: 5.10.0
Game Versions: v1.0.0,v1.0.1,v1.0.2,v1.0.3,v1.1.0,v1.1.1,v1.1.2,v1.1.3,v1.1.4,v1.1.5,v1.1.6,v1.2.x
* Added Settings instance cache and cache invalidation
Expand Down
2 changes: 1 addition & 1 deletion src/MCM.Implementation/Containers/BaseSettingsContainer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ abstract class BaseSettingsContainer<TSettings> :
where TSettings : BaseSettings
{
protected virtual GameDirectory RootFolder { get; } =
GenericServiceProvider.GetService<IFileSystemProvider>()?.GetModSettingsDirectory() ?? new GameDirectory(PlatformDirectoryType.User, "Configs\\ModSettings\\");
GenericServiceProvider.GetService<IFileSystemProvider>()?.GetModSettingsDirectory() ?? new GameDirectory(PlatformDirectoryType.User, @"Configs\ModSettings\");
protected virtual Dictionary<string, TSettings> LoadedSettings { get; } = new();

/// <inheritdoc/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,17 @@ internal sealed class FluentPerCampaignSettingsContainer : BaseSettingsContainer

private readonly IGameEventListener _gameEventListener;

/// <inheritdoc/>
protected override GameDirectory RootFolder { get; }

public FluentPerCampaignSettingsContainer(IGameEventListener gameEventListener)
{
_gameEventListener = gameEventListener;
_gameEventListener.GameStarted += GameStarted;
_gameEventListener.GameEnded += GameEnded;

var fileSystemProvider = GenericServiceProvider.GetService<IFileSystemProvider>();
RootFolder = fileSystemProvider!.GetDirectory(base.RootFolder, "PerCampaign")!;
}

/// <inheritdoc/>
Expand All @@ -46,10 +52,11 @@ protected override void RegisterSettings(FluentPerCampaignSettings? settings)

LoadedSettings.Add(settings.Id, settings);

var folderDirectory = fileSystemProvider.GetOrCreateDirectory(RootFolder, settings.FolderName);
var campaignDirectory = fileSystemProvider.GetOrCreateDirectory(RootFolder, id);
var folderDirectory = fileSystemProvider.GetOrCreateDirectory(campaignDirectory, settings.FolderName);
var directory = string.IsNullOrEmpty(settings.SubFolder) ? folderDirectory : fileSystemProvider.GetOrCreateDirectory(folderDirectory, settings.SubFolder);

var settingsFormats = GenericServiceProvider.GetService<IEnumerable<ISettingsFormat>>() ?? Enumerable.Empty<ISettingsFormat>();
var settingsFormats = GenericServiceProvider.GetService<IEnumerable<ISettingsFormat>>() ?? [];
var settingsFormat = settingsFormats.FirstOrDefault(x => x.FormatTypes.Any(y => y == settings.FormatType));
settingsFormat?.Load(settings, directory, settings.Id);
settings.OnPropertyChanged(BaseSettings.LoadingComplete);
Expand All @@ -70,10 +77,11 @@ public override bool SaveSettings(BaseSettings settings)
if (GenericServiceProvider.GetService<IFileSystemProvider>() is not { } fileSystemProvider)
return false;

var folderDirectory = fileSystemProvider.GetOrCreateDirectory(RootFolder, settings.FolderName);
var campaignDirectory = fileSystemProvider.GetOrCreateDirectory(RootFolder, id);
var folderDirectory = fileSystemProvider.GetOrCreateDirectory(campaignDirectory, settings.FolderName);
var directory = string.IsNullOrEmpty(settings.SubFolder) ? folderDirectory : fileSystemProvider.GetOrCreateDirectory(folderDirectory, settings.SubFolder);

var settingsFormats = GenericServiceProvider.GetService<IEnumerable<ISettingsFormat>>() ?? Enumerable.Empty<ISettingsFormat>();
var settingsFormats = GenericServiceProvider.GetService<IEnumerable<ISettingsFormat>>() ?? [];
var settingsFormat = settingsFormats.FirstOrDefault(x => x.FormatTypes.Any(y => y == perCampaignSettings.FormatType));
settingsFormat?.Save(perCampaignSettings, directory, perCampaignSettings.Id);

Expand All @@ -94,6 +102,6 @@ public void Unregister(FluentPerCampaignSettings settings)
private void GameStarted() => LoadedSettings.Clear();
private void GameEnded() => LoadedSettings.Clear();

public IEnumerable<UnavailableSetting> GetUnavailableSettings() => Enumerable.Empty<UnavailableSetting>();
public IEnumerable<UnavailableSetting> GetUnavailableSettings() => [];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,11 @@ protected override void RegisterSettings(PerCampaignSettings? settings)

LoadedSettings.Add(settings.Id, settings);

var folderDirectory = fileSystemProvider.GetOrCreateDirectory(RootFolder, settings.FolderName);
var campaignDirectory = fileSystemProvider.GetOrCreateDirectory(RootFolder, id);
var folderDirectory = fileSystemProvider.GetOrCreateDirectory(campaignDirectory, settings.FolderName);
var directory = string.IsNullOrEmpty(settings.SubFolder) ? folderDirectory : fileSystemProvider.GetOrCreateDirectory(folderDirectory, settings.SubFolder);

var settingsFormats = GenericServiceProvider.GetService<IEnumerable<ISettingsFormat>>() ?? Enumerable.Empty<ISettingsFormat>();
var settingsFormats = GenericServiceProvider.GetService<IEnumerable<ISettingsFormat>>() ?? [];
var settingsFormat = settingsFormats.FirstOrDefault(x => x.FormatTypes.Any(y => y == settings.FormatType));
settingsFormat?.Load(settings, directory, settings.Id);
settings.OnPropertyChanged(BaseSettings.LoadingComplete);
Expand All @@ -85,10 +86,11 @@ public override bool SaveSettings(BaseSettings settings)
if (GenericServiceProvider.GetService<IFileSystemProvider>() is not { } fileSystemProvider)
return false;

var folderDirectory = fileSystemProvider.GetOrCreateDirectory(RootFolder, settings.FolderName);
var campaignDirectory = fileSystemProvider.GetOrCreateDirectory(RootFolder, id);
var folderDirectory = fileSystemProvider.GetOrCreateDirectory(campaignDirectory, settings.FolderName);
var directory = string.IsNullOrEmpty(settings.SubFolder) ? folderDirectory : fileSystemProvider.GetOrCreateDirectory(folderDirectory, settings.SubFolder);

var settingsFormats = GenericServiceProvider.GetService<IEnumerable<ISettingsFormat>>() ?? Enumerable.Empty<ISettingsFormat>();
var settingsFormats = GenericServiceProvider.GetService<IEnumerable<ISettingsFormat>>() ?? [];
var settingsFormat = settingsFormats.FirstOrDefault(x => x.FormatTypes.Any(y => y == perCampaignSettings.FormatType));
settingsFormat?.Save(perCampaignSettings, directory, perCampaignSettings.Id);

Expand Down Expand Up @@ -164,7 +166,7 @@ private void LoadSettings()

public IEnumerable<UnavailableSetting> GetUnavailableSettings() => !_hasGameStarted
? GetPerCampaignSettings().Select(setting => new UnavailableSetting(setting.Id, setting.DisplayName, UnavailableSettingType.PerCampaign))
: Enumerable.Empty<UnavailableSetting>();
: [];

private void GameEnded()
{
Expand Down

0 comments on commit 3d020b4

Please sign in to comment.