Skip to content

Commit 3b7d490

Browse files
committed
更新Settings文件内容,配置文件不再支持pcld格式
1 parent f9bd11d commit 3b7d490

File tree

6 files changed

+239
-116
lines changed

6 files changed

+239
-116
lines changed

PearlCalculatorCP/SettingsJsonConverter.cs

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,26 +32,46 @@ public override Settings Read(ref Utf8JsonReader reader, Type typeToConvert, Jso
3232
settings.BlueTNT = rootElement.GetProperty(nameof(settings.BlueTNT)).GetInt32();
3333
settings.MaxTNT = rootElement.GetProperty(nameof(settings.MaxTNT)).GetInt32();
3434

35-
settings.Direction =
36-
Enum.TryParse<Direction>(rootElement.GetProperty(nameof(settings.Direction)).GetString(),
37-
out var direction)
38-
? direction
39-
: Direction.North;
40-
35+
{
36+
settings.Direction =
37+
Enum.TryParse<Direction>(rootElement.GetProperty(nameof(settings.Direction)).GetString(),
38+
out var direction)
39+
? direction
40+
: Direction.North;
41+
}
42+
4143
var pearlElemRoot = rootElement.GetProperty(nameof(settings.Pearl));
4244

4345
settings.Pearl = new PearlEntity
4446
{
4547
Position = ReadSpace3D(pearlElemRoot.GetProperty(nameof(settings.Pearl.Position))),
4648
Motion = ReadSpace3D(pearlElemRoot.GetProperty(nameof(settings.Pearl.Motion)))
4749
};
48-
50+
51+
{
52+
settings.DefaultRedTNTDirection =
53+
rootElement.TryGetProperty(nameof(settings.DefaultRedTNTDirection), out var drt) &&
54+
Enum.TryParse<Direction>(drt.GetString(), out var direction)
55+
? direction
56+
: Data.DefaultRedDuper;
57+
}
58+
59+
{
60+
settings.DefaultBlueTNTDirection =
61+
rootElement.TryGetProperty(nameof(settings.DefaultBlueTNTDirection), out var drt) &&
62+
Enum.TryParse<Direction>(drt.GetString(), out var direction)
63+
? direction
64+
: Data.DefaultBlueDuper;
65+
}
66+
4967
return settings;
5068
}
5169

5270
public override void Write(Utf8JsonWriter writer, Settings value, JsonSerializerOptions options)
5371
{
5472
writer.WriteStartObject();
73+
74+
writer.WriteString("Version", Settings.Version);
5575

5676
WriteObject(writer, options, nameof(value.NorthEastTNT), ref value.NorthEastTNT, _space3DJsonConverter);
5777

@@ -81,6 +101,9 @@ public override void Write(Utf8JsonWriter writer, Settings value, JsonSerializer
81101

82102
writer.WriteString(nameof(value.Direction), value.Direction.ToString());
83103

104+
writer.WriteString(nameof(value.DefaultRedTNTDirection), value.DefaultRedTNTDirection.ToString());
105+
writer.WriteString(nameof(value.DefaultBlueTNTDirection), value.DefaultBlueTNTDirection.ToString());
106+
84107
writer.WriteEndObject();
85108
}
86109

PearlCalculatorCP/ViewModels/MoreSettingsViewModel.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,9 @@ public MoreSettingsViewModel()
231231

232232
PearlYCoor = settings.Pearl.Position.Y;
233233
PearlYMomentum = settings.Pearl.Motion.Y;
234+
235+
DefaultRedDuperIndex = (int) Enum.Parse<ComboBoxDireEnum>(settings.DefaultRedTNTDirection.ToString());
236+
DefaultBlueDuperIndex = (int) Enum.Parse<ComboBoxDireEnum>(settings.DefaultBlueTNTDirection.ToString());
234237
});
235238
}
236239

PearlCalculatorCP/Views/MainWindow.axaml.cs

Lines changed: 6 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#define ENABLE_ALL_SETTINGS
2-
31
using System;
42
using System.Collections.Generic;
53
using System.IO;
@@ -14,15 +12,8 @@
1412
using PearlCalculatorCP.Utils;
1513
using PearlCalculatorCP.ViewModels;
1614
using PearlCalculatorLib.General;
17-
18-
#if ENABLE_JSON_SETTINGS || ENABLE_ALL_SETTINGS
1915
using System.Text;
2016
using System.Text.Json;
21-
#endif
22-
23-
#if !ENABLE_JSON_SETTINGS || ENABLE_ALL_SETTINGS
24-
using System.Runtime.Serialization.Formatters.Binary;
25-
#endif
2617

2718
#nullable disable
2819

@@ -33,32 +24,13 @@ public class MainWindow : Window
3324

