From 7265dab8a770fb7e56b9e4049c185b9dd600cb68 Mon Sep 17 00:00:00 2001 From: Stanley Dimant Date: Tue, 6 Sep 2022 13:39:33 +0200 Subject: [PATCH] change downloads to concurrentdictionary --- MareSynchronos/Managers/CachedPlayer.cs | 1 + MareSynchronos/UI/CompactUI.cs | 2 +- MareSynchronos/WebAPI/ApIController.Functions.Files.cs | 9 ++++++--- MareSynchronos/WebAPI/ApiController.Connectivity.cs | 3 ++- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/MareSynchronos/Managers/CachedPlayer.cs b/MareSynchronos/Managers/CachedPlayer.cs index 2b91f4e..689afd2 100644 --- a/MareSynchronos/Managers/CachedPlayer.cs +++ b/MareSynchronos/Managers/CachedPlayer.cs @@ -147,6 +147,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 f7011f6..946030e 100644 --- a/MareSynchronos/UI/CompactUI.cs +++ b/MareSynchronos/UI/CompactUI.cs @@ -378,7 +378,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 4d8a0a7..8b0532b 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; } @@ -136,7 +136,7 @@ namespace MareSynchronos.WebAPI } Logger.Debug("Download complete, removing " + currentDownloadId); - CurrentDownloads.Remove(currentDownloadId); + CancelDownload(currentDownloadId); } public async Task PushCharacterData(CharacterCacheDto character, List visibleCharacterIds) @@ -292,7 +292,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 3f3b074..491299b 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();