1
0
Fork 0
mirror of https://github.com/hawkeye-stan/msfs-popout-panel-manager.git synced 2024-11-29 09:10:09 +00:00
msfs-popout-panel-manager/Model/AppSetting.cs

177 lines
5.9 KiB
C#
Raw Normal View History

2022-01-27 13:40:04 +00:00
using MSFSPopoutPanelManager.Shared;
using Newtonsoft.Json;
using System;
using System.ComponentModel;
using System.IO;
namespace MSFSPopoutPanelManager.Model
{
public class AppSetting : INotifyPropertyChanged
{
private const string APP_SETTING_DATA_FILENAME = "appsettingdata.json";
private bool _saveEnabled;
// Using PropertyChanged.Fody
public event PropertyChangedEventHandler PropertyChanged;
public event EventHandler<EventArgs<bool>> AlwaysOnTopChanged;
public event EventHandler<EventArgs<bool>> AutoPopOutPanelsChanged;
public AppSetting()
{
// Set defaults
2022-05-04 15:11:04 +00:00
AutoUpdaterUrl = "https://raw.githubusercontent.com/hawkeye-stan/msfs-popout-panel-manager/master/autoupdate.xml";
//AutoUpdaterUrl = "https://raw.githubusercontent.com/hawkeye-stan/AutoUpdateTest/main/autoupdate.xml"; // Test URL against test repo
2022-04-18 16:24:00 +00:00
LastUsedProfileId = -1;
2022-01-27 13:40:04 +00:00
MinimizeToTray = false;
AlwaysOnTop = true;
UseAutoPanning = true;
2022-04-18 03:38:33 +00:00
AutoPanningKeyBinding = "0";
2022-01-27 13:40:04 +00:00
StartMinimized = false;
IncludeBuiltInPanel = false;
2022-05-04 15:11:04 +00:00
AutoDisableTrackIR = true;
2022-01-27 13:40:04 +00:00
AutoPopOutPanels = false;
AutoPopOutPanelsWaitDelay = new AutoPopOutPanelsWaitDelay();
}
public void Load()
{
var appSetting = ReadAppSetting();
2022-05-04 15:11:04 +00:00
this.AutoUpdaterUrl = appSetting.AutoUpdaterUrl;
2022-04-18 16:24:00 +00:00
this.LastUsedProfileId = appSetting.LastUsedProfileId;
2022-01-27 13:40:04 +00:00
this.MinimizeToTray = appSetting.MinimizeToTray;
this.AlwaysOnTop = appSetting.AlwaysOnTop;
this.UseAutoPanning = appSetting.UseAutoPanning;
2022-04-18 03:38:33 +00:00
this.AutoPanningKeyBinding = appSetting.AutoPanningKeyBinding;
2022-01-27 13:40:04 +00:00
this.StartMinimized = appSetting.StartMinimized;
this.IncludeBuiltInPanel = appSetting.IncludeBuiltInPanel;
2022-05-04 15:11:04 +00:00
this.AutoDisableTrackIR = appSetting.AutoDisableTrackIR;
2022-01-27 13:40:04 +00:00
this.AutoPopOutPanels = appSetting.AutoPopOutPanels;
this.AutoPopOutPanelsWaitDelay = appSetting.AutoPopOutPanelsWaitDelay;
2022-04-18 03:38:33 +00:00
AutoPopOutPanelsWaitDelay.DataChanged += (e, source) => WriteAppSetting(this);
2022-01-27 13:40:04 +00:00
_saveEnabled = true;
}
public void OnPropertyChanged(string propertyName, object before, object after)
{
// Automatic save data
if (_saveEnabled && propertyName != "AutoStart" && before != after)
WriteAppSetting(this);
switch (propertyName)
{
case "AlwaysOnTop":
AlwaysOnTopChanged?.Invoke(this, new EventArgs<bool>((bool)after));
break;
case "AutoPopOutPanels":
AutoPopOutPanelsChanged?.Invoke(this, new EventArgs<bool>((bool)after));
break;
}
}
2022-05-04 15:11:04 +00:00
public string AutoUpdaterUrl { get; set; }
2022-04-18 16:24:00 +00:00
public int LastUsedProfileId { get; set; }
2022-01-27 13:40:04 +00:00
public bool MinimizeToTray { get; set; }
public bool AlwaysOnTop { get; set; }
public bool UseAutoPanning { get; set; }
2022-04-18 03:38:33 +00:00
public string AutoPanningKeyBinding { get; set; }
2022-01-27 13:40:04 +00:00
public bool StartMinimized { get; set; }
public bool IncludeBuiltInPanel { get; set; }
public bool AutoPopOutPanels { get; set; }
2022-05-04 15:11:04 +00:00
public bool AutoDisableTrackIR { get; set; }
2022-01-27 13:40:04 +00:00
public AutoPopOutPanelsWaitDelay AutoPopOutPanelsWaitDelay { get; set; }
[JsonIgnore]
public bool AutoStart
{
get
{
return AppAutoStart.CheckIsAutoStart();
}
set
{
if (value)
AppAutoStart.Activate();
else
AppAutoStart.Deactivate();
}
}
public AppSetting ReadAppSetting()
{
try
{
using (StreamReader reader = new StreamReader(Path.Combine(FileIo.GetUserDataFilePath(), APP_SETTING_DATA_FILENAME)))
{
return JsonConvert.DeserializeObject<AppSetting>(reader.ReadToEnd());
}
}
2022-04-18 16:24:00 +00:00
catch
2022-01-27 13:40:04 +00:00
{
// if file does not exist, write default data
var appSetting = new AppSetting();
WriteAppSetting(appSetting);
return appSetting;
}
}
public void WriteAppSetting(AppSetting appSetting)
{
try
{
var userProfilePath = FileIo.GetUserDataFilePath();
if (!Directory.Exists(userProfilePath))
Directory.CreateDirectory(userProfilePath);
using (StreamWriter file = File.CreateText(Path.Combine(userProfilePath, APP_SETTING_DATA_FILENAME)))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(file, appSetting);
}
}
2022-04-18 16:24:00 +00:00
catch
2022-01-27 13:40:04 +00:00
{
Logger.LogStatus($"Unable to write app setting data file: {APP_SETTING_DATA_FILENAME}", StatusMessageType.Error);
}
}
}
2022-04-18 03:38:33 +00:00
public class AutoPopOutPanelsWaitDelay : INotifyPropertyChanged
2022-01-27 13:40:04 +00:00
{
2022-04-18 03:38:33 +00:00
// Using PropertyChanged.Fody
public event PropertyChangedEventHandler PropertyChanged;
public event EventHandler DataChanged;
2022-01-27 13:40:04 +00:00
public AutoPopOutPanelsWaitDelay()
{
2022-04-18 03:38:33 +00:00
ReadyToFlyButton = 6;
2022-01-27 13:40:04 +00:00
InitialCockpitView = 2;
InstrumentationPowerOn = 2;
}
public int ReadyToFlyButton { get; set; }
public int InitialCockpitView { get; set; }
public int InstrumentationPowerOn { get; set; }
2022-04-18 03:38:33 +00:00
public void OnPropertyChanged(string propertyName, object before, object after)
{
DataChanged?.Invoke(this, null);
}
2022-01-27 13:40:04 +00:00
}
}