3425
private static readonly List<FileDialogFilter> FileDialogFilter = new List<FileDialogFilter>
3526
{
36-
#if ENABLE_ALL_SETTINGS
37-
new FileDialogFilter
38-
{
39-
Name = "pcld;json",
40-
Extensions = {"pcld", "json"}
41-
},
42-
#endif
43-
44-
#if ENABLE_ALL_SETTINGS || !ENABLE_JSON_SETTINGS
45-
new FileDialogFilter
46-
{
47-
Name = "pcld",
48-
Extensions = {"pcld"}
49-
},
50-
#endif
51-
52-
#if ENABLE_JSON_SETTINGS || ENABLE_ALL_SETTINGS
5327
new FileDialogFilter
5428
{
5529
Name = "json",
5630
Extensions = {"json"}
5731
},
58-
#endif
5932
};
60-
61-
#if ENABLE_JSON_SETTINGS || ENABLE_ALL_SETTINGS
33+
6234
private static readonly SettingsJsonConverter JsonConverter = new SettingsJsonConverter();
6335

6436
private static readonly JsonSerializerOptions WriteSerializerOptions = new JsonSerializerOptions
@@ -71,7 +43,7 @@ public class MainWindow : Window
7143
{
7244
Converters = { JsonConverter }
7345
};
74-
#endif
46+
7547
private bool _isLoadDefaultSettings;
7648

7749
private MainWindowViewModel _vm;
@@ -127,23 +99,7 @@ private async void ImportSettingsBtn_OnClick(object sender, RoutedEventArgs e)
12799
ImportSettings(result[0]);
128100
}
129101

130-
public void ImportSettings(string path)
131-
{
132-
#if ENABLE_ALL_SETTINGS
133-
if (Path.GetExtension(path) == ".json")
134-
ImportSettingsFormJson(path);
135-
else
136-
ImportSettingsFormPcld(path);
137-
#elif ENABLE_JSON_SETTINGS
138-
ImportSettingsFormJson(path);
139-
#else
140-
ImportSettingsFormPcld(path);
141-
#endif
142-
}
143-
144-
#if ENABLE_JSON_SETTINGS || ENABLE_ALL_SETTINGS
145-
146-
private async void ImportSettingsFormJson(string path)
102+
public async void ImportSettings(string path)
147103
{
148104
var json = await File.ReadAllTextAsync(path, Encoding.UTF8);
149105
try
@@ -155,59 +111,24 @@ private async void ImportSettingsFormJson(string path)
155111
LogUtils.Error("settings json file format error");
156112
}
157113
}
158-
#endif
159-
160-
#if !ENABLE_JSON_SETTINGS || ENABLE_ALL_SETTINGS
161-
private async void ImportSettingsFormPcld(string path)
162-
{
163-
await using var fs = File.OpenRead(path);
164-
if (new BinaryFormatter().Deserialize(fs) is Settings settings)
165-
{
166-
_vm.LoadDataFormSettings(settings);
167-
}
168-
}
169-
#endif
170-
171-
172114

173115
private async void SaveSettingsBtn_OnClick(object sender, RoutedEventArgs e)
174116
{
175117
var dialog = new SaveFileDialog {Filters = FileDialogFilter};
176118
var path = await dialog.ShowAsync(this);
177119

178120
if (string.IsNullOrWhiteSpace(path) || string.IsNullOrEmpty(path)) return;
179-
180-
#if ENABLE_ALL_SETTINGS
181-
if (Path.GetExtension(path) == ".json")
182-
SaveSettingsToJson(path);
183-
else
184-
SaveSettingsToPcld(path);
185-
#elif ENABLE_JSON_SETTINGS
186-
SaveSettingsToJson(path);
187-
#else
188-
SaveSettingsToPcld(path);
189-
#endif
121+
SaveSettings(path);
190122
}
191-
192-
#if ENABLE_JSON_SETTINGS || ENABLE_ALL_SETTINGS
193-
private async void SaveSettingsToJson(string path)
123+
124+
private async void SaveSettings(string path)
194125
{
195126
var json = JsonSerializer.SerializeToUtf8Bytes(Settings.CreateSettingsFormData(), WriteSerializerOptions);
196127

197128
using var sr = File.OpenWrite(path);
198129
sr.SetLength(0);
199130
await sr.WriteAsync(json.AsMemory());
200131
}
201-
#endif
202-
203-
#if !ENABLE_JSON_SETTINGS || ENABLE_ALL_SETTINGS
204-
private async void SaveSettingsToPcld(string path)
205-
{
206-
var bf = new BinaryFormatter();
207-
await using var fs = File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite);
208-
bf.Serialize(fs, Settings.CreateSettingsFormData());
209-
}
210-
#endif
211132

212133
#endregion
213134

