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();
}