101 lines
4.3 KiB
C#
101 lines
4.3 KiB
C#
using Cryville.EEW.Core;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Globalization;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
|
|
namespace Cryville.EEW.Unity {
|
|
record Config(
|
|
string SeverityScheme,
|
|
float SeverityColorMappingLuminanceMultiplier,
|
|
bool UseContinuousColor,
|
|
string ColorScheme,
|
|
float HillshadeLayerOpacity,
|
|
string LocationNamer,
|
|
|
|
string OverrideTimeZone,
|
|
bool DoDisplayTimeZone,
|
|
bool DoSwitchBackToHistory,
|
|
|
|
string NowcastWarningDelayTolerance,
|
|
|
|
string OverrideDisplayCulture,
|
|
IReadOnlyCollection<TTSCultureConfig> TTSCultures,
|
|
bool DoIgnoreLanguageVariant,
|
|
|
|
IReadOnlyCollection<EventSourceConfig> EventSources
|
|
) {
|
|
public static Config Default => new(
|
|
"Default",
|
|
1f,
|
|
false,
|
|
"Default",
|
|
1,
|
|
"FERegionLong",
|
|
|
|
null,
|
|
true,
|
|
true,
|
|
|
|
"1:00:00",
|
|
|
|
"",
|
|
new List<TTSCultureConfig> { new(SharedCultures.CurrentUICulture) },
|
|
true,
|
|
|
|
new List<EventSourceConfig> {
|
|
new JMAAtomEventSourceConfig(Array.Empty<string>()),
|
|
new UpdateCheckerEventSourceConfig(),
|
|
new WolfxEventSourceConfig(Array.Empty<string>()),
|
|
}
|
|
);
|
|
}
|
|
|
|
[JsonPolymorphic(TypeDiscriminatorPropertyName = "Type", UnknownDerivedTypeHandling = JsonUnknownDerivedTypeHandling.FallBackToBaseType)]
|
|
[JsonDerivedType(typeof(BMKGOpenDataEventSourceConfig), "BMKGOpenData")]
|
|
[JsonDerivedType(typeof(CWAOpenDataEventSourceConfig), "CWAOpenData")]
|
|
[JsonDerivedType(typeof(EMSCRealTimeEventSourceConfig), "EMSCRealTime")]
|
|
[JsonDerivedType(typeof(FANStudioEventSourceConfig), "FANStudio")]
|
|
[JsonDerivedType(typeof(GeoNetEventSourceConfig), "GeoNet")]
|
|
[JsonDerivedType(typeof(GlobalQuakeServerEventSourceConfig), "GlobalQuakeServer")]
|
|
[JsonDerivedType(typeof(GlobalQuakeServer15EventSourceConfig), "GlobalQuakeServer15")]
|
|
[JsonDerivedType(typeof(JMAAtomEventSourceConfig), "JMAAtom")]
|
|
[JsonDerivedType(typeof(NOAAEventSourceConfig), "NOAA")]
|
|
[JsonDerivedType(typeof(UpdateCheckerEventSourceConfig), "UpdateChecker")]
|
|
[JsonDerivedType(typeof(USGSEventSourceConfig), "USGSQuakeML")]
|
|
[JsonDerivedType(typeof(WolfxEventSourceConfig), "Wolfx")]
|
|
abstract record EventSourceConfig();
|
|
record BMKGOpenDataEventSourceConfig([property: JsonRequired] string[] Subtypes) : EventSourceConfig;
|
|
record CWAOpenDataEventSourceConfig([property: JsonRequired] string Subtype, [property: JsonRequired] string Token) : EventSourceConfig;
|
|
record EMSCRealTimeEventSourceConfig() : EventSourceConfig;
|
|
record FANStudioEventSourceConfig([property: JsonRequired] string Subtype) : EventSourceConfig;
|
|
record GeoNetEventSourceConfig(int MinimumMMI = 3, bool DoGetFullHistory = false, bool DoGetStrongMotionInfo = true) : EventSourceConfig;
|
|
record GlobalQuakeServerEventSourceConfig([property: JsonRequired] string Host, int Port = 38000) : EventSourceConfig;
|
|
record GlobalQuakeServer15EventSourceConfig(string Host, int Port = 38000) : GlobalQuakeServerEventSourceConfig(Host, Port);
|
|
record JMAAtomEventSourceConfig(IReadOnlyCollection<string> Filter = null, bool IsFilterWhitelist = false) : EventSourceConfig;
|
|
record NOAAEventSourceConfig([property: JsonRequired] string Subtype) : EventSourceConfig;
|
|
record UpdateCheckerEventSourceConfig : EventSourceConfig;
|
|
record USGSEventSourceConfig([property: JsonRequired] string Subtype, bool UseGeoJSONFeeds, string[] Products) : EventSourceConfig;
|
|
record WolfxEventSourceConfig(IReadOnlyCollection<string> Filter = null, bool IsFilterWhitelist = false, bool UseRawCENCLocationName = false) : EventSourceConfig;
|
|
|
|
[JsonSerializable(typeof(Config))]
|
|
[JsonSourceGenerationOptions(Converters = new Type[] { typeof(CultureInfoConverter) }, WriteIndented = true)]
|
|
sealed partial class ConfigSerializationContext : JsonSerializerContext { }
|
|
|
|
sealed class CultureInfoConverter : JsonConverter<CultureInfo> {
|
|
public override CultureInfo Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
|
|
Debug.Assert(typeToConvert == typeof(CultureInfo));
|
|
var value = reader.GetString();
|
|
if (value == null) return CultureInfo.InvariantCulture;
|
|
if (value == "") return SharedCultures.CurrentUICulture;
|
|
return SharedCultures.Get(value);
|
|
}
|
|
|
|
public override void Write(Utf8JsonWriter writer, CultureInfo value, JsonSerializerOptions options) {
|
|
writer.WriteStringValue(value.Name);
|
|
}
|
|
}
|
|
}
|