pull/83/head
Shannon Barrett 9 years ago
parent b100fbe678
commit c9d2b8fc13

@ -32,9 +32,11 @@ namespace PlexRequests.Api.Interfaces
{ {
public interface ISickRageApi public interface ISickRageApi
{ {
SickRageTvAdd AddSeries(int tvdbId, bool latest, string quality, string apiKey, SickRageTvAdd AddSeries(int tvdbId, bool latest, int[] seasons, string quality, string apiKey,
Uri baseUrl); Uri baseUrl);
SickRagePing Ping(string apiKey, Uri baseUrl); SickRagePing Ping(string apiKey, Uri baseUrl);
SickRageTvAdd AddSeason(int tvdbId, int season, string apiKey, Uri baseUrl);
} }
} }

@ -36,7 +36,7 @@ namespace PlexRequests.Api.Interfaces
List<SonarrProfile> GetProfiles(string apiKey, Uri baseUrl); List<SonarrProfile> GetProfiles(string apiKey, Uri baseUrl);
SonarrAddSeries AddSeries(int tvdbId, string title, int qualityId, bool seasonFolders, string rootPath, SonarrAddSeries AddSeries(int tvdbId, string title, int qualityId, bool seasonFolders, string rootPath,
bool episodes, string apiKey, Uri baseUrl); bool episodes, int[] seasons, string apiKey, Uri baseUrl);
SystemStatus SystemStatus(string apiKey, Uri baseUrl); SystemStatus SystemStatus(string apiKey, Uri baseUrl);
} }

@ -43,7 +43,7 @@ namespace PlexRequests.Api.Mocks
return obj; return obj;
} }
public SonarrAddSeries AddSeries(int tvdbId, string title, int qualityId, bool seasonFolders, string rootPath, bool episodes, public SonarrAddSeries AddSeries(int tvdbId, string title, int qualityId, bool seasonFolders, string rootPath, bool episodes, int[] seasons,
string apiKey, Uri baseUrl) string apiKey, Uri baseUrl)
{ {
var json = MockApiData.Sonarr_AddSeriesResult; var json = MockApiData.Sonarr_AddSeriesResult;

@ -31,6 +31,7 @@ using System;
using NLog; using NLog;
using PlexRequests.Api.Interfaces; using PlexRequests.Api.Interfaces;
using PlexRequests.Api.Models.SickRage; using PlexRequests.Api.Models.SickRage;
using PlexRequests.Helpers;
using RestSharp; using RestSharp;
namespace PlexRequests.Api namespace PlexRequests.Api
@ -47,13 +48,13 @@ namespace PlexRequests.Api
private ApiRequest Api { get; } private ApiRequest Api { get; }
public SickRageTvAdd AddSeries(int tvdbId, bool latest, string quality, string apiKey, public SickRageTvAdd AddSeries(int tvdbId, bool latest, int[] seasons, string quality, string apiKey,
Uri baseUrl) Uri baseUrl)
{ {
string status; string status;
var futureStatus = SickRageStatus.Wanted; var futureStatus = SickRageStatus.Wanted;
status = latest ? SickRageStatus.Skipped : SickRageStatus.Wanted; status = latest || seasons.Length > 0 ? SickRageStatus.Skipped : SickRageStatus.Wanted;
var request = new RestRequest var request = new RestRequest
{ {
@ -71,6 +72,17 @@ namespace PlexRequests.Api
var obj = Api.Execute<SickRageTvAdd>(request, baseUrl); var obj = Api.Execute<SickRageTvAdd>(request, baseUrl);
if (!latest && seasons.Length > 0 && obj.result != "failure")
{
//handle the seasons requested
foreach (int s in seasons)
{
var result = AddSeason(tvdbId, s, apiKey, baseUrl);
Log.Trace("SickRage adding season results: ");
Log.Trace(result.DumpJson());
}
}
return obj; return obj;
} }
@ -87,5 +99,22 @@ namespace PlexRequests.Api
return obj; return obj;
} }
public SickRageTvAdd AddSeason(int tvdbId, int season, string apiKey, Uri baseUrl)
{
var request = new RestRequest
{
Resource = "/api/{apiKey}/?cmd=episode.setstatus",
Method = Method.GET
};
request.AddUrlSegment("apiKey", apiKey);
request.AddQueryParameter("tvdbid", tvdbId.ToString());
request.AddQueryParameter("season", season.ToString());
request.AddQueryParameter("status", SickRageStatus.Wanted);
var obj = Api.Execute<SickRageTvAdd>(request, baseUrl);
return obj;
}
} }
} }

@ -54,7 +54,7 @@ namespace PlexRequests.Api
return obj; return obj;
} }
public SonarrAddSeries AddSeries(int tvdbId, string title, int qualityId, bool seasonFolders, string rootPath, bool episodes, string apiKey, Uri baseUrl) public SonarrAddSeries AddSeries(int tvdbId, string title, int qualityId, bool seasonFolders, string rootPath, bool episodes, int[] seasons, string apiKey, Uri baseUrl)
{ {
var request = new RestRequest var request = new RestRequest
@ -90,6 +90,19 @@ namespace PlexRequests.Api
options.seasons = new List<Season>(); options.seasons = new List<Season>();
options.rootFolderPath = rootPath; options.rootFolderPath = rootPath;
if (seasons.Length > 0)
{
foreach (int s in seasons)
{
var season = new Season
{
seasonNumber = s,
monitored = true
};
options.seasons.Add(season);
}
}
request.AddHeader("X-Api-Key", apiKey); request.AddHeader("X-Api-Key", apiKey);
request.AddJsonBody(options); request.AddJsonBody(options);

@ -25,6 +25,7 @@ namespace PlexRequests.Store
public string OtherMessage { get; set; } public string OtherMessage { get; set; }
public bool LatestTv { get; set; } public bool LatestTv { get; set; }
public string AdminNote { get; set; } public string AdminNote { get; set; }
public int[] SeasonList { get; set; }
} }
public enum RequestType public enum RequestType

