diff --git a/DiscordChatExporter.Core/Exporting/MessageGroupTemplate.cshtml b/DiscordChatExporter.Core/Exporting/MessageGroupTemplate.cshtml index 641c2ada..556f9210 100644 --- a/DiscordChatExporter.Core/Exporting/MessageGroupTemplate.cshtml +++ b/DiscordChatExporter.Core/Exporting/MessageGroupTemplate.cshtml @@ -34,7 +34,7 @@ }
-@foreach (var (message, i) in Messages.WithIndex()) +@foreach (var (i, message) in Messages.Index()) { var isFirst = i == 0; diff --git a/DiscordChatExporter.Core/Exporting/PlainTextMessageWriter.cs b/DiscordChatExporter.Core/Exporting/PlainTextMessageWriter.cs index 85b46a64..01e985a9 100644 --- a/DiscordChatExporter.Core/Exporting/PlainTextMessageWriter.cs +++ b/DiscordChatExporter.Core/Exporting/PlainTextMessageWriter.cs @@ -173,7 +173,7 @@ internal class PlainTextMessageWriter(Stream stream, ExportContext context) await _writer.WriteLineAsync("{Reactions}"); - foreach (var (reaction, i) in reactions.WithIndex()) + foreach (var (i, reaction) in reactions.Index()) { cancellationToken.ThrowIfCancellationRequested(); diff --git a/DiscordChatExporter.Core/Utils/Extensions/CollectionExtensions.cs b/DiscordChatExporter.Core/Utils/Extensions/CollectionExtensions.cs index 99ee2766..03e34721 100644 --- a/DiscordChatExporter.Core/Utils/Extensions/CollectionExtensions.cs +++ b/DiscordChatExporter.Core/Utils/Extensions/CollectionExtensions.cs @@ -12,16 +12,6 @@ public static class CollectionExtensions } } - extension(IEnumerable source) - { - public IEnumerable<(T value, int index)> WithIndex() - { - var i = 0; - foreach (var o in source) - yield return (o, i++); - } - } - extension(IEnumerable source) where T : class { diff --git a/DiscordChatExporter.Gui/Framework/DialogManager.cs b/DiscordChatExporter.Gui/Framework/DialogManager.cs index 68d49435..65666cea 100644 --- a/DiscordChatExporter.Gui/Framework/DialogManager.cs +++ b/DiscordChatExporter.Gui/Framework/DialogManager.cs @@ -2,8 +2,8 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Threading; using System.Threading.Tasks; -using AsyncKeyedLock; using Avalonia; using Avalonia.Platform.Storage; using DialogHostAvalonia; @@ -13,11 +13,12 @@ namespace DiscordChatExporter.Gui.Framework; public class DialogManager : IDisposable { - private readonly AsyncNonKeyedLocker _dialogLock = new(); + private readonly SemaphoreSlim _dialogLock = new(1, 1); public async Task ShowDialogAsync(DialogViewModelBase dialog) { - using (await _dialogLock.LockAsync()) + await _dialogLock.WaitAsync(); + try { await DialogHost.Show( dialog, @@ -44,6 +45,10 @@ public class DialogManager : IDisposable return dialog.DialogResult; } + finally + { + _dialogLock.Release(); + } } public async Task PromptSaveFilePathAsync( diff --git a/DiscordChatExporter.Gui/Framework/DialogVIewModelBase.cs b/DiscordChatExporter.Gui/Framework/DialogViewModelBase.cs similarity index 100% rename from DiscordChatExporter.Gui/Framework/DialogVIewModelBase.cs rename to DiscordChatExporter.Gui/Framework/DialogViewModelBase.cs diff --git a/DiscordChatExporter.Gui/Utils/Extensions/ProcessExtensions.cs b/DiscordChatExporter.Gui/Utils/Extensions/ProcessExtensions.cs index 8c4915c9..07317d21 100644 --- a/DiscordChatExporter.Gui/Utils/Extensions/ProcessExtensions.cs +++ b/DiscordChatExporter.Gui/Utils/Extensions/ProcessExtensions.cs @@ -9,7 +9,7 @@ internal static class ProcessExtensions public static void StartShellExecute(string path) { using var process = new Process(); - process.StartInfo = new ProcessStartInfo { FileName = path, UseShellExecute = true }; + process.StartInfo = new ProcessStartInfo(path) { UseShellExecute = true }; process.Start(); }