mirror of
http://git.xinwangdao.com/cnnc-embedded-parts-detect/detect.git
synced 2025-06-24 21:44:12 +08:00
41 lines
1.3 KiB
C#
41 lines
1.3 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Reactive;
|
|
using System.Reactive.Linq;
|
|
using Newtonsoft.Json;
|
|
using ReactiveUI;
|
|
|
|
namespace detect.gui.Drivers;
|
|
|
|
public sealed class NewtonsoftJsonSuspensionDriver : ISuspensionDriver
|
|
{
|
|
private readonly string _stateFilePath;
|
|
|
|
private readonly JsonSerializerSettings _settings = new JsonSerializerSettings
|
|
{
|
|
TypeNameHandling = TypeNameHandling.All
|
|
};
|
|
|
|
public NewtonsoftJsonSuspensionDriver(string stateFilePath) => _stateFilePath = stateFilePath;
|
|
|
|
public IObservable<Unit> InvalidateState()
|
|
{
|
|
if (File.Exists(_stateFilePath))
|
|
File.Delete(_stateFilePath);
|
|
return Observable.Return(Unit.Default);
|
|
}
|
|
|
|
public IObservable<object> LoadState()
|
|
{
|
|
var lines = File.Exists(_stateFilePath) ? File.ReadAllText(_stateFilePath) : "{\"$type\":\"detect.gui.ViewModels.MainViewModel, detect.gui\"}";
|
|
var state = JsonConvert.DeserializeObject<object>(lines, _settings);
|
|
return Observable.Return(state!);
|
|
}
|
|
|
|
public IObservable<Unit> SaveState(object state)
|
|
{
|
|
var lines = JsonConvert.SerializeObject(state, Formatting.Indented, _settings);
|
|
File.WriteAllText(_stateFilePath, lines);
|
|
return Observable.Return(Unit.Default);
|
|
}
|
|
} |