Updated the logic for handling specific seasons in Sonarr and Sickrage

pull/83/head
Shannon Barrett 9 years ago
parent 55addbee0a
commit 15f7572cf5

@ -32,7 +32,7 @@ namespace PlexRequests.Api.Interfaces
{ {
public interface ISickRageApi public interface ISickRageApi
{ {
SickRageTvAdd AddSeries(int tvdbId, bool latest, int[] seasons, string quality, string apiKey, SickRageTvAdd AddSeries(int tvdbId, int seasoncount, int[] seasons, string quality, string apiKey,
Uri baseUrl); Uri baseUrl);
SickRagePing Ping(string apiKey, Uri baseUrl); SickRagePing Ping(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, int[] seasons, string apiKey, Uri baseUrl); int seasonCount, int[] seasons, string apiKey, Uri baseUrl);
SystemStatus SystemStatus(string apiKey, Uri baseUrl); SystemStatus SystemStatus(string apiKey, Uri baseUrl);
} }

@ -66,6 +66,7 @@
<Compile Include="Sonarr\SystemStatus.cs" /> <Compile Include="Sonarr\SystemStatus.cs" />
<Compile Include="Tv\Authentication.cs" /> <Compile Include="Tv\Authentication.cs" />
<Compile Include="Tv\TvMazeSearch.cs" /> <Compile Include="Tv\TvMazeSearch.cs" />
<Compile Include="Tv\TvMazeSeasons.cs" />
<Compile Include="Tv\TVMazeShow.cs" /> <Compile Include="Tv\TVMazeShow.cs" />
<Compile Include="Tv\TvSearchResult.cs" /> <Compile Include="Tv\TvSearchResult.cs" />
<Compile Include="Tv\TvShow.cs" /> <Compile Include="Tv\TvShow.cs" />

@ -23,5 +23,6 @@ namespace PlexRequests.Api.Models.Tv
public string summary { get; set; } public string summary { get; set; }
public int updated { get; set; } public int updated { get; set; }
public Links _links { get; set; } public Links _links { get; set; }
public int seasonCount { get; set; }
} }
} }

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PlexRequests.Api.Models.Tv
{
public class TvMazeSeasons : TvMazeShow
{
public int number { get; set; }
}
}

@ -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, int[] seasons, public SonarrAddSeries AddSeries(int tvdbId, string title, int qualityId, bool seasonFolders, string rootPath, int seasonCount, int[] seasons,
string apiKey, Uri baseUrl) string apiKey, Uri baseUrl)
{ {
var json = MockApiData.Sonarr_AddSeriesResult; var json = MockApiData.Sonarr_AddSeriesResult;

@ -28,6 +28,7 @@
#endregion #endregion
using System; using System;
using System.Linq;
using NLog; using NLog;
using PlexRequests.Api.Interfaces; using PlexRequests.Api.Interfaces;
using PlexRequests.Api.Models.SickRage; using PlexRequests.Api.Models.SickRage;
@ -48,13 +49,11 @@ namespace PlexRequests.Api
private ApiRequest Api { get; } private ApiRequest Api { get; }
public SickRageTvAdd AddSeries(int tvdbId, bool latest, int[] seasons, string quality, string apiKey, public SickRageTvAdd AddSeries(int tvdbId, int seasonCount, int[] seasons, string quality, string apiKey,
Uri baseUrl) Uri baseUrl)
{ {
string status; var futureStatus = seasons.Length > 0 && !seasons.Any(x => x == seasonCount) ? SickRageStatus.Skipped : SickRageStatus.Wanted;
var futureStatus = SickRageStatus.Wanted; var status = seasons.Length > 0 ? SickRageStatus.Skipped : SickRageStatus.Wanted;
status = latest || seasons.Length > 0 ? SickRageStatus.Skipped : SickRageStatus.Wanted;
var request = new RestRequest var request = new RestRequest
{ {
@ -72,7 +71,7 @@ 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") if (seasons.Length > 0 && obj.result != "failure")
{ {
//handle the seasons requested //handle the seasons requested
foreach (int s in seasons) foreach (int s in seasons)

@ -26,7 +26,7 @@
#endregion #endregion
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using NLog; using NLog;
using PlexRequests.Api.Interfaces; using PlexRequests.Api.Interfaces;
using PlexRequests.Api.Models.Sonarr; using PlexRequests.Api.Models.Sonarr;
@ -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, int[] seasons, string apiKey, Uri baseUrl) public SonarrAddSeries AddSeries(int tvdbId, string title, int qualityId, bool seasonFolders, string rootPath, int seasonCount, int[] seasons, string apiKey, Uri baseUrl)
{ {
var request = new RestRequest var request = new RestRequest
@ -64,27 +64,28 @@ namespace PlexRequests.Api
}; };
var options = new SonarrAddSeries(); var options = new SonarrAddSeries();
if (seasons.Length == 0)
{
if (episodes) //I'm fairly certain we won't need this logic anymore since we're manually adding the seasons
{ //if (seasons.Length == 0)
options.addOptions = new AddOptions //{
{ // options.addOptions = new AddOptions
ignoreEpisodesWithFiles = true, // {
ignoreEpisodesWithoutFiles = true, // ignoreEpisodesWithFiles = true,
searchForMissingEpisodes = false // ignoreEpisodesWithoutFiles = true,
}; // searchForMissingEpisodes = false
} // };
else //}
{ //else
options.addOptions = new AddOptions //{
{ // options.addOptions = new AddOptions
ignoreEpisodesWithFiles = false, // {
searchForMissingEpisodes = true, // ignoreEpisodesWithFiles = false,
ignoreEpisodesWithoutFiles = false // ignoreEpisodesWithoutFiles = false,
}; // searchForMissingEpisodes = true
} // };
} //}
options.seasonFolder = seasonFolders; options.seasonFolder = seasonFolders;
options.title = title; options.title = title;
options.qualityProfileId = qualityId; options.qualityProfileId = qualityId;
@ -93,20 +94,16 @@ namespace PlexRequests.Api
options.seasons = new List<Season>(); options.seasons = new List<Season>();
options.rootFolderPath = rootPath; options.rootFolderPath = rootPath;
if (seasons.Length > 0) for (var i = 1; i <= seasonCount; i++)
{ {
foreach (int s in seasons) var season = new Season
{ {
var season = new Season seasonNumber = i,
{ monitored = seasons.Length == 0 || seasons.Any(x => x == i)
seasonNumber = s, };
monitored = true options.seasons.Add(season);
};
options.seasons.Add(season);
}
} }
request.AddHeader("X-Api-Key", apiKey); request.AddHeader("X-Api-Key", apiKey);
request.AddJsonBody(options); request.AddJsonBody(options);

@ -26,7 +26,7 @@
#endregion #endregion
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using NLog; using NLog;
using PlexRequests.Api.Models.Tv; using PlexRequests.Api.Models.Tv;
@ -79,7 +79,25 @@ namespace PlexRequests.Api
request.AddUrlSegment("id", theTvDbId.ToString()); request.AddUrlSegment("id", theTvDbId.ToString());
request.AddHeader("Content-Type", "application/json"); request.AddHeader("Content-Type", "application/json");
return Api.Execute<TvMazeShow>(request, new Uri(Uri)); var obj = Api.Execute<TvMazeShow>(request, new Uri(Uri));
obj.seasonCount = GetSeasonCount(obj.id);
return obj;
}
public int GetSeasonCount(int id)
{
var request = new RestRequest
{
Method = Method.GET,
Resource = "shows/{id}/seasons"
};
request.AddUrlSegment("id", id.ToString());
request.AddHeader("Content-Type", "application/json");
var obj = Api.Execute<List<TvMazeSeasons>>(request, new Uri(Uri));
var seasons = obj.Select(x => x.number > 0);
return seasons.Count();
} }
} }

@ -110,7 +110,6 @@ namespace PlexRequests.Core
Available = r.Available, Available = r.Available,
ImdbId = show.externals.imdb, ImdbId = show.externals.imdb,
Issues = r.Issues, Issues = r.Issues,
LatestTv = r.LatestTv,
OtherMessage = r.OtherMessage, OtherMessage = r.OtherMessage,
Overview = show.summary.RemoveHtml(), Overview = show.summary.RemoveHtml(),
RequestedBy = r.RequestedBy, RequestedBy = r.RequestedBy,

@ -23,9 +23,9 @@ namespace PlexRequests.Store
public bool Available { get; set; } public bool Available { get; set; }
public IssueState Issues { get; set; } public IssueState Issues { get; set; }
public string OtherMessage { get; set; } public string OtherMessage { get; set; }
public bool LatestTv { get; set; }
public string AdminNote { get; set; } public string AdminNote { get; set; }
public int[] SeasonList { get; set; } public int[] SeasonList { get; set; }
public int SeasonCount { get; set; }
} }
public enum RequestType public enum RequestType

@ -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, model.SeasonList, sonarrSettings.ApiKey, sonarrSettings.SeasonFolders, sonarrSettings.RootPath, model.SeasonCount, 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, model.SeasonList, sickRageSettings.QualityProfile, var result = SickrageApi.AddSeries(model.ProviderId, model.SeasonCount, model.SeasonList, sickRageSettings.QualityProfile,
sickRageSettings.ApiKey, sickRageSettings.FullUri); sickRageSettings.ApiKey, sickRageSettings.FullUri);
Log.Trace("SickRage Add Result: "); Log.Trace("SickRage Add Result: ");

@ -285,7 +285,6 @@ 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,
@ -299,14 +298,20 @@ namespace PlexRequests.UI.Modules
Approved = false, Approved = false,
RequestedBy = Session[SessionKeys.UsernameKey].ToString(), RequestedBy = Session[SessionKeys.UsernameKey].ToString(),
Issues = IssueState.None, Issues = IssueState.None,
LatestTv = latest, ImdbId = showInfo.externals?.imdb ?? string.Empty,
ImdbId = showInfo.externals?.imdb ?? string.Empty SeasonCount = showInfo.seasonCount
}; };
var seasonsList = new List<int>(); var seasonsList = new List<int>();
if (seasons == "first") switch (seasons)
{ {
seasonsList.Add(1); case "first":
seasonsList.Add(1);
break;
case "latest":
seasonsList.Add(model.SeasonCount);
break;
} }
model.SeasonList = seasonsList.ToArray(); model.SeasonList = seasonsList.ToArray();
var settings = PrService.GetSettings(); var settings = PrService.GetSettings();
@ -360,23 +365,23 @@ namespace PlexRequests.UI.Modules
return result; return result;
} }
private Response SendToSickRage(SickRageSettings sickRageSettings, RequestedModel model) //private Response SendToSickRage(SickRageSettings sickRageSettings, RequestedModel model)
{ //{
var result = SickrageApi.AddSeries(model.ProviderId, model.LatestTv, model.SeasonList, sickRageSettings.QualityProfile, // var result = SickrageApi.AddSeries(model.ProviderId, model.SeasonCount, model.SeasonList, sickRageSettings.QualityProfile,
sickRageSettings.ApiKey, sickRageSettings.FullUri); // sickRageSettings.ApiKey, sickRageSettings.FullUri);
Log.Trace("SickRage Result: "); // Log.Trace("SickRage Result: ");
Log.Trace(result.DumpJson()); // Log.Trace(result.DumpJson());
if (result?.result == "success") // if (result?.result == "success")
{ // {
model.Approved = true; // model.Approved = true;
Log.Debug("Adding tv to database requests (No approval required & SickRage)"); // Log.Debug("Adding tv to database requests (No approval required & SickRage)");
RequestService.AddRequest(model); // RequestService.AddRequest(model);
return Response.AsJson(new JsonResponseModel { Result = true }); // return Response.AsJson(new JsonResponseModel { Result = true });
} // }
return Response.AsJson(new JsonResponseModel { Result = false, Message = "Something went wrong adding the movie to SickRage! Please check your settings." }); // return Response.AsJson(new JsonResponseModel { Result = false, Message = "Something went wrong adding the movie to SickRage! Please check your settings." });
} //}
} }
} }
Loading…
Cancel
Save