From fe3b7d88676521436feb6a850ce46f7f632f79ab Mon Sep 17 00:00:00 2001 From: Roger Far Date: Wed, 28 Apr 2021 07:46:07 -0600 Subject: [PATCH] Improve handling of torrent URL's that are HTTP files. --- server/RdtClient.Service/Services/Torrents.cs | 26 ++++++++++++++++--- .../Controllers/QBittorrentController.cs | 16 +++++++++++- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/server/RdtClient.Service/Services/Torrents.cs b/server/RdtClient.Service/Services/Torrents.cs index cdd2edf..57ae821 100644 --- a/server/RdtClient.Service/Services/Torrents.cs +++ b/server/RdtClient.Service/Services/Torrents.cs @@ -137,7 +137,16 @@ namespace RdtClient.Service.Services public async Task UploadMagnet(String magnetLink, String category, Boolean autoDelete) { - var magnet = MagnetLink.Parse(magnetLink); + MagnetLink magnet; + + try + { + magnet = MagnetLink.Parse(magnetLink); + } + catch (Exception ex) + { + throw new Exception($"{ex.Message}, trying to parse {magnetLink}"); + } var rdTorrent = await GetRdNetClient().AddTorrentMagnetAsync(magnetLink); @@ -146,12 +155,21 @@ namespace RdtClient.Service.Services public async Task UploadFile(Byte[] bytes, String category, Boolean autoDelete) { - var torrent = await MonoTorrent.Torrent.LoadAsync(bytes); - - var rdTorrent = await GetRdNetClient().AddTorrentFileAsync(bytes); + MonoTorrent.Torrent torrent; var fileAsBase64 = Convert.ToBase64String(bytes); + try + { + torrent = await MonoTorrent.Torrent.LoadAsync(bytes); + } + catch (Exception ex) + { + throw new Exception($"{ex.Message}, trying to parse {fileAsBase64}"); + } + + var rdTorrent = await GetRdNetClient().AddTorrentFileAsync(bytes); + await Add(rdTorrent.Id, torrent.InfoHash.ToHex(), category, autoDelete, fileAsBase64, true); } diff --git a/server/RdtClient.Web/Controllers/QBittorrentController.cs b/server/RdtClient.Web/Controllers/QBittorrentController.cs index b578d8c..4a15de6 100644 --- a/server/RdtClient.Web/Controllers/QBittorrentController.cs +++ b/server/RdtClient.Web/Controllers/QBittorrentController.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -245,7 +246,20 @@ namespace RdtClient.Web.Controllers foreach (var url in urls) { - await _qBittorrent.TorrentsAddMagnet(url.Trim(), request.Category, false); + if (url.StartsWith("magnet")) + { + await _qBittorrent.TorrentsAddMagnet(url.Trim(), request.Category, false); + } + else if (url.StartsWith("http")) + { + var httpClient = new HttpClient(); + var result = await httpClient.GetByteArrayAsync(url); + await _qBittorrent.TorrentsAddFile(result, request.Category, false); + } + else + { + throw new Exception($"Invalid torrent link format {url}"); + } } return Ok();