using System.IO; using System.Threading.Tasks; using ErsatzTV.Core; using ErsatzTV.Core.Interfaces.Jellyfin; using ErsatzTV.Core.Jellyfin; using LanguageExt; using Newtonsoft.Json; using static LanguageExt.Prelude; namespace ErsatzTV.Infrastructure.Jellyfin { public class JellyfinSecretStore : IJellyfinSecretStore { public Task DeleteAll() => SaveSecrets(new JellyfinSecrets()); public Task ReadSecrets() => File.ReadAllTextAsync(FileSystemLayout.JellyfinSecretsPath) .Map(JsonConvert.DeserializeObject) .Map(s => Optional(s).IfNone(new JellyfinSecrets())); public Task SaveSecrets(JellyfinSecrets jellyfinSecrets) => Some(JsonConvert.SerializeObject(jellyfinSecrets)).Match( s => File.WriteAllTextAsync(FileSystemLayout.JellyfinSecretsPath, s).ToUnit(), Task.FromResult(Unit.Default)); } }