Fixed setting the error status from RD.
This commit is contained in:
parent
443843b146
commit
d7062de42e
2 changed files with 44 additions and 28 deletions
|
|
@ -13,12 +13,10 @@ using SharpCompress.Readers;
|
||||||
|
|
||||||
namespace RdtClient.Service.Services
|
namespace RdtClient.Service.Services
|
||||||
{
|
{
|
||||||
public class DownloadManager
|
public static class DownloadManager
|
||||||
{
|
{
|
||||||
public static readonly ConcurrentDictionary<Guid, Download> ActiveDownloads = new ConcurrentDictionary<Guid, Download>();
|
public static readonly ConcurrentDictionary<Guid, Download> ActiveDownloads = new ConcurrentDictionary<Guid, Download>();
|
||||||
|
|
||||||
private static readonly Object Lock = new Object();
|
|
||||||
|
|
||||||
static DownloadManager()
|
static DownloadManager()
|
||||||
{
|
{
|
||||||
ServicePointManager.Expect100Continue = false;
|
ServicePointManager.Expect100Continue = false;
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,13 @@ using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using MonoTorrent;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using RDNET;
|
using RDNET;
|
||||||
using RdtClient.Data.Data;
|
|
||||||
using RdtClient.Data.Enums;
|
using RdtClient.Data.Enums;
|
||||||
using RdtClient.Data.Models.Data;
|
|
||||||
using RdtClient.Service.Models;
|
using RdtClient.Service.Models;
|
||||||
|
using ITorrentData = RdtClient.Data.Data.ITorrentData;
|
||||||
|
using Torrent = RdtClient.Data.Models.Data.Torrent;
|
||||||
|
|
||||||
namespace RdtClient.Service.Services
|
namespace RdtClient.Service.Services
|
||||||
{
|
{
|
||||||
|
|
@ -29,15 +30,21 @@ namespace RdtClient.Service.Services
|
||||||
|
|
||||||
public class Torrents : ITorrents
|
public class Torrents : ITorrents
|
||||||
{
|
{
|
||||||
private readonly ITorrentData _torrentData;
|
|
||||||
private readonly ISettings _settings;
|
|
||||||
private readonly IDownloads _downloads;
|
|
||||||
|
|
||||||
private static RdNetClient _rdtClient;
|
private static RdNetClient _rdtClient;
|
||||||
|
|
||||||
private static DateTime _rdtLastUpdate = DateTime.UtcNow;
|
private static DateTime _rdtLastUpdate = DateTime.UtcNow;
|
||||||
|
|
||||||
private static readonly SemaphoreSlim SemaphoreSlim = new SemaphoreSlim(1,1);
|
private static readonly SemaphoreSlim SemaphoreSlim = new SemaphoreSlim(1, 1);
|
||||||
|
private readonly IDownloads _downloads;
|
||||||
|
private readonly ISettings _settings;
|
||||||
|
private readonly ITorrentData _torrentData;
|
||||||
|
|
||||||
|
public Torrents(ITorrentData torrentData, ISettings settings, IDownloads downloads)
|
||||||
|
{
|
||||||
|
_torrentData = torrentData;
|
||||||
|
_settings = settings;
|
||||||
|
_downloads = downloads;
|
||||||
|
}
|
||||||
|
|
||||||
private RdNetClient RdNetClient
|
private RdNetClient RdNetClient
|
||||||
{
|
{
|
||||||
|
|
@ -45,7 +52,8 @@ namespace RdtClient.Service.Services
|
||||||
{
|
{
|
||||||
if (_rdtClient == null)
|
if (_rdtClient == null)
|
||||||
{
|
{
|
||||||
var apiKey = _settings.GetString("RealDebridApiKey").Result;
|
var apiKey = _settings.GetString("RealDebridApiKey")
|
||||||
|
.Result;
|
||||||
|
|
||||||
if (String.IsNullOrWhiteSpace(apiKey))
|
if (String.IsNullOrWhiteSpace(apiKey))
|
||||||
{
|
{
|
||||||
|
|
@ -59,13 +67,6 @@ namespace RdtClient.Service.Services
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Torrents(ITorrentData torrentData, ISettings settings, IDownloads downloads)
|
|
||||||
{
|
|
||||||
_torrentData = torrentData;
|
|
||||||
_settings = settings;
|
|
||||||
_downloads = downloads;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<IList<Torrent>> Get()
|
public async Task<IList<Torrent>> Get()
|
||||||
{
|
{
|
||||||
var torrents = await _torrentData.Get();
|
var torrents = await _torrentData.Get();
|
||||||
|
|
@ -79,7 +80,8 @@ namespace RdtClient.Service.Services
|
||||||
|
|
||||||
foreach (var torrent in torrents)
|
foreach (var torrent in torrents)
|
||||||
{
|
{
|
||||||
var downloads = DownloadManager.ActiveDownloads.Where(m => m.Value.TorrentId == torrent.TorrentId).ToList();
|
var downloads = DownloadManager.ActiveDownloads.Where(m => m.Value.TorrentId == torrent.TorrentId)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
if (torrent.Files.Count > 0)
|
if (torrent.Files.Count > 0)
|
||||||
{
|
{
|
||||||
|
|
@ -179,7 +181,7 @@ namespace RdtClient.Service.Services
|
||||||
|
|
||||||
public async Task UploadMagnet(String magnetLink)
|
public async Task UploadMagnet(String magnetLink)
|
||||||
{
|
{
|
||||||
var magnet = MonoTorrent.MagnetLink.Parse(magnetLink);
|
var magnet = MagnetLink.Parse(magnetLink);
|
||||||
|
|
||||||
var rdTorrent = await RdNetClient.TorrentAddMagnet(magnetLink);
|
var rdTorrent = await RdNetClient.TorrentAddMagnet(magnetLink);
|
||||||
|
|
||||||
|
|
@ -214,9 +216,9 @@ namespace RdtClient.Service.Services
|
||||||
|
|
||||||
var rdTorrent = await RdNetClient.TorrentInfoAsync(torrent.RdId);
|
var rdTorrent = await RdNetClient.TorrentInfoAsync(torrent.RdId);
|
||||||
|
|
||||||
foreach (var file in rdTorrent.Files)
|
foreach (var link in rdTorrent.Links)
|
||||||
{
|
{
|
||||||
var unrestrictedLink = await RdNetClient.UnrestrictLinkAsync(file.Path);
|
var unrestrictedLink = await RdNetClient.UnrestrictLinkAsync(link);
|
||||||
|
|
||||||
await _downloads.Add(torrent.TorrentId, unrestrictedLink.Download);
|
await _downloads.Add(torrent.TorrentId, unrestrictedLink.Download);
|
||||||
}
|
}
|
||||||
|
|
@ -251,7 +253,8 @@ namespace RdtClient.Service.Services
|
||||||
{
|
{
|
||||||
if (!rdTorrent.Files.Any(m => m.Selected))
|
if (!rdTorrent.Files.Any(m => m.Selected))
|
||||||
{
|
{
|
||||||
var fileIds = rdTorrent.Files.Select(m => m.Id.ToString()).ToArray();
|
var fileIds = rdTorrent.Files.Select(m => m.Id.ToString())
|
||||||
|
.ToArray();
|
||||||
|
|
||||||
await RdNetClient.TorrentSelectFiles(rdTorrentId, fileIds);
|
await RdNetClient.TorrentSelectFiles(rdTorrentId, fileIds);
|
||||||
}
|
}
|
||||||
|
|
@ -294,12 +297,27 @@ namespace RdtClient.Service.Services
|
||||||
torrent.RdSpeed = rdTorrent.Speed;
|
torrent.RdSpeed = rdTorrent.Speed;
|
||||||
torrent.RdSeeders = rdTorrent.Seeders;
|
torrent.RdSeeders = rdTorrent.Seeders;
|
||||||
|
|
||||||
await _torrentData.UpdateRdData(torrent);
|
if (torrent.Status == TorrentStatus.RealDebrid)
|
||||||
|
|
||||||
if (torrent.Status == TorrentStatus.RealDebrid && torrent.RdProgress == 100)
|
|
||||||
{
|
{
|
||||||
await _torrentData.UpdateStatus(torrent.TorrentId, TorrentStatus.WaitingForDownload);
|
if (torrent.Status == TorrentStatus.RealDebrid && torrent.RdProgress == 100)
|
||||||
|
{
|
||||||
|
torrent.Status = TorrentStatus.WaitingForDownload;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Current status of the torrent: magnet_error, magnet_conversion, waiting_files_selection, queued, downloading, downloaded, error, virus, compressing, uploading, dead
|
||||||
|
torrent.Status = rdTorrent.Status switch
|
||||||
|
{
|
||||||
|
"magnet_error" => TorrentStatus.Error,
|
||||||
|
"error" => TorrentStatus.Error,
|
||||||
|
"virus" => TorrentStatus.Error,
|
||||||
|
"dead" => TorrentStatus.Error,
|
||||||
|
_ => TorrentStatus.RealDebrid
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await _torrentData.UpdateRdData(torrent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue