Skip to content

Commit

Permalink
Save settings properly when game settings are reloaded
Browse files Browse the repository at this point in the history
  • Loading branch information
nicoco007 committed Jul 18, 2020
1 parent 2fec24e commit 16bc0de
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 15 deletions.
4 changes: 2 additions & 2 deletions Source/CustomAvatar/CustomAvatarsInstaller.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ public override void InstallBindings()
Container.Bind<ILoggerProvider>().FromMethod((context) => context.Container.Instantiate<IPALoggerProvider>(new object[] { _logger })).AsTransient();

// settings
Container.Bind<SettingsManager>().AsSingle();
Container.Bind<Settings>().FromMethod((context) => context.Container.Resolve<SettingsManager>().Load()).AsSingle();
Container.BindInterfacesAndSelfTo<SettingsManager>().AsSingle();
Container.Bind<Settings>().FromMethod((context) => context.Container.Resolve<SettingsManager>().settings);

// managers & helper classes
Container.BindInterfacesAndSelfTo<PlayerAvatarManager>().AsSingle();
Expand Down
3 changes: 0 additions & 3 deletions Source/CustomAvatar/Plugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
using Object = UnityEngine.Object;
using BeatSaberMarkupLanguage;
using CustomAvatar.Logging;
using CustomAvatar.Tracking;
using HarmonyLib;
using ILogger = CustomAvatar.Logging.ILogger;

Expand Down Expand Up @@ -103,8 +102,6 @@ public void OnExit()

SceneManager.sceneLoaded -= OnSceneLoaded;
SceneManager.sceneUnloaded -= OnSceneUnloaded;

_settingsManager.Save(_settings);
}

private void OnSceneLoaded(Scene newScene, LoadSceneMode mode)
Expand Down
24 changes: 14 additions & 10 deletions Source/CustomAvatar/Utilities/SettingsManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,35 @@

namespace CustomAvatar.Utilities
{
internal class SettingsManager
internal class SettingsManager : IDisposable
{
public readonly string kSettingsPath = Path.Combine(Environment.CurrentDirectory, "UserData", "CustomAvatars.json");

private bool _hasReset;
public Settings settings;

private ILogger _logger;

private SettingsManager(ILoggerProvider loggerProvider)
{
_logger = loggerProvider.CreateLogger<SettingsManager>();

Load();
}

public Settings Load()
public void Dispose()
{
Save();
}

public void Load()
{
_logger.Info("Loading settings from " + kSettingsPath);

if (!File.Exists(kSettingsPath))
{
_logger.Info("File does not exist, using default settings");

return new Settings();
settings = new Settings();
}

try
Expand All @@ -37,23 +44,20 @@ public Settings Load()
using (var jsonReader = new JsonTextReader(reader))
{
var serializer = GetSerializer();
return serializer.Deserialize<Settings>(jsonReader) ?? new Settings();
settings = serializer.Deserialize<Settings>(jsonReader) ?? new Settings();
}
}
catch (Exception ex)
{
_logger.Error("Failed to load settings from file; using default settings");
_logger.Error(ex);

_hasReset = true;
return new Settings();
settings = new Settings();
}
}

public void Save(Settings settings)
public void Save()
{
if (_hasReset) return;

foreach (string fileName in settings.avatarSpecificSettings.Keys.ToList())
{
if (!File.Exists(Path.Combine(PlayerAvatarManager.kCustomAvatarsPath, fileName)) || Path.IsPathRooted(fileName))
Expand Down

0 comments on commit 16bc0de

Please sign in to comment.