PearlCalculatorLib/General/Settings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace PearlCalculatorLib.General
1212
[Serializable]
1313
public class Settings
1414
{
15-
public const string FileSuffix = "pcld file|*.pcld";
15+
public const string Version = "2.7";
1616

1717
public Space3D NorthWestTNT;
1818
public Space3D NorthEastTNT;

PearlCalculatorWFA/PearlCalculatorForm.cs

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,28 @@
1717
using System.Drawing.Printing;
1818
using System.Runtime.Serialization;
1919
using System.Drawing;
20+
using System.Text;
21+
using System.Text.Json;
2022
using PearlCalculatorLib.PearlCalculationLib.Entity;
2123

2224
namespace PearlCalculatorWFA
2325
{
2426
public partial class PearlCalculatorWFA : Form
2527
{
26-
const string DefaultImportSettingsPath = @"./settings.pcld";
28+
const string DefaultImportSettingsPath = @"./settings.json";
29+
30+
private static readonly SettingsJsonConverter JsonConverter = new SettingsJsonConverter();
31+
32+
private static readonly JsonSerializerOptions WriteSerializerOptions = new JsonSerializerOptions
33+
{
34+
Converters = { JsonConverter },
35+
WriteIndented = true
36+
};
37+
38+
private static readonly JsonSerializerOptions ReadSerializerOptions = new JsonSerializerOptions
39+
{
40+
Converters = { JsonConverter }
41+
};
2742

2843
private bool IsDisplayOnTNT = false;
2944
private string OffsetXTextBoxString = "0.";
@@ -357,52 +372,52 @@ private void OffsetZTextBox_TextChanged(object sender , EventArgs e)
357372

358373
#region General : Import/Export Settings
359374

360-
private void ImportSettingButton_Click(object sender , EventArgs e)
375+
private async void ImportSettingButton_Click(object sender , EventArgs e)
361376
{
362-
using var fileDialog = new OpenFileDialog { Filter = Settings.FileSuffix };
377+
using var fileDialog = new OpenFileDialog { Filter = "json|*.json" };
363378

364379
if(fileDialog.ShowDialog() == DialogResult.OK)
365380
{
366-
using var fs = File.OpenRead(fileDialog.FileName);
367-
if(new BinaryFormatter().Deserialize(fs) is Settings settings)
381+
var json = await File.ReadAllTextAsync(fileDialog.FileName, Encoding.UTF8);
382+
try
368383
{
369-
ImportSettings(settings);
384+
ImportSettings(JsonSerializer.Deserialize<Settings>(json, ReadSerializerOptions));
370385
RefleshInput();
371386
}
387+
catch (Exception)
388+
{
389+
Log("Main", "Error", "settings json file format error");
390+
}
372391
}
373392
}
374393

375-
private void SaveSettingButton_Click(object sender , EventArgs e)
394+
private async void SaveSettingButton_Click(object sender , EventArgs e)
376395
{
377-
var bf = new BinaryFormatter();
378-
using var fileDialog = new SaveFileDialog();
379-
fileDialog.Filter = Settings.FileSuffix;
380-
fileDialog.AddExtension = true;
396+
using var fileDialog = new SaveFileDialog {Filter = "json|*.json", AddExtension = true};
381397

382398
if(fileDialog.ShowDialog() == DialogResult.OK)
383399
{
384-
var fs = File.Open(fileDialog.FileName , FileMode.OpenOrCreate);
385-
bf.Serialize(fs , Settings.CreateSettingsFormData());
386-
fs.Close();
400+
var json = JsonSerializer.SerializeToUtf8Bytes(Settings.CreateSettingsFormData(), WriteSerializerOptions);
401+
402+
using var sr = File.OpenWrite(fileDialog.FileName);
403+
sr.SetLength(0);
404+
await sr.WriteAsync(json.AsMemory());
387405
}
388406
}
389407

390-
void ImportSettingFormDefaultFile()
408+
async void ImportSettingFormDefaultFile()
391409
{
392410
if (File.Exists(DefaultImportSettingsPath))
393411
{
394-
using var fs = File.OpenRead(DefaultImportSettingsPath);
412+
var json = await File.ReadAllTextAsync(DefaultImportSettingsPath, Encoding.UTF8);
395413
try
396414
{
397-
if (new BinaryFormatter().Deserialize(fs) is Settings settings)
398-
{
399-
ImportSettings(settings);
400-
RefleshInput();
401-
}
415+
ImportSettings(JsonSerializer.Deserialize<Settings>(json, ReadSerializerOptions));
416+
RefleshInput();
402417
}
403-
catch (SerializationException)
418+
catch (Exception)
404419
{
405-
Log("Main", "Error", "At start, found settings.pcld file, but it not is calculator's settings file");
420+
Log("Main", "Error", "At start, found settings.json file, but it not is calculator's settings file");
406421
}
407422
}
408423
}
@@ -427,6 +442,9 @@ void ImportSettings(Settings settings)
427442
GeneralData.PearlOffset = settings.Offset;
428443

429444
GeneralData.Direction = settings.Direction;
445+
446+
GeneralData.DefaultRedDuper = settings.DefaultRedTNTDirection;
447+
GeneralData.DefaultBlueDuper = settings.DefaultBlueTNTDirection;
430448
}
431449

432450
void RefleshInput()

0 commit comments

Comments
 (0)