parent
83bf3620c0
commit
627da14a32
@ -0,0 +1,117 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using NzbDrone.Core.Indexers;
|
||||||
|
using NzbDrone.Core.Parser.Model;
|
||||||
|
using Prowlarr.Http.REST;
|
||||||
|
|
||||||
|
namespace Prowlarr.Api.V1.Search
|
||||||
|
{
|
||||||
|
public class ReleaseResource : RestResource
|
||||||
|
{
|
||||||
|
public string Guid { get; set; }
|
||||||
|
public int Age { get; set; }
|
||||||
|
public double AgeHours { get; set; }
|
||||||
|
public double AgeMinutes { get; set; }
|
||||||
|
public long Size { get; set; }
|
||||||
|
public int? Files { get; set; }
|
||||||
|
public int? Grabs { get; set; }
|
||||||
|
public int IndexerId { get; set; }
|
||||||
|
public string Indexer { get; set; }
|
||||||
|
public string SubGroup { get; set; }
|
||||||
|
public string ReleaseHash { get; set; }
|
||||||
|
public string Title { get; set; }
|
||||||
|
public bool Approved { get; set; }
|
||||||
|
public int ImdbId { get; set; }
|
||||||
|
public DateTime PublishDate { get; set; }
|
||||||
|
public string CommentUrl { get; set; }
|
||||||
|
public string DownloadUrl { get; set; }
|
||||||
|
public string InfoUrl { get; set; }
|
||||||
|
public string PosterUrl { get; set; }
|
||||||
|
public IEnumerable<string> IndexerFlags { get; set; }
|
||||||
|
public ICollection<IndexerCategory> Categories { get; set; }
|
||||||
|
|
||||||
|
public string MagnetUrl { get; set; }
|
||||||
|
public string InfoHash { get; set; }
|
||||||
|
public int? Seeders { get; set; }
|
||||||
|
public int? Leechers { get; set; }
|
||||||
|
public DownloadProtocol Protocol { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ReleaseResourceMapper
|
||||||
|
{
|
||||||
|
public static ReleaseResource ToResource(this ReleaseInfo model)
|
||||||
|
{
|
||||||
|
var releaseInfo = model;
|
||||||
|
var torrentInfo = (model as TorrentInfo) ?? new TorrentInfo();
|
||||||
|
var indexerFlags = torrentInfo.IndexerFlags.Select(f => f.Name);
|
||||||
|
|
||||||
|
// TODO: Clean this mess up. don't mix data from multiple classes, use sub-resources instead? (Got a huge Deja Vu, didn't we talk about this already once?)
|
||||||
|
return new ReleaseResource
|
||||||
|
{
|
||||||
|
Guid = releaseInfo.Guid,
|
||||||
|
|
||||||
|
//QualityWeight
|
||||||
|
Age = releaseInfo.Age,
|
||||||
|
AgeHours = releaseInfo.AgeHours,
|
||||||
|
AgeMinutes = releaseInfo.AgeMinutes,
|
||||||
|
Size = releaseInfo.Size ?? 0,
|
||||||
|
Files = releaseInfo.Files,
|
||||||
|
Grabs = releaseInfo.Grabs,
|
||||||
|
IndexerId = releaseInfo.IndexerId,
|
||||||
|
Indexer = releaseInfo.Indexer,
|
||||||
|
Title = releaseInfo.Title,
|
||||||
|
ImdbId = releaseInfo.ImdbId,
|
||||||
|
PublishDate = releaseInfo.PublishDate,
|
||||||
|
CommentUrl = releaseInfo.CommentUrl,
|
||||||
|
DownloadUrl = releaseInfo.DownloadUrl,
|
||||||
|
InfoUrl = releaseInfo.InfoUrl,
|
||||||
|
PosterUrl = releaseInfo.PosterUrl,
|
||||||
|
Categories = releaseInfo.Categories,
|
||||||
|
|
||||||
|
//ReleaseWeight
|
||||||
|
MagnetUrl = torrentInfo.MagnetUrl,
|
||||||
|
InfoHash = torrentInfo.InfoHash,
|
||||||
|
Seeders = torrentInfo.Seeders,
|
||||||
|
Leechers = (torrentInfo.Peers.HasValue && torrentInfo.Seeders.HasValue) ? (torrentInfo.Peers.Value - torrentInfo.Seeders.Value) : (int?)null,
|
||||||
|
Protocol = releaseInfo.DownloadProtocol,
|
||||||
|
IndexerFlags = indexerFlags
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ReleaseInfo ToModel(this ReleaseResource resource)
|
||||||
|
{
|
||||||
|
ReleaseInfo model;
|
||||||
|
|
||||||
|
if (resource.Protocol == DownloadProtocol.Torrent)
|
||||||
|
{
|
||||||
|
model = new TorrentInfo
|
||||||
|
{
|
||||||
|
MagnetUrl = resource.MagnetUrl,
|
||||||
|
InfoHash = resource.InfoHash,
|
||||||
|
Seeders = resource.Seeders,
|
||||||
|
Peers = (resource.Seeders.HasValue && resource.Leechers.HasValue) ? (resource.Seeders + resource.Leechers) : null
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
model = new ReleaseInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
model.Guid = resource.Guid;
|
||||||
|
model.Title = resource.Title;
|
||||||
|
model.Size = resource.Size;
|
||||||
|
model.DownloadUrl = resource.DownloadUrl;
|
||||||
|
model.InfoUrl = resource.InfoUrl;
|
||||||
|
model.PosterUrl = resource.PosterUrl;
|
||||||
|
model.CommentUrl = resource.CommentUrl;
|
||||||
|
model.IndexerId = resource.IndexerId;
|
||||||
|
model.Indexer = resource.Indexer;
|
||||||
|
model.DownloadProtocol = resource.Protocol;
|
||||||
|
model.ImdbId = resource.ImdbId;
|
||||||
|
model.PublishDate = resource.PublishDate.ToUniversalTime();
|
||||||
|
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,117 +1,24 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using NzbDrone.Core.Indexers;
|
using System.Text;
|
||||||
using NzbDrone.Core.Parser.Model;
|
using System.Threading.Tasks;
|
||||||
using Prowlarr.Http.REST;
|
|
||||||
|
|
||||||
namespace Prowlarr.Api.V1.Search
|
namespace Prowlarr.Api.V1.Search
|
||||||
{
|
{
|
||||||
public class SearchResource : RestResource
|
public class SearchResource
|
||||||
{
|
{
|
||||||
public string Guid { get; set; }
|
public SearchResource()
|
||||||
public int Age { get; set; }
|
|
||||||
public double AgeHours { get; set; }
|
|
||||||
public double AgeMinutes { get; set; }
|
|
||||||
public long Size { get; set; }
|
|
||||||
public int? Files { get; set; }
|
|
||||||
public int? Grabs { get; set; }
|
|
||||||
public int IndexerId { get; set; }
|
|
||||||
public string Indexer { get; set; }
|
|
||||||
public string SubGroup { get; set; }
|
|
||||||
public string ReleaseHash { get; set; }
|
|
||||||
public string Title { get; set; }
|
|
||||||
public bool Approved { get; set; }
|
|
||||||
public int ImdbId { get; set; }
|
|
||||||
public DateTime PublishDate { get; set; }
|
|
||||||
public string CommentUrl { get; set; }
|
|
||||||
public string DownloadUrl { get; set; }
|
|
||||||
public string InfoUrl { get; set; }
|
|
||||||
public string PosterUrl { get; set; }
|
|
||||||
public IEnumerable<string> IndexerFlags { get; set; }
|
|
||||||
public ICollection<IndexerCategory> Categories { get; set; }
|
|
||||||
|
|
||||||
public string MagnetUrl { get; set; }
|
|
||||||
public string InfoHash { get; set; }
|
|
||||||
public int? Seeders { get; set; }
|
|
||||||
public int? Leechers { get; set; }
|
|
||||||
public DownloadProtocol Protocol { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class ReleaseResourceMapper
|
|
||||||
{
|
|
||||||
public static SearchResource ToResource(this ReleaseInfo model)
|
|
||||||
{
|
{
|
||||||
var releaseInfo = model;
|
Type = "search";
|
||||||
var torrentInfo = (model as TorrentInfo) ?? new TorrentInfo();
|
Categories = new List<int>();
|
||||||
var indexerFlags = torrentInfo.IndexerFlags.Select(f => f.Name);
|
|
||||||
|
|
||||||
// TODO: Clean this mess up. don't mix data from multiple classes, use sub-resources instead? (Got a huge Deja Vu, didn't we talk about this already once?)
|
|
||||||
return new SearchResource
|
|
||||||
{
|
|
||||||
Guid = releaseInfo.Guid,
|
|
||||||
|
|
||||||
//QualityWeight
|
|
||||||
Age = releaseInfo.Age,
|
|
||||||
AgeHours = releaseInfo.AgeHours,
|
|
||||||
AgeMinutes = releaseInfo.AgeMinutes,
|
|
||||||
Size = releaseInfo.Size ?? 0,
|
|
||||||
Files = releaseInfo.Files,
|
|
||||||
Grabs = releaseInfo.Grabs,
|
|
||||||
IndexerId = releaseInfo.IndexerId,
|
|
||||||
Indexer = releaseInfo.Indexer,
|
|
||||||
Title = releaseInfo.Title,
|
|
||||||
ImdbId = releaseInfo.ImdbId,
|
|
||||||
PublishDate = releaseInfo.PublishDate,
|
|
||||||
CommentUrl = releaseInfo.CommentUrl,
|
|
||||||
DownloadUrl = releaseInfo.DownloadUrl,
|
|
||||||
InfoUrl = releaseInfo.InfoUrl,
|
|
||||||
PosterUrl = releaseInfo.PosterUrl,
|
|
||||||
Categories = releaseInfo.Categories,
|
|
||||||
|
|
||||||
//ReleaseWeight
|
|
||||||
MagnetUrl = torrentInfo.MagnetUrl,
|
|
||||||
InfoHash = torrentInfo.InfoHash,
|
|
||||||
Seeders = torrentInfo.Seeders,
|
|
||||||
Leechers = (torrentInfo.Peers.HasValue && torrentInfo.Seeders.HasValue) ? (torrentInfo.Peers.Value - torrentInfo.Seeders.Value) : (int?)null,
|
|
||||||
Protocol = releaseInfo.DownloadProtocol,
|
|
||||||
IndexerFlags = indexerFlags
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ReleaseInfo ToModel(this SearchResource resource)
|
public string Query { get; set; }
|
||||||
{
|
public string Type { get; set; }
|
||||||
ReleaseInfo model;
|
public List<int> IndexerIds { get; set; }
|
||||||
|
public List<int> Categories { get; set; }
|
||||||
if (resource.Protocol == DownloadProtocol.Torrent)
|
public int Limit { get; set; }
|
||||||
{
|
public int Offset { get; set; }
|
||||||
model = new TorrentInfo
|
|
||||||
{
|
|
||||||
MagnetUrl = resource.MagnetUrl,
|
|
||||||
InfoHash = resource.InfoHash,
|
|
||||||
Seeders = resource.Seeders,
|
|
||||||
Peers = (resource.Seeders.HasValue && resource.Leechers.HasValue) ? (resource.Seeders + resource.Leechers) : null
|
|
||||||
};
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
model = new ReleaseInfo();
|
|
||||||
}
|
|
||||||
|
|
||||||
model.Guid = resource.Guid;
|
|
||||||
model.Title = resource.Title;
|
|
||||||
model.Size = resource.Size;
|
|
||||||
model.DownloadUrl = resource.DownloadUrl;
|
|
||||||
model.InfoUrl = resource.InfoUrl;
|
|
||||||
model.PosterUrl = resource.PosterUrl;
|
|
||||||
model.CommentUrl = resource.CommentUrl;
|
|
||||||
model.IndexerId = resource.IndexerId;
|
|
||||||
model.Indexer = resource.Indexer;
|
|
||||||
model.DownloadProtocol = resource.Protocol;
|
|
||||||
model.ImdbId = resource.ImdbId;
|
|
||||||
model.PublishDate = resource.PublishDate.ToUniversalTime();
|
|
||||||
|
|
||||||
return model;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in new issue