From 12eaa5814ef20b0910e8d64a753378b6f6797989 Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Fri, 22 May 2026 00:52:16 +1000 Subject: Initial commit --- Server/Services/ConfigService.cs | 72 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Server/Services/ConfigService.cs (limited to 'Server/Services/ConfigService.cs') diff --git a/Server/Services/ConfigService.cs b/Server/Services/ConfigService.cs new file mode 100644 index 0000000..ac1f155 --- /dev/null +++ b/Server/Services/ConfigService.cs @@ -0,0 +1,72 @@ +using HyperBooru.ApiModels; + +namespace HyperBooru.Services; + +public interface IConfigService { + public string DataPath { get; } + public string KeyPath { get; } + public string DbConnectionString { get; } + public string MediaBasePath { get; } + public string ThumbnailBasePath { get; } + public string ConvertedMediaBasePath { get; } + public bool EnableOcr { get; } +} + +public class ConfigService : IConfigService { + private IConfiguration config; + + private const string AppName = "HyperBooru"; + + public string DataPath { + get { + #if DEBUG + return "Data"; + #else + string? path = config["DataPath"]; + if(path is not null) + return path; + + switch(Environment.OSVersion.Platform) { + case PlatformID.Win32NT: + return Path.Join( + Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), + AppName); + case PlatformID.Unix: + return $"/var/lib/{AppName.ToLower()}"; + default: + throw new NotImplementedException( + $"Unknown Operating System: {Environment.OSVersion.Platform}"); + } + #endif + } + } + + public string KeyPath => + Path.Join(DataPath, "keys"); + + public string DbConnectionString => + config.GetConnectionString("DefaultConnection") ?? + throw new HBException("Unable to get default connection string"); + + public string MediaBasePath => + Path.Join(DataPath, "media"); + + public string ThumbnailBasePath => + Path.Join(DataPath, "thumb"); + + public string ConvertedMediaBasePath => + Path.Join(DataPath, "converted"); + + public bool EnableOcr => + bool.TryParse(config["DisableOcr"], out bool x) ? !x : true; + + public ConfigService(IConfiguration config) { + this.config = config; + InitDirectoryStructure(); + } + + private void InitDirectoryStructure() { + Directory.CreateDirectory(DataPath); + Directory.CreateDirectory(MediaBasePath); + } +} \ No newline at end of file -- cgit v1.3