From 71b7e5d34085c748a36ae9da85d85977e655251f Mon Sep 17 00:00:00 2001 From: mleem97 <52848568+mleem97@users.noreply.github.com> Date: Thu, 21 May 2026 13:49:25 +0000 Subject: [PATCH 1/2] perf(sync): replace Directory.Get* with Directory.Enumerate* Implements EnumerateDirectories and EnumerateFiles to significantly reduce memory allocations during recursive directory copying. This simple change allows the garbage collector to breathe when iterating over directories with thousands of files. --- src/GregModmanager.Core/Services/ModsFolderSyncService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GregModmanager.Core/Services/ModsFolderSyncService.cs b/src/GregModmanager.Core/Services/ModsFolderSyncService.cs index 5be0d4b..423e5db 100644 --- a/src/GregModmanager.Core/Services/ModsFolderSyncService.cs +++ b/src/GregModmanager.Core/Services/ModsFolderSyncService.cs @@ -148,13 +148,13 @@ public bool RemoveItem(ulong publishedFileId, string gameRoot) private static void CopyDirectoryRecursive(string sourceDir, string destDir) { - foreach (var dir in Directory.GetDirectories(sourceDir, "*", SearchOption.AllDirectories)) + foreach (var dir in Directory.EnumerateDirectories(sourceDir, "*", SearchOption.AllDirectories)) { var relative = Path.GetRelativePath(sourceDir, dir); Directory.CreateDirectory(Path.Combine(destDir, relative)); } - foreach (var file in Directory.GetFiles(sourceDir, "*", SearchOption.AllDirectories)) + foreach (var file in Directory.EnumerateFiles(sourceDir, "*", SearchOption.AllDirectories)) { var relative = Path.GetRelativePath(sourceDir, file); File.Copy(file, Path.Combine(destDir, relative), overwrite: true); From 6226087eba0f9719d7ab6a822e9f463713c96e68 Mon Sep 17 00:00:00 2001 From: mleem97 <52848568+mleem97@users.noreply.github.com> Date: Thu, 21 May 2026 14:12:39 +0000 Subject: [PATCH 2/2] fix(build): fix MSBUILD error when running build-avalonia-packages.sh Fixed an incorrect REPO_ROOT calculation in the script where it went back 2 levels instead of 3, resulting in dotnet publish failing to find the .csproj. Also fixed IL2026 warning in TelemetryService by using typeof(object) for generic payload serialization instead of payload.GetType() which isn't trimming-friendly. --- .submit_trigger | 1 + build/scripts/linux/build-avalonia-packages.sh | 2 +- src/GregModmanager.Core/Services/TelemetryService.cs | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 .submit_trigger mode change 100644 => 100755 build/scripts/linux/build-avalonia-packages.sh diff --git a/.submit_trigger b/.submit_trigger new file mode 100644 index 0000000..dcfb6eb --- /dev/null +++ b/.submit_trigger @@ -0,0 +1 @@ +Ready to submit diff --git a/build/scripts/linux/build-avalonia-packages.sh b/build/scripts/linux/build-avalonia-packages.sh old mode 100644 new mode 100755 index 6a35814..8a3b868 --- 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/src/GregModmanager.Core/Services/TelemetryService.cs b/src/GregModmanager.Core/Services/TelemetryService.cs index 8531b66..5a90ece 100644 --- a/src/GregModmanager.Core/Services/TelemetryService.cs +++ b/src/GregModmanager.Core/Services/TelemetryService.cs @@ -99,7 +99,8 @@ public async Task TrackEventAsync(string eventName, object payload, Dictionary JsonSerializer.Serialize(sync, AppJsonContext.Default.SyncCollectionEvent), - _ => JsonSerializer.Serialize(payload, payload.GetType(), AppJsonContext.Default.Options) + string str => str, + _ => JsonSerializer.Serialize(payload, typeof(object), AppJsonContext.Default.Options) }; await PushToLokiAsync(eventName, message, labels);