@ -39,9 +39,14 @@ $(document).on("click", ".dropdownTv", function (e) {
var $form = $('#form' + buttonId); var $form = $('#form' + buttonId);
var data = $form.serialize(); var data = $form.serialize();
var seasons = $(this).attr("season-select"); var seasons = $(this).attr("season-select");
if (seasons === "1") { if (seasons === "2") {
// Send over the latest // Send over the latest
data = data + "&latest=true"; data = data + "&seasons=latest";
}
if (seasons === "1") {
// Send over the first season
data = data + "&seasons=first";
} }
var type = $form.prop('method'); var type = $form.prop('method');

@ -54,7 +54,7 @@ namespace PlexRequests.UI.Helpers
int qualityProfile; int qualityProfile;
int.TryParse(sonarrSettings.QualityProfile, out qualityProfile); int.TryParse(sonarrSettings.QualityProfile, out qualityProfile);
var result = SonarrApi.AddSeries(model.ProviderId, model.Title, qualityProfile, var result = SonarrApi.AddSeries(model.ProviderId, model.Title, qualityProfile,
sonarrSettings.SeasonFolders, sonarrSettings.RootPath, model.LatestTv, sonarrSettings.ApiKey, sonarrSettings.SeasonFolders, sonarrSettings.RootPath, model.LatestTv, model.SeasonList, sonarrSettings.ApiKey,
sonarrSettings.FullUri); sonarrSettings.FullUri);
Log.Trace("Sonarr Add Result: "); Log.Trace("Sonarr Add Result: ");
@ -65,7 +65,7 @@ namespace PlexRequests.UI.Helpers
public SickRageTvAdd SendToSickRage(SickRageSettings sickRageSettings, RequestedModel model) public SickRageTvAdd SendToSickRage(SickRageSettings sickRageSettings, RequestedModel model)
{ {
var result = SickrageApi.AddSeries(model.ProviderId, model.LatestTv, sickRageSettings.QualityProfile, var result = SickrageApi.AddSeries(model.ProviderId, model.LatestTv, model.SeasonList, sickRageSettings.QualityProfile,
sickRageSettings.ApiKey, sickRageSettings.FullUri); sickRageSettings.ApiKey, sickRageSettings.FullUri);
Log.Trace("SickRage Add Result: "); Log.Trace("SickRage Add Result: ");

@ -77,7 +77,7 @@ namespace PlexRequests.UI.Modules
Get["movie/playing"] = parameters => CurrentlyPlayingMovies(); Get["movie/playing"] = parameters => CurrentlyPlayingMovies();
Post["request/movie"] = parameters => RequestMovie((int)Request.Form.movieId); Post["request/movie"] = parameters => RequestMovie((int)Request.Form.movieId);
Post["request/tv"] = parameters => RequestTvShow((int)Request.Form.tvId, (bool)Request.Form.latest); Post["request/tv"] = parameters => RequestTvShow((int)Request.Form.tvId, (string)Request.Form.seasons);
} }
private TheMovieDbApi MovieApi { get; } private TheMovieDbApi MovieApi { get; }
private ICouchPotatoApi CouchPotatoApi { get; } private ICouchPotatoApi CouchPotatoApi { get; }
@ -259,7 +259,7 @@ namespace PlexRequests.UI.Modules
/// <param name="showId">The show identifier.</param> /// <param name="showId">The show identifier.</param>
/// <param name="latest">if set to <c>true</c> [latest].</param> /// <param name="latest">if set to <c>true</c> [latest].</param>
/// <returns></returns> /// <returns></returns>
private Response RequestTvShow(int showId, bool latest) private Response RequestTvShow(int showId, string seasons)
{ {
if (RequestService.CheckRequest(showId)) if (RequestService.CheckRequest(showId))
{ {
@ -285,7 +285,7 @@ namespace PlexRequests.UI.Modules
DateTime firstAir; DateTime firstAir;
DateTime.TryParse(showInfo.premiered, out firstAir); DateTime.TryParse(showInfo.premiered, out firstAir);
var latest = seasons == "latest";
var model = new RequestedModel var model = new RequestedModel
{ {
ProviderId = showInfo.externals?.thetvdb ?? 0, ProviderId = showInfo.externals?.thetvdb ?? 0,
@ -302,7 +302,12 @@ namespace PlexRequests.UI.Modules
LatestTv = latest, LatestTv = latest,
ImdbId = showInfo.externals?.imdb ?? string.Empty ImdbId = showInfo.externals?.imdb ?? string.Empty
}; };
var seasonsList = new List<int>();
if (seasons == "first")
{
seasonsList.Add(1);
}
model.SeasonList = seasonsList.ToArray();
var settings = PrService.GetSettings(); var settings = PrService.GetSettings();
if (!settings.RequireApproval) if (!settings.RequireApproval)
@ -357,7 +362,7 @@ namespace PlexRequests.UI.Modules
private Response SendToSickRage(SickRageSettings sickRageSettings, RequestedModel model) private Response SendToSickRage(SickRageSettings sickRageSettings, RequestedModel model)
{ {
var result = SickrageApi.AddSeries(model.ProviderId, model.LatestTv, sickRageSettings.QualityProfile, var result = SickrageApi.AddSeries(model.ProviderId, model.LatestTv, model.SeasonList, sickRageSettings.QualityProfile,
sickRageSettings.ApiKey, sickRageSettings.FullUri); sickRageSettings.ApiKey, sickRageSettings.FullUri);
Log.Trace("SickRage Result: "); Log.Trace("SickRage Result: ");

@ -84,7 +84,7 @@
</div> </div>
<div class="col-sm-2 col-sm-push-3"> <div class="col-sm-2 col-sm-push-3">
<form method="POST" action="/search/request/{{type}}" id="form{{id}}"> <form method="POST" action="/search/request/{{type}}" id="form{{id}}">
<input name="{{type}}Id" type="text" value="{{id}}" hidden="hidden" /> <input name="{{type}}Id" type="text" value="{{id}}" hidden="hidden" />
{{#if_eq type "movie"}} {{#if_eq type "movie"}}
<button id="{{id}}" style="text-align: right" class="btn btn-primary-outline requestMovie" type="submit"><i class="fa fa-plus"></i> Request</button> <button id="{{id}}" style="text-align: right" class="btn btn-primary-outline requestMovie" type="submit"><i class="fa fa-plus"></i> Request</button>
{{/if_eq}} {{/if_eq}}
@ -96,7 +96,8 @@
</button> </button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
<li><a id="{{id}}" season-select="0" class="dropdownTv " href="#">All Seasons</a></li> <li><a id="{{id}}" season-select="0" class="dropdownTv " href="#">All Seasons</a></li>
<li><a id="{{id}}" season-select="1" class="dropdownTv" href="#">Latest Season</a></li> <li><a id="{{id}}" season-select="1" class="dropdownTv" href="#">First Season</a></li>
<li><a id="{{id}}" season-select="2" class="dropdownTv" href="#">Latest Season</a></li>
</ul> </ul>
</div> </div>
{{/if_eq}} {{/if_eq}}

Loading…
Cancel
Save