Files
App/OwnChar.App.Desktop/Features/LoginProviders/JsonFileLoginProvider.cs
2024-06-10 21:13:59 +02:00

44 lines
1.6 KiB
C#

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<JsonFileLoginProvider>
{
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<JsonFileLoginProviderSettings>();
return new DefaultDataManager(new JsonFileDataProvider(settings?.RecentFilePath ?? defaultJsonFileName));
}
public override void Configure(IMainWindowApi api, ref IDataManager? manager)
{
var settings = AppApi.Instance.Settings.Get<JsonFileLoginProviderSettings>();
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));
}
}