Fixed: Processing very long ETA from Transmission

Closes #5444
This commit is contained in:
cicomalieran 2023-03-07 19:46:48 -05:00 committed by GitHub
parent aa938d911b
commit 9800bd6b43
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 32 additions and 4 deletions

View File

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using FluentAssertions; using FluentAssertions;
@ -275,7 +276,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.TransmissionTests
[TestCase(-1)] // Infinite/Unknown [TestCase(-1)] // Infinite/Unknown
[TestCase(-2)] // Magnet Downloading [TestCase(-2)] // Magnet Downloading
public void should_ignore_negative_eta(int eta) public void should_ignore_negative_eta(long eta)
{ {
_completed.Eta = eta; _completed.Eta = eta;
@ -284,6 +285,26 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.TransmissionTests
item.RemainingTime.Should().NotHaveValue(); item.RemainingTime.Should().NotHaveValue();
} }
[TestCase(2147483648)] // 2038-01-19T03:14:08Z > int.MaxValue as unix timestamp can be either an int or a long
public void should_support_long_values_for_eta_in_seconds(long eta)
{
_downloading.Eta = eta;
PrepareClientToReturnDownloadingItem();
var item = Subject.GetItems().Single();
item.RemainingTime.Should().Be(TimeSpan.FromSeconds(eta));
}
[TestCase(2147483648000)] // works with milliseconds format too
public void should_support_long_values_for_eta_in_milliseconds(long eta)
{
_downloading.Eta = eta;
PrepareClientToReturnDownloadingItem();
var item = Subject.GetItems().Single();
item.RemainingTime.Should().Be(TimeSpan.FromMilliseconds(eta));
}
[Test] [Test]
public void should_not_be_removable_and_should_not_allow_move_files_if_max_ratio_reached_and_not_stopped() public void should_not_be_removable_and_should_not_allow_move_files_if_max_ratio_reached_and_not_stopped()
{ {

View File

@ -271,7 +271,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.VuzeTests
[TestCase(-1)] // Infinite/Unknown [TestCase(-1)] // Infinite/Unknown
[TestCase(-2)] // Magnet Downloading [TestCase(-2)] // Magnet Downloading
public void should_ignore_negative_eta(int eta) public void should_ignore_negative_eta(long eta)
{ {
_completed.Eta = eta; _completed.Eta = eta;

View File

@ -79,9 +79,16 @@ namespace NzbDrone.Core.Download.Clients.Transmission
(double)torrent.UploadedEver / torrent.DownloadedEver; (double)torrent.UploadedEver / torrent.DownloadedEver;
if (torrent.Eta >= 0) if (torrent.Eta >= 0)
{
try
{ {
item.RemainingTime = TimeSpan.FromSeconds(torrent.Eta); item.RemainingTime = TimeSpan.FromSeconds(torrent.Eta);
} }
catch (OverflowException)
{
item.RemainingTime = TimeSpan.FromMilliseconds(torrent.Eta);
}
}
if (!torrent.ErrorString.IsNullOrWhiteSpace()) if (!torrent.ErrorString.IsNullOrWhiteSpace())
{ {

View File

@ -9,7 +9,7 @@
public long TotalSize { get; set; } public long TotalSize { get; set; }
public long LeftUntilDone { get; set; } public long LeftUntilDone { get; set; }
public bool IsFinished { get; set; } public bool IsFinished { get; set; }
public int Eta { get; set; } public long Eta { get; set; }
public TransmissionTorrentStatus Status { get; set; } public TransmissionTorrentStatus Status { get; set; }
public int SecondsDownloading { get; set; } public int SecondsDownloading { get; set; }
public int SecondsSeeding { get; set; } public int SecondsSeeding { get; set; }