blizzless-diiis/src/DiIiS-NA/Core/Config/ConfigManager.cs
Lucca Faria Ferri d670871a4f Changed config files to their own name;
DrinkHealthPotion.cs configurable;
Cleanup
2023-02-06 04:08:12 -08:00

65 lines
1.7 KiB
C#

//Blizzless Project 2022
using System;
using DiIiS_NA.Core.Helpers.IO;
using DiIiS_NA.Core.Logging;
using Nini.Config;
namespace DiIiS_NA.Core.Config
{
public sealed class ConfigurationManager
{
private static readonly Logger Logger = LogManager.CreateLogger("ConfM");
private static readonly IniConfigSource Parser; // the ini parser.
private static readonly string ConfigFile;
private static bool _fileExists = false; // does the ini file exists?
static ConfigurationManager()
{
try
{
ConfigFile = $"{FileHelpers.AssemblyRoot}/{"config.ini"}"; // the config file's location.
Parser = new IniConfigSource(ConfigFile); // see if the file exists by trying to parse it.
_fileExists = true;
}
catch (Exception)
{
Parser = new IniConfigSource(); // initiate a new .ini source.
_fileExists = false;
Logger.Warn("Error loading settings config.ini, will be using default settings.");
}
finally
{
// adds aliases so we can use On and Off directives in ini files.
Parser!.Alias.AddAlias("On", true);
Parser!.Alias.AddAlias("Off", false);
// logger level aliases.
Parser!.Alias.AddAlias("MinimumLevel", Logger.Level.Trace);
Parser!.Alias.AddAlias("MaximumLevel", Logger.Level.Trace);
}
Parser.ExpandKeyValues();
}
internal static IConfig Section(string section) // Returns the asked config section.
{
return Parser.Configs[section];
}
internal static IConfig AddSection(string section) // Adds a config section.
{
return Parser.AddConfig(section);
}
internal static void Save() // Saves the settings.
{
if (_fileExists) Parser.Save();
else
{
Parser.Save(ConfigFile);
_fileExists = true;
}
}
}
}