Force delete from activedownloads and activeunpacks when a torrent has been deleted.
This commit is contained in:
parent
e85366f874
commit
71e1aae5ab
2 changed files with 33 additions and 2 deletions
|
|
@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [2.0.60] - 2024-01-21
|
||||
### Changed
|
||||
- Fixed bug where downloads could get stuck in active state while deleted.
|
||||
|
||||
## [2.0.59] - 2024-01-21
|
||||
### Changed
|
||||
- Added the simple downloader back and moved the current internal downloader to a new setting.
|
||||
|
|
|
|||
|
|
@ -18,14 +18,16 @@ public class TorrentRunner
|
|||
public static readonly ConcurrentDictionary<Guid, UnpackClient> ActiveUnpackClients = new();
|
||||
|
||||
private readonly ILogger<TorrentRunner> _logger;
|
||||
private readonly ILoggerFactory _loggerFactory;
|
||||
private readonly Torrents _torrents;
|
||||
private readonly Downloads _downloads;
|
||||
private readonly RemoteService _remoteService;
|
||||
private readonly HttpClient _httpClient;
|
||||
|
||||
public TorrentRunner(ILogger<TorrentRunner> logger, Torrents torrents, Downloads downloads, RemoteService remoteService)
|
||||
public TorrentRunner(ILogger<TorrentRunner> logger, ILoggerFactory loggerFactory, Torrents torrents, Downloads downloads, RemoteService remoteService)
|
||||
{
|
||||
_logger = logger;
|
||||
_loggerFactory = loggerFactory;
|
||||
_torrents = torrents;
|
||||
_downloads = downloads;
|
||||
_remoteService = remoteService;
|
||||
|
|
@ -236,6 +238,31 @@ public class TorrentRunner
|
|||
|
||||
var torrents = await _torrents.Get();
|
||||
|
||||
// Check for deleted torrents that are stuck in the ActiveDownloads or ActiveUnpacks
|
||||
foreach (var activeDownload in ActiveDownloadClients)
|
||||
{
|
||||
var download = torrents.SelectMany(m => m.Downloads).FirstOrDefault(m => m.DownloadId == activeDownload.Key);
|
||||
|
||||
if (download == null)
|
||||
{
|
||||
await activeDownload.Value.Cancel();
|
||||
ActiveDownloadClients.TryRemove(activeDownload.Key, out _);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var activeUnpacks in ActiveUnpackClients)
|
||||
{
|
||||
var download = torrents.SelectMany(m => m.Downloads).FirstOrDefault(m => m.DownloadId == activeUnpacks.Key);
|
||||
|
||||
if (download == null)
|
||||
{
|
||||
activeUnpacks.Value.Cancel();
|
||||
ActiveUnpackClients.TryRemove(activeUnpacks.Key, out _);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Process torrent retries
|
||||
foreach (var torrent in torrents.Where(m => m.Retry != null))
|
||||
{
|
||||
|
|
@ -357,7 +384,7 @@ public class TorrentRunner
|
|||
Log($"Setting download path to {downloadPath}", download, torrent);
|
||||
|
||||
// Start the download process
|
||||
var downloadClient = new DownloadClient(download, torrent, downloadPath);
|
||||
var downloadClient = new DownloadClient(_loggerFactory, download, torrent, downloadPath);
|
||||
|
||||
Log($"Starting download", download, torrent);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue