Removed obsolete torrent runner code, fixed queuing issue.
This commit is contained in:
parent
5d58bc9082
commit
5fa5f416c7
5 changed files with 23 additions and 108 deletions
|
|
@ -22,7 +22,8 @@ export class TorrentStatusPipe implements PipeTransform {
|
||||||
return 'Finished';
|
return 'Finished';
|
||||||
}
|
}
|
||||||
|
|
||||||
const downloading = torrent.downloads.where((m) => m.downloadStarted && !m.downloadFinished);
|
const downloading = torrent.downloads.where((m) => m.downloadStarted && !m.downloadFinished && m.bytesDone > 0);
|
||||||
|
const downloaded = torrent.downloads.where((m) => m.downloadFinished != null);
|
||||||
|
|
||||||
if (downloading.length > 0) {
|
if (downloading.length > 0) {
|
||||||
const bytesDone = downloading.sum((m) => m.bytesDone);
|
const bytesDone = downloading.sum((m) => m.bytesDone);
|
||||||
|
|
@ -33,17 +34,19 @@ export class TorrentStatusPipe implements PipeTransform {
|
||||||
progress = 0;
|
progress = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
let allSpeeds = downloading.sum((m) => m.speed) / downloading.length;
|
let allSpeeds = downloading.sum((m) => m.speed);
|
||||||
|
|
||||||
let speed: string | string[] = '0';
|
let speed: string | string[] = '0';
|
||||||
if (allSpeeds > 0) {
|
|
||||||
speed = this.pipe.transform(allSpeeds, 'filesize');
|
|
||||||
|
|
||||||
return `Downloading file ${downloading.length}/${torrent.downloads.length} (${progress.toFixed(2)}% - ${speed}/s)`;
|
speed = this.pipe.transform(allSpeeds, 'filesize');
|
||||||
}
|
|
||||||
|
return `Downloading file ${downloading.length + downloaded.length}/${
|
||||||
|
torrent.downloads.length
|
||||||
|
} (${progress.toFixed(2)}% - ${speed}/s)`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const unpacking = torrent.downloads.where((m) => m.unpackingStarted && !m.unpackingFinished);
|
const unpacking = torrent.downloads.where((m) => m.unpackingStarted && !m.unpackingFinished && m.bytesDone > 0);
|
||||||
|
const unpacked = torrent.downloads.where((m) => m.unpackingFinished != null);
|
||||||
|
|
||||||
if (unpacking.length > 0) {
|
if (unpacking.length > 0) {
|
||||||
const bytesDone = unpacking.sum((m) => m.bytesDone);
|
const bytesDone = unpacking.sum((m) => m.bytesDone);
|
||||||
|
|
@ -54,11 +57,9 @@ export class TorrentStatusPipe implements PipeTransform {
|
||||||
progress = 0;
|
progress = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
let allSpeeds = unpacking.sum((m) => m.speed) / unpacking.length;
|
return `Extracting file ${unpacking.length + unpacked.length}/${torrent.downloads.length} (${progress.toFixed(
|
||||||
|
2
|
||||||
if (allSpeeds > 0) {
|
)}%)`;
|
||||||
return `Extracting file ${unpacking.length}/${torrent.downloads.length} (${progress.toFixed(2)}%)`;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const queuedForUnpacking = torrent.downloads.where((m) => m.unpackingQueued && !m.unpackingStarted);
|
const queuedForUnpacking = torrent.downloads.where((m) => m.unpackingQueued && !m.unpackingStarted);
|
||||||
|
|
@ -73,14 +74,10 @@ export class TorrentStatusPipe implements PipeTransform {
|
||||||
return `Queued for downloading`;
|
return `Queued for downloading`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const unpacked = torrent.downloads.where((m) => m.unpackingFinished != null);
|
|
||||||
|
|
||||||
if (unpacked.length > 0) {
|
if (unpacked.length > 0) {
|
||||||
return `Files unpacked`;
|
return `Files unpacked`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const downloaded = torrent.downloads.where((m) => m.downloadFinished != null);
|
|
||||||
|
|
||||||
if (downloaded.length > 0) {
|
if (downloaded.length > 0) {
|
||||||
return `Files downloaded to host`;
|
return `Files downloaded to host`;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -242,40 +242,6 @@ namespace RdtClient.Data.Data
|
||||||
await TorrentData.VoidCache();
|
await TorrentData.VoidCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Download(Guid downloadId)
|
|
||||||
{
|
|
||||||
var dbDownload = await _dataContext.Downloads
|
|
||||||
.FirstOrDefaultAsync(m => m.DownloadId == downloadId);
|
|
||||||
|
|
||||||
dbDownload.DownloadStarted = null;
|
|
||||||
dbDownload.DownloadFinished = null;
|
|
||||||
dbDownload.UnpackingQueued = null;
|
|
||||||
dbDownload.UnpackingStarted = null;
|
|
||||||
dbDownload.UnpackingFinished = null;
|
|
||||||
dbDownload.Completed = null;
|
|
||||||
dbDownload.Error = null;
|
|
||||||
|
|
||||||
await _dataContext.SaveChangesAsync();
|
|
||||||
|
|
||||||
await TorrentData.VoidCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task Unpack(Guid downloadId)
|
|
||||||
{
|
|
||||||
var dbDownload = await _dataContext.Downloads
|
|
||||||
.FirstOrDefaultAsync(m => m.DownloadId == downloadId);
|
|
||||||
|
|
||||||
dbDownload.UnpackingQueued = DateTimeOffset.UtcNow;
|
|
||||||
dbDownload.UnpackingStarted = null;
|
|
||||||
dbDownload.UnpackingFinished = null;
|
|
||||||
dbDownload.Completed = null;
|
|
||||||
dbDownload.Error = null;
|
|
||||||
|
|
||||||
await _dataContext.SaveChangesAsync();
|
|
||||||
|
|
||||||
await TorrentData.VoidCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task Reset(Guid downloadId)
|
public async Task Reset(Guid downloadId)
|
||||||
{
|
{
|
||||||
var dbDownload = await _dataContext.Downloads
|
var dbDownload = await _dataContext.Downloads
|
||||||
|
|
|
||||||
|
|
@ -47,11 +47,14 @@ namespace RdtClient.Service.Services.Downloaders
|
||||||
|
|
||||||
_logger.Debug($"Starting download of {_uri}, writing to path: {path}, fileName: {fileName}");
|
_logger.Debug($"Starting download of {_uri}, writing to path: {path}, fileName: {fileName}");
|
||||||
|
|
||||||
var isAlreadyAdded = await CheckIfAdded();
|
if (String.IsNullOrWhiteSpace(_gid))
|
||||||
|
|
||||||
if (isAlreadyAdded)
|
|
||||||
{
|
{
|
||||||
throw new Exception($"The download link {_uri} has already been added to Aria2");
|
var isAlreadyAdded = await CheckIfAdded();
|
||||||
|
|
||||||
|
if (isAlreadyAdded)
|
||||||
|
{
|
||||||
|
throw new Exception($"The download link {_uri} has already been added to Aria2");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var retryCount = 0;
|
var retryCount = 0;
|
||||||
|
|
|
||||||
|
|
@ -90,16 +90,6 @@ namespace RdtClient.Service.Services
|
||||||
await _downloadData.DeleteForTorrent(torrentId);
|
await _downloadData.DeleteForTorrent(torrentId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task UpdateDownload(Guid downloadId)
|
|
||||||
{
|
|
||||||
await _downloadData.Download(downloadId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task UpdateUnpack(Guid downloadId)
|
|
||||||
{
|
|
||||||
await _downloadData.Unpack(downloadId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task Reset(Guid downloadId)
|
public async Task Reset(Guid downloadId)
|
||||||
{
|
{
|
||||||
await _downloadData.Reset(downloadId);
|
await _downloadData.Reset(downloadId);
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,7 @@ namespace RdtClient.Service.Services
|
||||||
Log($"Retrying download", download, download.Torrent);
|
Log($"Retrying download", download, download.Torrent);
|
||||||
|
|
||||||
await _downloads.UpdateRetryCount(downloadId, download.RetryCount + 1);
|
await _downloads.UpdateRetryCount(downloadId, download.RetryCount + 1);
|
||||||
await _downloads.UpdateDownload(downloadId);
|
await _downloads.Reset(downloadId);
|
||||||
}
|
}
|
||||||
else if (download.Torrent.RetryCount < TorrentRetryCount)
|
else if (download.Torrent.RetryCount < TorrentRetryCount)
|
||||||
{
|
{
|
||||||
|
|
@ -549,47 +549,6 @@ namespace RdtClient.Service.Services
|
||||||
|
|
||||||
await _torrents.CheckForLinks(torrent.TorrentId);
|
await _torrents.CheckForLinks(torrent.TorrentId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the torrent has any files that need starting to be downloaded, download them.
|
|
||||||
var downloadsPending = torrent.Downloads
|
|
||||||
.Where(m => m.Completed == null &&
|
|
||||||
m.DownloadStarted == null &&
|
|
||||||
m.DownloadFinished == null &&
|
|
||||||
m.Error == null)
|
|
||||||
.OrderBy(m => m.Added)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
if (downloadsPending.Count > 0)
|
|
||||||
{
|
|
||||||
Log($"Found {downloadsPending.Count} downloads pending", torrent);
|
|
||||||
|
|
||||||
foreach (var download in downloadsPending)
|
|
||||||
{
|
|
||||||
Log($"Marking to download", download, torrent);
|
|
||||||
|
|
||||||
await _downloads.UpdateDownload(download.DownloadId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If all files are finished downloading, move to the unpacking step.
|
|
||||||
var unpackingPending = torrent.Downloads
|
|
||||||
.Where(m => m.Completed == null &&
|
|
||||||
m.DownloadFinished != null &&
|
|
||||||
m.UnpackingStarted == null &&
|
|
||||||
m.UnpackingFinished == null)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
if (unpackingPending.Count > 0)
|
|
||||||
{
|
|
||||||
Log($"Found {unpackingPending.Count} unpacks pending", torrent);
|
|
||||||
|
|
||||||
foreach (var download in unpackingPending)
|
|
||||||
{
|
|
||||||
Log($"Marking to unpack", download, torrent);
|
|
||||||
|
|
||||||
await _downloads.UpdateUnpack(download.DownloadId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if torrent is complete
|
// Check if torrent is complete
|
||||||
|
|
@ -597,7 +556,7 @@ namespace RdtClient.Service.Services
|
||||||
{
|
{
|
||||||
var allComplete = torrent.Downloads.Count(m => m.Completed != null);
|
var allComplete = torrent.Downloads.Count(m => m.Completed != null);
|
||||||
|
|
||||||
if (allComplete > 0)
|
if (allComplete == torrent.Downloads.Count)
|
||||||
{
|
{
|
||||||
Log($"All downloads complete, marking torrent as complete", torrent);
|
Log($"All downloads complete, marking torrent as complete", torrent);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue