Skip to content

Commit

Permalink
Add ContentSummary to BeyondHD requests
Browse files Browse the repository at this point in the history
  • Loading branch information
mynameisbogdan committed Jun 27, 2023
1 parent aed3f9f commit 34cd68f
Showing 1 changed file with 43 additions and 33 deletions.
76 changes: 43 additions & 33 deletions src/NzbDrone.Core/Indexers/Definitions/BeyondHD.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ namespace NzbDrone.Core.Indexers.Definitions
public class BeyondHD : TorrentIndexerBase<BeyondHDSettings>
{
public override string Name => "BeyondHD";

public override string[] IndexerUrls => new string[] { "https://beyond-hd.me/" };
public override string[] IndexerUrls => new[] { "https://beyond-hd.me/" };
public override string Description => "BeyondHD (BHD) is a Private Torrent Tracker for HD MOVIES / TV";
public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
public override IndexerCapabilities Capabilities => SetCapabilities();
Expand All @@ -38,26 +37,26 @@ public BeyondHD(IIndexerHttpClient httpClient, IEventAggregator eventAggregator,

public override IIndexerRequestGenerator GetRequestGenerator()
{
return new BeyondHDRequestGenerator() { Settings = Settings, Capabilities = Capabilities };
return new BeyondHDRequestGenerator(Settings, Capabilities);
}

public override IParseIndexerResponse GetParser()
{
return new BeyondHDParser(Settings, Capabilities.Categories);
return new BeyondHDParser(Capabilities.Categories);
}

private IndexerCapabilities SetCapabilities()
{
var caps = new IndexerCapabilities
{
TvSearchParams = new List<TvSearchParam>
{
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep, TvSearchParam.ImdbId
},
{
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep, TvSearchParam.ImdbId
},
MovieSearchParams = new List<MovieSearchParam>
{
MovieSearchParam.Q, MovieSearchParam.ImdbId, MovieSearchParam.TmdbId
}
{
MovieSearchParam.Q, MovieSearchParam.ImdbId, MovieSearchParam.TmdbId
}
};

caps.Categories.AddCategoryMapping(1, NewznabStandardCategory.Movies, "Movies");
Expand All @@ -69,15 +68,21 @@ private IndexerCapabilities SetCapabilities()

public class BeyondHDRequestGenerator : IIndexerRequestGenerator
{
public BeyondHDSettings Settings { get; set; }
public IndexerCapabilities Capabilities { get; set; }
private readonly BeyondHDSettings _settings;
private readonly IndexerCapabilities _capabilities;

public BeyondHDRequestGenerator(BeyondHDSettings settings, IndexerCapabilities capabilities)
{
_settings = settings;
_capabilities = capabilities;
}

private IEnumerable<IndexerRequest> GetPagedRequests(string term, int[] categories, string imdbId = null, int tmdbId = 0)
{
var body = new Dictionary<string, object>
{
{ "action", "search" },
{ "rsskey", Settings.RssKey }
{ "rsskey", _settings.RssKey }
};

if (imdbId.IsNotNullOrWhiteSpace())
Expand All @@ -95,31 +100,34 @@ private IEnumerable<IndexerRequest> GetPagedRequests(string term, int[] categori
body.Add("search", term);
}

var cats = Capabilities.Categories.MapTorznabCapsToTrackers(categories);
var cats = _capabilities.Categories.MapTorznabCapsToTrackers(categories);

if (cats.Count > 0)
{
body.Add("categories", string.Join(",", cats));
}

var searchUrl = Settings.BaseUrl + "api/torrents/" + Settings.ApiKey;

var request = new HttpRequest(searchUrl, HttpAccept.Json);
var searchUrl = $"{_settings.BaseUrl}api/torrents/{_settings.ApiKey}";

request.Headers.ContentType = "application/json";
request.Method = HttpMethod.Post;
var request = new HttpRequest(searchUrl, HttpAccept.Json)
{
Headers =
{
ContentType = "application/json"
},
Method = HttpMethod.Post
};
request.SetContent(body.ToJson());
request.ContentSummary = body.ToJson(Formatting.None);

var indexerRequest = new IndexerRequest(request);

yield return indexerRequest;
yield return new IndexerRequest(request);
}

public IndexerPageableRequestChain GetSearchRequests(MovieSearchCriteria searchCriteria)
{
var pageableRequests = new IndexerPageableRequestChain();

pageableRequests.Add(GetPagedRequests(string.Format("{0}", searchCriteria.SanitizedSearchTerm), searchCriteria.Categories, searchCriteria.FullImdbId, searchCriteria.TmdbId.GetValueOrDefault()));
pageableRequests.Add(GetPagedRequests(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories, searchCriteria.FullImdbId, searchCriteria.TmdbId.GetValueOrDefault()));

return pageableRequests;
}
Expand All @@ -128,7 +136,7 @@ public IndexerPageableRequestChain GetSearchRequests(MusicSearchCriteria searchC
{
var pageableRequests = new IndexerPageableRequestChain();

pageableRequests.Add(GetPagedRequests(string.Format("{0}", searchCriteria.SanitizedSearchTerm), searchCriteria.Categories));
pageableRequests.Add(GetPagedRequests(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories));

return pageableRequests;
}
Expand All @@ -137,7 +145,7 @@ public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCrit
{
var pageableRequests = new IndexerPageableRequestChain();

pageableRequests.Add(GetPagedRequests(string.Format("{0}", searchCriteria.SanitizedTvSearchString), searchCriteria.Categories, searchCriteria.FullImdbId));
pageableRequests.Add(GetPagedRequests(searchCriteria.SanitizedTvSearchString, searchCriteria.Categories, searchCriteria.FullImdbId));

return pageableRequests;
}
Expand All @@ -146,7 +154,7 @@ public IndexerPageableRequestChain GetSearchRequests(BookSearchCriteria searchCr
{
var pageableRequests = new IndexerPageableRequestChain();

pageableRequests.Add(GetPagedRequests(string.Format("{0}", searchCriteria.SanitizedSearchTerm), searchCriteria.Categories));
pageableRequests.Add(GetPagedRequests(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories));

return pageableRequests;
}
Expand All @@ -155,7 +163,7 @@ public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria searchC
{
var pageableRequests = new IndexerPageableRequestChain();

pageableRequests.Add(GetPagedRequests(string.Format("{0}", searchCriteria.SanitizedSearchTerm), searchCriteria.Categories));
pageableRequests.Add(GetPagedRequests(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories));

return pageableRequests;
}
Expand All @@ -166,19 +174,17 @@ public IndexerPageableRequestChain GetSearchRequests(BasicSearchCriteria searchC

public class BeyondHDParser : IParseIndexerResponse
{
private readonly BeyondHDSettings _settings;
private readonly IndexerCapabilitiesCategories _categories;

public BeyondHDParser(BeyondHDSettings settings, IndexerCapabilitiesCategories categories)
public BeyondHDParser(IndexerCapabilitiesCategories categories)
{
_settings = settings;
_categories = categories;
}

public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
{
var torrentInfos = new List<TorrentInfo>();
var indexerHttpResponse = indexerResponse.HttpResponse;

if (indexerHttpResponse.StatusCode != HttpStatusCode.OK)
{
throw new IndexerException(indexerResponse, $"Unexpected response status {indexerHttpResponse.StatusCode} code from indexer request");
Expand All @@ -201,6 +207,8 @@ public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
throw new IndexerException(indexerResponse, $"Indexer Error: {jsonResponse.Resource.StatusMessage}");
}

var releaseInfos = new List<ReleaseInfo>();

foreach (var row in jsonResponse.Resource.Results)
{
var details = row.InfoUrl;
Expand Down Expand Up @@ -231,11 +239,13 @@ public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
MinimumSeedTime = 172800, // 120 hours
};

torrentInfos.Add(release);
releaseInfos.Add(release);
}

// order by date
return torrentInfos.OrderByDescending(o => o.PublishDate).ToArray();
return releaseInfos
.OrderByDescending(o => o.PublishDate)
.ToArray();
}

public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
Expand Down

0 comments on commit 34cd68f

Please sign in to comment.