mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-11 15:56:05 -07:00
Updated the logic for handling specific seasons in Sonarr and Sickrage
This commit is contained in:
parent
55addbee0a
commit
15f7572cf5
13 changed files with 101 additions and 68 deletions
|
@ -32,7 +32,7 @@ namespace PlexRequests.Api.Interfaces
|
|||
{
|
||||
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);
|
||||
|
||||
SickRagePing Ping(string apiKey, Uri baseUrl);
|
||||
|
|
|
@ -36,7 +36,7 @@ namespace PlexRequests.Api.Interfaces
|
|||
List<SonarrProfile> GetProfiles(string apiKey, Uri baseUrl);
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -66,6 +66,7 @@
|
|||
<Compile Include="Sonarr\SystemStatus.cs" />
|
||||
<Compile Include="Tv\Authentication.cs" />
|
||||
<Compile Include="Tv\TvMazeSearch.cs" />
|
||||
<Compile Include="Tv\TvMazeSeasons.cs" />
|
||||
<Compile Include="Tv\TVMazeShow.cs" />
|
||||
<Compile Include="Tv\TvSearchResult.cs" />
|
||||
<Compile Include="Tv\TvShow.cs" />
|
||||
|
|
|
@ -23,5 +23,6 @@ namespace PlexRequests.Api.Models.Tv
|
|||
public string summary { get; set; }
|
||||
public int updated { get; set; }
|
||||
public Links _links { get; set; }
|
||||
public int seasonCount { get; set; }
|
||||
}
|
||||
}
|
13
PlexRequests.Api.Models/Tv/TvMazeSeasons.cs
Normal file
13
PlexRequests.Api.Models/Tv/TvMazeSeasons.cs
Normal file
|
@ -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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
var json = MockApiData.Sonarr_AddSeriesResult;
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using PlexRequests.Api.Interfaces;
|
||||
using PlexRequests.Api.Models.SickRage;
|
||||
|
@ -48,13 +49,11 @@ namespace PlexRequests.Api
|
|||
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)
|
||||
{
|
||||
string status;
|
||||
var futureStatus = SickRageStatus.Wanted;
|
||||
|
||||
status = latest || seasons.Length > 0 ? SickRageStatus.Skipped : SickRageStatus.Wanted;
|
||||
var futureStatus = seasons.Length > 0 && !seasons.Any(x => x == seasonCount) ? SickRageStatus.Skipped : SickRageStatus.Wanted;
|
||||
var status = seasons.Length > 0 ? SickRageStatus.Skipped : SickRageStatus.Wanted;
|
||||
|
||||
var request = new RestRequest
|
||||
{
|
||||
|
@ -72,7 +71,7 @@ namespace PlexRequests.Api
|
|||
|
||||
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
|
||||
foreach (int s in seasons)
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#endregion
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using PlexRequests.Api.Interfaces;
|
||||
using PlexRequests.Api.Models.Sonarr;
|
||||
|
@ -54,7 +54,7 @@ namespace PlexRequests.Api
|
|||
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
|
||||
|
@ -64,27 +64,28 @@ namespace PlexRequests.Api
|
|||
};
|
||||
|
||||
var options = new SonarrAddSeries();
|
||||
if (seasons.Length == 0)
|
||||
{
|
||||
if (episodes)
|
||||
{
|
||||
options.addOptions = new AddOptions
|
||||
{
|
||||
ignoreEpisodesWithFiles = true,
|
||||
ignoreEpisodesWithoutFiles = true,
|
||||
searchForMissingEpisodes = false
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
options.addOptions = new AddOptions
|
||||
{
|
||||
ignoreEpisodesWithFiles = false,
|
||||
searchForMissingEpisodes = true,
|
||||
ignoreEpisodesWithoutFiles = false
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//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
|
||||
// {
|
||||
// ignoreEpisodesWithFiles = true,
|
||||
// ignoreEpisodesWithoutFiles = true,
|
||||
// searchForMissingEpisodes = false
|
||||
// };
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// options.addOptions = new AddOptions
|
||||
// {
|
||||
// ignoreEpisodesWithFiles = false,
|
||||
// ignoreEpisodesWithoutFiles = false,
|
||||
// searchForMissingEpisodes = true
|
||||
// };
|
||||
//}
|
||||
|
||||
options.seasonFolder = seasonFolders;
|
||||
options.title = title;
|
||||
options.qualityProfileId = qualityId;
|
||||
|
@ -93,19 +94,15 @@ namespace PlexRequests.Api
|
|||
options.seasons = new List<Season>();
|
||||
options.rootFolderPath = rootPath;
|
||||
|
||||
if (seasons.Length > 0)
|
||||
{
|
||||
foreach (int s in seasons)
|
||||
for (var i = 1; i <= seasonCount; i++)
|
||||
{
|
||||
var season = new Season
|
||||
{
|
||||
seasonNumber = s,
|
||||
monitored = true
|
||||
seasonNumber = i,
|
||||
monitored = seasons.Length == 0 || seasons.Any(x => x == i)
|
||||
};
|
||||
options.seasons.Add(season);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
request.AddHeader("X-Api-Key", apiKey);
|
||||
request.AddJsonBody(options);
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#endregion
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
|
||||
using PlexRequests.Api.Models.Tv;
|
||||
|
@ -79,7 +79,25 @@ namespace PlexRequests.Api
|
|||
request.AddUrlSegment("id", theTvDbId.ToString());
|
||||
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,
|
||||
ImdbId = show.externals.imdb,
|
||||
Issues = r.Issues,
|
||||
LatestTv = r.LatestTv,
|
||||
OtherMessage = r.OtherMessage,
|
||||
Overview = show.summary.RemoveHtml(),
|
||||
RequestedBy = r.RequestedBy,
|
||||
|
|
|
@ -23,9 +23,9 @@ namespace PlexRequests.Store
|
|||
public bool Available { get; set; }
|
||||
public IssueState Issues { get; set; }
|
||||
public string OtherMessage { get; set; }
|
||||
public bool LatestTv { get; set; }
|
||||
public string AdminNote { get; set; }
|
||||
public int[] SeasonList { get; set; }
|
||||
public int SeasonCount { get; set; }
|
||||
}
|
||||
|
||||
public enum RequestType
|
||||
|
|
|
@ -54,7 +54,7 @@ namespace PlexRequests.UI.Helpers
|
|||
int qualityProfile;
|
||||
int.TryParse(sonarrSettings.QualityProfile, out 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);
|
||||
|
||||
Log.Trace("Sonarr Add Result: ");
|
||||
|
@ -65,7 +65,7 @@ namespace PlexRequests.UI.Helpers
|
|||
|
||||
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);
|
||||
|
||||
Log.Trace("SickRage Add Result: ");
|
||||
|
|
|
@ -285,7 +285,6 @@ namespace PlexRequests.UI.Modules
|
|||
|
||||
DateTime firstAir;
|
||||
DateTime.TryParse(showInfo.premiered, out firstAir);
|
||||
var latest = seasons == "latest";
|
||||
var model = new RequestedModel
|
||||
{
|
||||
ProviderId = showInfo.externals?.thetvdb ?? 0,
|
||||
|
@ -299,14 +298,20 @@ namespace PlexRequests.UI.Modules
|
|||
Approved = false,
|
||||
RequestedBy = Session[SessionKeys.UsernameKey].ToString(),
|
||||
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>();
|
||||
if (seasons == "first")
|
||||
switch (seasons)
|
||||
{
|
||||
case "first":
|
||||
seasonsList.Add(1);
|
||||
break;
|
||||
case "latest":
|
||||
seasonsList.Add(model.SeasonCount);
|
||||
break;
|
||||
}
|
||||
|
||||
model.SeasonList = seasonsList.ToArray();
|
||||
|
||||
var settings = PrService.GetSettings();
|
||||
|
@ -360,23 +365,23 @@ namespace PlexRequests.UI.Modules
|
|||
return result;
|
||||
}
|
||||
|
||||
private Response SendToSickRage(SickRageSettings sickRageSettings, RequestedModel model)
|
||||
{
|
||||
var result = SickrageApi.AddSeries(model.ProviderId, model.LatestTv, model.SeasonList, sickRageSettings.QualityProfile,
|
||||
sickRageSettings.ApiKey, sickRageSettings.FullUri);
|
||||
//private Response SendToSickRage(SickRageSettings sickRageSettings, RequestedModel model)
|
||||
//{
|
||||
// var result = SickrageApi.AddSeries(model.ProviderId, model.SeasonCount, model.SeasonList, sickRageSettings.QualityProfile,
|
||||
// sickRageSettings.ApiKey, sickRageSettings.FullUri);
|
||||
|
||||
Log.Trace("SickRage Result: ");
|
||||
Log.Trace(result.DumpJson());
|
||||
// Log.Trace("SickRage Result: ");
|
||||
// Log.Trace(result.DumpJson());
|
||||
|
||||
if (result?.result == "success")
|
||||
{
|
||||
model.Approved = true;
|
||||
Log.Debug("Adding tv to database requests (No approval required & SickRage)");
|
||||
RequestService.AddRequest(model);
|
||||
// if (result?.result == "success")
|
||||
// {
|
||||
// model.Approved = true;
|
||||
// Log.Debug("Adding tv to database requests (No approval required & SickRage)");
|
||||
// RequestService.AddRequest(model);
|
||||
|
||||
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 = true });
|
||||
// }
|
||||
// return Response.AsJson(new JsonResponseModel { Result = false, Message = "Something went wrong adding the movie to SickRage! Please check your settings." });
|
||||
//}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue