using OwnChar.App.Desktop.Api; using OwnChar.App.Desktop.Settings; using OwnChar.Data; using OwnChar.Data.Managers; using OwnChar.Data.Providers.JsonFile; using Pilz.Plugins.Advanced; using Telerik.WinControls.UI; namespace OwnChar.App.Desktop.Features.LoginProviders; internal class JsonFileLoginProvider() : LoginProvider(FeatureCodes.LoginProvider, "ownchar.jsonfile"), IPluginFeatureProvider { private const string defaultJsonFileName = "ownchar.db.json"; public static JsonFileLoginProvider Instance { get; } = new(); public override IDataManager GetDefault(IMainWindowApi api) { var settings = AppApi.Instance.Settings.Get(); return new DefaultDataManager(new JsonFileDataProvider(settings?.RecentFilePath ?? defaultJsonFileName)); } public override void Configure(IMainWindowApi api, ref IDataManager? manager) { var settings = AppApi.Instance.Settings.Get(); using var ofd = new RadOpenFileDialog { Filter = "OwnChar Json database (*.json)|*.json" }; if (manager is DefaultDataManager defaultManager && defaultManager.DataProvider is JsonFileDataProvider jsonFileDataProvider) ofd.FileName = jsonFileDataProvider.JsonFilePath; else ofd.FileName = settings.RecentFilePath; if (ofd.ShowDialog(api.Window) != System.Windows.Forms.DialogResult.OK) return; settings.RecentFilePath = ofd.FileName; manager = new DefaultDataManager(new JsonFileDataProvider(ofd.FileName ?? defaultJsonFileName)); } }