Fixed category setting when adding a torrent from Sonarr or Radarr.
This commit is contained in:
parent
5245a9448f
commit
3598b1f218
7 changed files with 76 additions and 26 deletions
|
|
@ -11,7 +11,7 @@ namespace RdtClient.Data.Data
|
|||
Task<IList<Torrent>> Get();
|
||||
Task<Torrent> GetById(Guid torrentId);
|
||||
Task<Torrent> GetByHash(String hash);
|
||||
Task<Torrent> Add(String realDebridId, String hash, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete);
|
||||
Task<Torrent> Add(String realDebridId, String hash, String category, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete);
|
||||
Task UpdateRdData(Torrent torrent);
|
||||
Task UpdateCategory(Guid torrentId, String category);
|
||||
Task UpdateComplete(Guid torrentId, DateTimeOffset datetime);
|
||||
|
|
@ -77,7 +77,7 @@ namespace RdtClient.Data.Data
|
|||
return dbTorrent;
|
||||
}
|
||||
|
||||
public async Task<Torrent> Add(String realDebridId, String hash, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete)
|
||||
public async Task<Torrent> Add(String realDebridId, String hash, String category, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete)
|
||||
{
|
||||
var torrent = new Torrent
|
||||
{
|
||||
|
|
@ -85,6 +85,7 @@ namespace RdtClient.Data.Data
|
|||
Added = DateTimeOffset.UtcNow,
|
||||
RdId = realDebridId,
|
||||
Hash = hash.ToLower(),
|
||||
Category = category,
|
||||
AutoDownload = autoDownload,
|
||||
AutoUnpack = autoUnpack,
|
||||
AutoDelete = autoDelete
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ namespace RdtClient.Service.Services
|
|||
private readonly Download _download;
|
||||
private readonly String _destinationPath;
|
||||
private readonly Torrent _torrent;
|
||||
|
||||
private Boolean _cancelled = false;
|
||||
|
||||
private Int64 _bytesLastUpdate;
|
||||
private DateTime _nextUpdate;
|
||||
|
|
@ -64,7 +66,10 @@ namespace RdtClient.Service.Services
|
|||
|
||||
await Task.Factory.StartNew(async delegate
|
||||
{
|
||||
await Download(uri, filePath);
|
||||
if (!_cancelled)
|
||||
{
|
||||
await Download(uri, filePath);
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
@ -74,6 +79,11 @@ namespace RdtClient.Service.Services
|
|||
}
|
||||
}
|
||||
|
||||
public void Cancel()
|
||||
{
|
||||
_cancelled = true;
|
||||
}
|
||||
|
||||
private async Task Download(Uri uri, String filePath)
|
||||
{
|
||||
try
|
||||
|
|
@ -94,7 +104,7 @@ namespace RdtClient.Service.Services
|
|||
|
||||
var timeout = DateTimeOffset.UtcNow.AddHours(1);
|
||||
|
||||
while (timeout > DateTimeOffset.UtcNow)
|
||||
while (timeout > DateTimeOffset.UtcNow && !_cancelled)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
|
@ -111,7 +121,7 @@ namespace RdtClient.Service.Services
|
|||
await using var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.Write);
|
||||
var buffer = new Byte[4096];
|
||||
|
||||
while (fileStream.Length < response.ContentLength)
|
||||
while (fileStream.Length < response.ContentLength && !_cancelled)
|
||||
{
|
||||
var read = await stream.ReadAsync(buffer.AsMemory(0, buffer.Length));
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ namespace RdtClient.Service.Services
|
|||
Task<IList<TorrentFileItem>> TorrentFileContents(String hash);
|
||||
Task<TorrentProperties> TorrentProperties(String hash);
|
||||
Task TorrentsDelete(String hash, Boolean deleteFiles);
|
||||
Task TorrentsAdd(String magnetLink, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete);
|
||||
Task TorrentsAddFile(Byte[] fileBytes, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete);
|
||||
Task TorrentsAddMagnet(String magnetLink, String category, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete);
|
||||
Task TorrentsAddFile(Byte[] fileBytes, String category, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete);
|
||||
Task TorrentsSetCategory(String hash, String category);
|
||||
Task<IDictionary<String, TorrentCategory>> TorrentsCategories();
|
||||
}
|
||||
|
|
@ -424,14 +424,14 @@ namespace RdtClient.Service.Services
|
|||
await _torrents.Delete(torrent.TorrentId, true, true, deleteFiles);
|
||||
}
|
||||
|
||||
public async Task TorrentsAdd(String magnetLink, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete)
|
||||
public async Task TorrentsAddMagnet(String magnetLink, String category, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete)
|
||||
{
|
||||
await _torrents.UploadMagnet(magnetLink, autoDownload, autoUnpack, autoDelete);
|
||||
await _torrents.UploadMagnet(magnetLink, category, autoDownload, autoUnpack, autoDelete);
|
||||
}
|
||||
|
||||
public async Task TorrentsAddFile(Byte[] fileBytes, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete)
|
||||
public async Task TorrentsAddFile(Byte[] fileBytes, String category,Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete)
|
||||
{
|
||||
await _torrents.UploadFile(fileBytes, autoDownload, autoUnpack, autoDelete);
|
||||
await _torrents.UploadFile(fileBytes, category, autoDownload, autoUnpack, autoDelete);
|
||||
}
|
||||
|
||||
public async Task TorrentsSetCategory(String hash, String category)
|
||||
|
|
|
|||
|
|
@ -20,8 +20,8 @@ namespace RdtClient.Service.Services
|
|||
Task<Torrent> GetById(Guid torrentId);
|
||||
Task<Torrent> GetByHash(String hash);
|
||||
Task UpdateCategory(String hash, String category);
|
||||
Task UploadMagnet(String magnetLink, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete);
|
||||
Task UploadFile(Byte[] bytes, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete);
|
||||
Task UploadMagnet(String magnetLink, String category, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete);
|
||||
Task UploadFile(Byte[] bytes, String category, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete);
|
||||
Task SelectFiles(String torrentId, IList<String> fileIds);
|
||||
Task Delete(Guid torrentId, Boolean deleteData, Boolean deleteRdTorrent, Boolean deleteLocalFiles);
|
||||
Task Unrestrict(Guid torrentId);
|
||||
|
|
@ -134,22 +134,22 @@ namespace RdtClient.Service.Services
|
|||
await _torrentData.UpdateCategory(torrent.TorrentId, category);
|
||||
}
|
||||
|
||||
public async Task UploadMagnet(String magnetLink, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete)
|
||||
public async Task UploadMagnet(String magnetLink, String category, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete)
|
||||
{
|
||||
var magnet = MagnetLink.Parse(magnetLink);
|
||||
|
||||
var rdTorrent = await GetRdNetClient().AddTorrentMagnetAsync(magnetLink);
|
||||
|
||||
await Add(rdTorrent.Id, magnet.InfoHash.ToHex(), autoDownload, autoUnpack, autoDelete);
|
||||
await Add(rdTorrent.Id, magnet.InfoHash.ToHex(), category, autoDownload, autoUnpack, autoDelete);
|
||||
}
|
||||
|
||||
public async Task UploadFile(Byte[] bytes, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete)
|
||||
public async Task UploadFile(Byte[] bytes, String category, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete)
|
||||
{
|
||||
var torrent = await MonoTorrent.Torrent.LoadAsync(bytes);
|
||||
|
||||
var rdTorrent = await GetRdNetClient().AddTorrentFileAsync(bytes);
|
||||
|
||||
await Add(rdTorrent.Id, torrent.InfoHash.ToHex(), autoDownload, autoUnpack, autoDelete);
|
||||
await Add(rdTorrent.Id, torrent.InfoHash.ToHex(), category, autoDownload, autoUnpack, autoDelete);
|
||||
}
|
||||
|
||||
public async Task SelectFiles(String torrentId, IList<String> fileIds)
|
||||
|
|
@ -163,6 +163,19 @@ namespace RdtClient.Service.Services
|
|||
|
||||
if (torrent != null)
|
||||
{
|
||||
foreach (var download in torrent.Downloads)
|
||||
{
|
||||
if (TorrentRunner.ActiveUnpackClients.TryRemove(download.DownloadId, out var activeUnpack))
|
||||
{
|
||||
activeUnpack.Cancel();
|
||||
}
|
||||
|
||||
if (TorrentRunner.ActiveDownloadClients.TryRemove(download.DownloadId, out var activeDownload))
|
||||
{
|
||||
activeDownload.Cancel();
|
||||
}
|
||||
}
|
||||
|
||||
if (deleteLocalFiles)
|
||||
{
|
||||
var downloadPath = await DownloadPath(torrent);
|
||||
|
|
@ -228,6 +241,11 @@ namespace RdtClient.Service.Services
|
|||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (TorrentRunner.ActiveDownloadClients.ContainsKey(downloadId))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
download.DownloadStarted = DateTimeOffset.UtcNow;
|
||||
await _downloads.UpdateDownloadStarted(download.DownloadId, download.DownloadStarted);
|
||||
|
|
@ -276,6 +294,11 @@ namespace RdtClient.Service.Services
|
|||
return;
|
||||
}
|
||||
|
||||
if (TorrentRunner.ActiveUnpackClients.ContainsKey(downloadId))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
download.UnpackingStarted = DateTimeOffset.UtcNow;
|
||||
await _downloads.UpdateUnpackingStarted(download.DownloadId, download.UnpackingStarted);
|
||||
|
||||
|
|
@ -311,7 +334,7 @@ namespace RdtClient.Service.Services
|
|||
return profile;
|
||||
}
|
||||
|
||||
private async Task Add(String rdTorrentId, String infoHash, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete)
|
||||
private async Task Add(String rdTorrentId, String infoHash, String category, Boolean autoDownload, Boolean autoUnpack, Boolean autoDelete)
|
||||
{
|
||||
var w = await SemaphoreSlim.WaitAsync(60000);
|
||||
if (!w)
|
||||
|
|
@ -328,7 +351,7 @@ namespace RdtClient.Service.Services
|
|||
return;
|
||||
}
|
||||
|
||||
var newTorrent = await _torrentData.Add(rdTorrentId, infoHash, autoDownload, autoUnpack, autoDelete);
|
||||
var newTorrent = await _torrentData.Add(rdTorrentId, infoHash, category, autoDownload, autoUnpack, autoDelete);
|
||||
|
||||
var rdTorrent = await GetRdNetClient().GetTorrentInfoAsync(rdTorrentId);
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@ namespace RdtClient.Service.Services
|
|||
private readonly Download _download;
|
||||
private readonly String _destinationPath;
|
||||
private readonly Torrent _torrent;
|
||||
|
||||
private Boolean _cancelled = false;
|
||||
|
||||
private RarArchiveEntry _rarCurrentEntry;
|
||||
private Dictionary<String, Int64> _rarfileStatus;
|
||||
|
|
@ -60,7 +62,10 @@ namespace RdtClient.Service.Services
|
|||
|
||||
await Task.Factory.StartNew(async delegate
|
||||
{
|
||||
await Unpack(filePath);
|
||||
if (!_cancelled)
|
||||
{
|
||||
await Unpack(filePath);
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
@ -70,6 +75,11 @@ namespace RdtClient.Service.Services
|
|||
}
|
||||
}
|
||||
|
||||
public void Cancel()
|
||||
{
|
||||
_cancelled = true;
|
||||
}
|
||||
|
||||
private async Task Unpack(String filePath)
|
||||
{
|
||||
try
|
||||
|
|
@ -101,6 +111,11 @@ namespace RdtClient.Service.Services
|
|||
|
||||
foreach (var entry in entries)
|
||||
{
|
||||
if (_cancelled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_rarCurrentEntry = entry;
|
||||
|
||||
entry.WriteToDirectory(extractPath,
|
||||
|
|
@ -136,7 +151,7 @@ namespace RdtClient.Service.Services
|
|||
Finished = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void ArchiveOnCompressedBytesRead(Object sender, CompressedBytesReadEventArgs e)
|
||||
{
|
||||
if (_rarCurrentEntry == null)
|
||||
|
|
|
|||
|
|
@ -245,7 +245,7 @@ namespace RdtClient.Web.Controllers
|
|||
|
||||
foreach (var url in urls)
|
||||
{
|
||||
await _qBittorrent.TorrentsAdd(url.Trim(), true, true, false);
|
||||
await _qBittorrent.TorrentsAddMagnet(url.Trim(), request.Category, true, true, false);
|
||||
}
|
||||
|
||||
return Ok();
|
||||
|
|
@ -265,10 +265,10 @@ namespace RdtClient.Web.Controllers
|
|||
await file.CopyToAsync(target);
|
||||
var fileBytes = target.ToArray();
|
||||
|
||||
await _qBittorrent.TorrentsAddFile(fileBytes, true, true, false);
|
||||
await _qBittorrent.TorrentsAddFile(fileBytes, request.Category, true, true, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (request.Urls != null)
|
||||
{
|
||||
return await TorrentsAdd(request);
|
||||
|
|
@ -386,6 +386,7 @@ namespace RdtClient.Web.Controllers
|
|||
public class QBTorrentsAddRequest
|
||||
{
|
||||
public String Urls { get; set; }
|
||||
public String Category { get; set; }
|
||||
}
|
||||
|
||||
public class QBTorrentsSetCategoryRequest
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ namespace RdtClient.Web.Controllers
|
|||
|
||||
var bytes = memoryStream.ToArray();
|
||||
|
||||
await _torrents.UploadFile(bytes, formData.AutoDownload, formData.AutoUnpack, formData.AutoDelete);
|
||||
await _torrents.UploadFile(bytes, null, formData.AutoDownload, formData.AutoUnpack, formData.AutoDelete);
|
||||
|
||||
return Ok();
|
||||
}
|
||||
|
|
@ -83,7 +83,7 @@ namespace RdtClient.Web.Controllers
|
|||
[Route("UploadMagnet")]
|
||||
public async Task<ActionResult> UploadMagnet([FromBody] TorrentControllerUploadMagnetRequest request)
|
||||
{
|
||||
await _torrents.UploadMagnet(request.MagnetLink, request.AutoDownload, request.AutoUnpack, request.AutoDelete);
|
||||
await _torrents.UploadMagnet(request.MagnetLink, null, request.AutoDownload, request.AutoUnpack, request.AutoDelete);
|
||||
|
||||
return Ok();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue