diff --git a/MareSynchronos/Managers/CachedPlayer.cs b/MareSynchronos/Managers/CachedPlayer.cs index 5070de0..2c8a5ab 100644 --- a/MareSynchronos/Managers/CachedPlayer.cs +++ b/MareSynchronos/Managers/CachedPlayer.cs @@ -146,6 +146,7 @@ public class CachedPlayer { Logger.Debug("Downloading missing files for player " + PlayerName + ", kind: " + objectKind); await _apiController.DownloadFiles(downloadId, toDownloadReplacements, downloadToken); + _apiController.CancelDownload(downloadId); if (downloadToken.IsCancellationRequested) { Logger.Verbose("Detected cancellation"); diff --git a/MareSynchronos/UI/CompactUI.cs b/MareSynchronos/UI/CompactUI.cs index 7191066..1e43155 100644 --- a/MareSynchronos/UI/CompactUI.cs +++ b/MareSynchronos/UI/CompactUI.cs @@ -367,7 +367,7 @@ namespace MareSynchronos.UI if (currentDownloads.Any()) { - var totalDownloads = currentDownloads.Count; + var totalDownloads = currentDownloads.Count(); var doneDownloads = currentDownloads.Count(c => c.IsTransferred); var totalDownloaded = currentDownloads.Sum(c => c.Transferred); var totalToDownload = currentDownloads.Sum(c => c.Total); diff --git a/MareSynchronos/WebAPI/ApIController.Functions.Files.cs b/MareSynchronos/WebAPI/ApIController.Functions.Files.cs index 2c224be..e1097c5 100644 --- a/MareSynchronos/WebAPI/ApIController.Functions.Files.cs +++ b/MareSynchronos/WebAPI/ApIController.Functions.Files.cs @@ -95,7 +95,7 @@ namespace MareSynchronos.WebAPI { File.Delete(tempFile); Logger.Debug("Detected cancellation, removing " + currentDownloadId); - CurrentDownloads.Remove(currentDownloadId); + CancelDownload(currentDownloadId); break; } @@ -132,7 +132,7 @@ namespace MareSynchronos.WebAPI } Logger.Debug("Download complete, removing " + currentDownloadId); - CurrentDownloads.Remove(currentDownloadId); + CancelDownload(currentDownloadId); } public async Task PushCharacterData(CharacterCacheDto character, List visibleCharacterIds) @@ -288,7 +288,10 @@ namespace MareSynchronos.WebAPI public void CancelDownload(int downloadId) { - CurrentDownloads.Remove(downloadId); + while (CurrentDownloads.ContainsKey(downloadId)) + { + CurrentDownloads.TryRemove(downloadId, out _); + } } } diff --git a/MareSynchronos/WebAPI/ApiController.Connectivity.cs b/MareSynchronos/WebAPI/ApiController.Connectivity.cs index 0d12587..11c17a9 100644 --- a/MareSynchronos/WebAPI/ApiController.Connectivity.cs +++ b/MareSynchronos/WebAPI/ApiController.Connectivity.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Net.Http; @@ -93,7 +94,7 @@ namespace MareSynchronos.WebAPI public event SimpleStringDelegate? UnpairedFromOther; - public Dictionary> CurrentDownloads { get; } = new(); + public ConcurrentDictionary> CurrentDownloads { get; } = new(); public List CurrentUploads { get; } = new();