diff --git a/build/scripts/linux/build-avalonia-packages.sh b/build/scripts/linux/build-avalonia-packages.sh index 6a35814..8a3b868 100644 --- a/build/scripts/linux/build-avalonia-packages.sh +++ b/build/scripts/linux/build-avalonia-packages.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -euo pipefail -REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)" PROJECT_PATH="$REPO_ROOT/src/GregModmanager.Avalonia/GregModmanager.Avalonia.csproj" OUTPUT_ROOT="${1:-$REPO_ROOT/artifacts/avalonia-linux}" VERSION="${2:-1.1.0}" diff --git a/global.json b/global.json index c071e6f..badcd44 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "9.0.313", + "version": "10.0.103", "rollForward": "minor" } } diff --git a/src/GregModmanager.Avalonia/App.axaml.cs b/src/GregModmanager.Avalonia/App.axaml.cs index 08ae8af..9a7f325 100644 --- a/src/GregModmanager.Avalonia/App.axaml.cs +++ b/src/GregModmanager.Avalonia/App.axaml.cs @@ -21,12 +21,12 @@ public override void OnFrameworkInitializationCompleted() var telemetry = Services.GetRequiredService(); _ = telemetry.ReportCrashesAsync(); - _ = telemetry.TrackEventAsync("startup", new + _ = telemetry.TrackEventAsync("startup", new GregModmanager.Models.AppStartupEvent { - steamActive = GregModmanager.Steam.SteamApiNativeLoader.IsLoaded, - culture = System.Globalization.CultureInfo.CurrentCulture.Name, - osDescription = System.Runtime.InteropServices.RuntimeInformation.OSDescription, - dotNetVersion = System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription + SteamActive = GregModmanager.Steam.SteamApiNativeLoader.IsLoaded, + Culture = System.Globalization.CultureInfo.CurrentCulture.Name, + OsDescription = System.Runtime.InteropServices.RuntimeInformation.OSDescription, + DotNetVersion = System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription }); if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) diff --git a/src/GregModmanager.Core/Models/AppJsonContext.cs b/src/GregModmanager.Core/Models/AppJsonContext.cs index d7fe96d..403d8dd 100644 --- a/src/GregModmanager.Core/Models/AppJsonContext.cs +++ b/src/GregModmanager.Core/Models/AppJsonContext.cs @@ -34,6 +34,7 @@ namespace GregModmanager.Models; [JsonSerializable(typeof(int))] [JsonSerializable(typeof(RalphTaskStatus))] [JsonSerializable(typeof(AssetModMetadata))] +[JsonSerializable(typeof(AppStartupEvent))] public partial class AppJsonContext : JsonSerializerContext { } diff --git a/src/GregModmanager.Core/Models/AppStartupEvent.cs b/src/GregModmanager.Core/Models/AppStartupEvent.cs new file mode 100644 index 0000000..02d8ae1 --- /dev/null +++ b/src/GregModmanager.Core/Models/AppStartupEvent.cs @@ -0,0 +1,9 @@ +namespace GregModmanager.Models; + +public class AppStartupEvent +{ + public bool SteamActive { get; set; } + public string Culture { get; set; } = ""; + public string OsDescription { get; set; } = ""; + public string DotNetVersion { get; set; } = ""; +} diff --git a/src/GregModmanager.Core/Services/ModCollectionService.cs b/src/GregModmanager.Core/Services/ModCollectionService.cs index 1a9f4f4..c16ff92 100644 --- a/src/GregModmanager.Core/Services/ModCollectionService.cs +++ b/src/GregModmanager.Core/Services/ModCollectionService.cs @@ -234,8 +234,8 @@ private CollectionCatalog LoadCatalog() return new CollectionCatalog(); } - var json = File.ReadAllText(_storagePath); - return JsonSerializer.Deserialize(json, AppJsonContext.Default.CollectionCatalog) ?? new CollectionCatalog(); + using var stream = File.OpenRead(_storagePath); + return JsonSerializer.Deserialize(stream, AppJsonContext.Default.CollectionCatalog) ?? new CollectionCatalog(); } catch { @@ -245,6 +245,7 @@ private CollectionCatalog LoadCatalog() private void SaveCatalog() { - File.WriteAllText(_storagePath, JsonSerializer.Serialize(_catalog, AppJsonContext.Default.CollectionCatalog)); + using var stream = new FileStream(_storagePath, FileMode.Create, FileAccess.Write, FileShare.None, bufferSize: 32768); + JsonSerializer.Serialize(stream, _catalog, AppJsonContext.Default.CollectionCatalog); } } \ No newline at end of file diff --git a/src/GregModmanager.Core/Services/TelemetryService.cs b/src/GregModmanager.Core/Services/TelemetryService.cs index 8531b66..078d396 100644 --- a/src/GregModmanager.Core/Services/TelemetryService.cs +++ b/src/GregModmanager.Core/Services/TelemetryService.cs @@ -96,11 +96,19 @@ public async Task TrackEventAsync(string eventName, object payload, Dictionary JsonSerializer.Serialize(sync, AppJsonContext.Default.SyncCollectionEvent), - _ => JsonSerializer.Serialize(payload, payload.GetType(), AppJsonContext.Default.Options) - }; + message = JsonSerializer.Serialize(sync, AppJsonContext.Default.SyncCollectionEvent); + } + else if (payload is AppStartupEvent startup) + { + message = JsonSerializer.Serialize(startup, AppJsonContext.Default.AppStartupEvent); + } + else if (payload != null) + { + message = JsonSerializer.Serialize(payload.ToString(), AppJsonContext.Default.String); + } await PushToLokiAsync(eventName, message, labels); }