Merge pull request #738 from tidusjar/dev

Dev
This commit is contained in:
Jamie 2016-12-08 12:15:37 +00:00 committed by GitHub
commit 4c1dcf848d
8 changed files with 43 additions and 43 deletions

View file

@ -47,25 +47,18 @@ namespace PlexRequests.Api
public async Task<List<SearchMovie>> SearchMovie(string searchTerm) public async Task<List<SearchMovie>> SearchMovie(string searchTerm)
{ {
var results = await Client.SearchMovie(searchTerm); var results = await Client.SearchMovie(searchTerm);
return results.Results; return results?.Results ?? new List<SearchMovie>();
}
[Obsolete("Should use TvMaze for TV")]
public async Task<List<SearchTv>> SearchTv(string searchTerm)
{
var results = await Client.SearchTvShow(searchTerm);
return results.Results;
} }
public async Task<List<MovieResult>> GetCurrentPlayingMovies() public async Task<List<MovieResult>> GetCurrentPlayingMovies()
{ {
var movies = await Client.GetMovieList(MovieListType.NowPlaying); var movies = await Client.GetMovieList(MovieListType.NowPlaying);
return movies.Results; return movies?.Results ?? new List<MovieResult>();
} }
public async Task<List<MovieResult>> GetUpcomingMovies() public async Task<List<MovieResult>> GetUpcomingMovies()
{ {
var movies = await Client.GetMovieList(MovieListType.Upcoming); var movies = await Client.GetMovieList(MovieListType.Upcoming);
return movies.Results; return movies?.Results ?? new List<MovieResult>();
} }
public async Task<Movie> GetMovieInformation(int tmdbId) public async Task<Movie> GetMovieInformation(int tmdbId)
@ -77,14 +70,7 @@ namespace PlexRequests.Api
public async Task<Movie> GetMovieInformation(string imdbId) public async Task<Movie> GetMovieInformation(string imdbId)
{ {
var movies = await Client.GetMovie(imdbId); var movies = await Client.GetMovie(imdbId);
return movies; return movies ?? new Movie();
}
[Obsolete("Should use TvMaze for TV")]
public async Task<TvShow> GetTvShowInformation(int tmdbId)
{
var show = await Client.GetTvShow(tmdbId);
return show;
} }
} }
} }

View file

@ -230,7 +230,7 @@ namespace PlexRequests.Services.Jobs
public IEnumerable<PlexContent> GetPlexTvShows(IEnumerable<PlexContent> content) public IEnumerable<PlexContent> GetPlexTvShows(IEnumerable<PlexContent> content)
{ {
return content.Where(x => x.Type == Store.Models.Plex.PlexMediaType.Show.to); return content.Where(x => x.Type == Store.Models.Plex.PlexMediaType.Show);
} }
public bool IsTvShowAvailable(PlexContent[] plexShows, string title, string year, string providerId = null, int[] seasons = null) public bool IsTvShowAvailable(PlexContent[] plexShows, string title, string year, string providerId = null, int[] seasons = null)

View file

@ -132,10 +132,11 @@ namespace PlexRequests.Services.Jobs
private void GenerateMovieHtml(RecentlyAddedModel movies, PlexSettings plexSettings, StringBuilder sb) private void GenerateMovieHtml(RecentlyAddedModel movies, PlexSettings plexSettings, StringBuilder sb)
{ {
var orderedMovies = movies?._children?.OrderByDescending(x => x?.addedAt.UnixTimeStampToDateTime()).ToList() ?? new List<RecentlyAddedChild>();
sb.Append("<h1>New Movies:</h1><br/><br/>"); sb.Append("<h1>New Movies:</h1><br/><br/>");
sb.Append( sb.Append(
"<table border=\"0\" cellpadding=\"0\" align=\"center\" cellspacing=\"0\" style=\"border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;\" width=\"100%\">"); "<table border=\"0\" cellpadding=\"0\" align=\"center\" cellspacing=\"0\" style=\"border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;\" width=\"100%\">");
foreach (var movie in movies._children.OrderByDescending(x => x.addedAt.UnixTimeStampToDateTime())) foreach (var movie in orderedMovies)
{ {
var plexGUID = string.Empty; var plexGUID = string.Empty;
try try
@ -147,7 +148,10 @@ namespace PlexRequests.Services.Jobs
var imdbId = PlexHelper.GetProviderIdFromPlexGuid(plexGUID); var imdbId = PlexHelper.GetProviderIdFromPlexGuid(plexGUID);
var info = _movieApi.GetMovieInformation(imdbId).Result; var info = _movieApi.GetMovieInformation(imdbId).Result;
if (info == null)
{
throw new Exception($"Movie with Imdb id {imdbId} returned null from the MovieApi");
}
AddImageInsideTable(sb, $"https://image.tmdb.org/t/p/w500{info.BackdropPath}"); AddImageInsideTable(sb, $"https://image.tmdb.org/t/p/w500{info.BackdropPath}");
sb.Append("<tr>"); sb.Append("<tr>");
@ -259,9 +263,6 @@ namespace PlexRequests.Services.Jobs
if (!testEmail) if (!testEmail)
{ {
//if (newletterSettings.SendToPlexUsers)
//{
var users = UserHelper.GetUsersWithFeature(Features.RequestAddedNotification); var users = UserHelper.GetUsersWithFeature(Features.RequestAddedNotification);
if (users != null) if (users != null)
{ {
@ -273,7 +274,6 @@ namespace PlexRequests.Services.Jobs
} }
} }
} }
//}
if (newletterSettings.CustomUsersEmailAddresses != null if (newletterSettings.CustomUsersEmailAddresses != null
&& newletterSettings.CustomUsersEmailAddresses.Any()) && newletterSettings.CustomUsersEmailAddresses.Any())

View file

@ -62,7 +62,7 @@ namespace PlexRequests.UI.Jobs
var jobList = new List<IJobDetail> var jobList = new List<IJobDetail>
{ {
JobBuilder.Create<PlexAvailabilityChecker>().WithIdentity("PlexAvailabilityChecker", "Plex").Build(), JobBuilder.Create<PlexAvailabilityChecker>().WithIdentity("PlexAvailabilityChecker", "Plex").Build(),
JobBuilder.Create<PlexContentCacher>().WithIdentity("PlexContentCacher", "Plex").Build(), JobBuilder.Create<PlexContentCacher>().WithIdentity("PlexContentCacher", "PlexCacher").Build(),
JobBuilder.Create<PlexEpisodeCacher>().WithIdentity("PlexEpisodeCacher", "Plex").Build(), JobBuilder.Create<PlexEpisodeCacher>().WithIdentity("PlexEpisodeCacher", "Plex").Build(),
JobBuilder.Create<PlexUserChecker>().WithIdentity("PlexUserChecker", "Plex").Build(), JobBuilder.Create<PlexUserChecker>().WithIdentity("PlexUserChecker", "Plex").Build(),
JobBuilder.Create<SickRageCacher>().WithIdentity("SickRageCacher", "Cache").Build(), JobBuilder.Create<SickRageCacher>().WithIdentity("SickRageCacher", "Cache").Build(),
@ -93,8 +93,8 @@ namespace PlexRequests.UI.Jobs
var jobs = CreateJobs(); var jobs = CreateJobs();
var triggers = CreateTriggers(); var triggers = CreateTriggers();
var jobDetails = jobs as IJobDetail[] ?? jobs.ToArray(); var jobDetails = jobs as IJobDetail[] ?? jobs.OrderByDescending(x => x.Key.Name).ToArray();
var triggerDetails = triggers as ITrigger[] ?? triggers.ToArray(); var triggerDetails = triggers as ITrigger[] ?? triggers.OrderByDescending(x => x.Key.Name).ToArray();
if (jobDetails.Length != triggerDetails.Length) if (jobDetails.Length != triggerDetails.Length)
{ {
@ -175,7 +175,7 @@ namespace PlexRequests.UI.Jobs
.Build(); .Build();
var plexCacher = var plexCacher =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("PlexContentCacher", "Plex") .WithIdentity("PlexContentCacher", "PlexCacher")
.StartNow() .StartNow()
.WithSimpleSchedule(x => x.WithIntervalInMinutes(s.PlexContentCacher).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInMinutes(s.PlexContentCacher).RepeatForever())
.Build(); .Build();
@ -183,49 +183,49 @@ namespace PlexRequests.UI.Jobs
var plexUserChecker = var plexUserChecker =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("PlexUserChecker", "Plex") .WithIdentity("PlexUserChecker", "Plex")
.StartNow() .StartAt(DateBuilder.FutureDate(30, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInMinutes(s.PlexUserChecker).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInMinutes(s.PlexUserChecker).RepeatForever())
.Build(); .Build();
var srCacher = var srCacher =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("SickRageCacher", "Cache") .WithIdentity("SickRageCacher", "Cache")
.StartNow() .StartAt(DateBuilder.FutureDate(2, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInMinutes(s.SickRageCacher).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInMinutes(s.SickRageCacher).RepeatForever())
.Build(); .Build();
var sonarrCacher = var sonarrCacher =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("SonarrCacher", "Cache") .WithIdentity("SonarrCacher", "Cache")
.StartNow() .StartAt(DateBuilder.FutureDate(3, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInMinutes(s.SonarrCacher).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInMinutes(s.SonarrCacher).RepeatForever())
.Build(); .Build();
var cpCacher = var cpCacher =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("CouchPotatoCacher", "Cache") .WithIdentity("CouchPotatoCacher", "Cache")
.StartNow() .StartAt(DateBuilder.FutureDate(4, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInMinutes(s.CouchPotatoCacher).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInMinutes(s.CouchPotatoCacher).RepeatForever())
.Build(); .Build();
var storeBackup = var storeBackup =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("StoreBackup", "Database") .WithIdentity("StoreBackup", "Database")
.StartNow() .StartAt(DateBuilder.FutureDate(20, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInHours(s.StoreBackup).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInHours(s.StoreBackup).RepeatForever())
.Build(); .Build();
var storeCleanup = var storeCleanup =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("StoreCleanup", "Database") .WithIdentity("StoreCleanup", "Database")
.StartNow() .StartAt(DateBuilder.FutureDate(35, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInHours(s.StoreCleanup).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInHours(s.StoreCleanup).RepeatForever())
.Build(); .Build();
var userRequestLimiter = var userRequestLimiter =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("UserRequestLimiter", "Request") .WithIdentity("UserRequestLimiter", "Request")
.StartAt(DateBuilder.FutureDate(5, IntervalUnit.Minute)) .StartAt(DateBuilder.FutureDate(25, IntervalUnit.Minute))
// Everything has started on application start, lets wait 5 minutes // Everything has started on application start, lets wait 5 minutes
.WithSimpleSchedule(x => x.WithIntervalInHours(s.UserRequestLimitResetter).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInHours(s.UserRequestLimitResetter).RepeatForever())
.Build(); .Build();
@ -233,7 +233,7 @@ namespace PlexRequests.UI.Jobs
var plexEpCacher = var plexEpCacher =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("PlexEpisodeCacher", "Cache") .WithIdentity("PlexEpisodeCacher", "Cache")
.StartAt(DateBuilder.FutureDate(5, IntervalUnit.Minute)) .StartAt(DateBuilder.FutureDate(10, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInHours(s.PlexEpisodeCacher).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInHours(s.PlexEpisodeCacher).RepeatForever())
.Build(); .Build();
@ -243,14 +243,13 @@ namespace PlexRequests.UI.Jobs
.WithIdentity("RecentlyAddedModel", "Email") .WithIdentity("RecentlyAddedModel", "Email")
.StartNow() .StartNow()
.WithCronSchedule(s.RecentlyAddedCron) .WithCronSchedule(s.RecentlyAddedCron)
.WithSimpleSchedule(x => x.WithIntervalInHours(2).RepeatForever())
.Build(); .Build();
var fault = var fault =
TriggerBuilder.Create() TriggerBuilder.Create()
.WithIdentity("FaultQueueHandler", "Fault") .WithIdentity("FaultQueueHandler", "Fault")
//.StartAt(DateBuilder.FutureDate(10, IntervalUnit.Minute)) //.StartAt(DateBuilder.FutureDate(10, IntervalUnit.Minute))
.StartNow() .StartAt(DateBuilder.FutureDate(13, IntervalUnit.Minute))
.WithSimpleSchedule(x => x.WithIntervalInHours(s.FaultQueueHandler).RepeatForever()) .WithSimpleSchedule(x => x.WithIntervalInHours(s.FaultQueueHandler).RepeatForever())
.Build(); .Build();

View file

@ -977,7 +977,12 @@ namespace PlexRequests.UI.Modules
StoreBackup = s.StoreBackup, StoreBackup = s.StoreBackup,
StoreCleanup = s.StoreCleanup, StoreCleanup = s.StoreCleanup,
JobRecorder = dict, JobRecorder = dict,
RecentlyAddedCron = s.RecentlyAddedCron RecentlyAddedCron = s.RecentlyAddedCron,
PlexContentCacher = s.PlexContentCacher,
FaultQueueHandler = s.FaultQueueHandler,
PlexEpisodeCacher = s.PlexEpisodeCacher,
PlexUserChecker = s.PlexUserChecker,
UserRequestLimitResetter = s.UserRequestLimitResetter
}; };
return View["SchedulerSettings", model]; return View["SchedulerSettings", model];
} }

View file

@ -104,7 +104,8 @@ namespace PlexRequests.UI.Modules
|| x.Name.Equals(JobNames.EpisodeCacher) || x.Name.Equals(JobNames.EpisodeCacher)
|| x.Name.Equals(JobNames.PlexChecker) || x.Name.Equals(JobNames.PlexChecker)
|| x.Name.Equals(JobNames.SonarrCacher) || x.Name.Equals(JobNames.SonarrCacher)
|| x.Name.Equals(JobNames.SrCacher)); || x.Name.Equals(JobNames.SrCacher)
|| x.Name.Equals(JobNames.PlexCacher));
return Response.AsJson(cacherJobs.Any() return Response.AsJson(cacherJobs.Any()

View file

@ -257,7 +257,7 @@ namespace PlexRequests.UI.Modules
var movieInfoTask = await MovieApi.GetMovieInformation(movie.Id).ConfigureAwait(false); var movieInfoTask = await MovieApi.GetMovieInformation(movie.Id).ConfigureAwait(false);
// TODO needs to be careful about this, it's adding extra time to search... // TODO needs to be careful about this, it's adding extra time to search...
// https://www.themoviedb.org/talk/5807f4cdc3a36812160041f2 // https://www.themoviedb.org/talk/5807f4cdc3a36812160041f2
imdbId = movieInfoTask.ImdbId; imdbId = movieInfoTask?.ImdbId;
counter++; counter++;
} }
@ -492,6 +492,15 @@ namespace PlexRequests.UI.Modules
Analytics.TrackEventAsync(Category.Search, Action.Request, "Movie", Username, Analytics.TrackEventAsync(Category.Search, Action.Request, "Movie", Username,
CookieHelper.GetAnalyticClientId(Cookies)); CookieHelper.GetAnalyticClientId(Cookies));
var movieInfo = await MovieApi.GetMovieInformation(movieId); var movieInfo = await MovieApi.GetMovieInformation(movieId);
if (movieInfo == null)
{
return
Response.AsJson(new JsonResponseModel
{
Result = false,
Message = "There was an issue adding this movie!"
});
}
var fullMovieName = var fullMovieName =
$"{movieInfo.Title}{(movieInfo.ReleaseDate.HasValue ? $" ({movieInfo.ReleaseDate.Value.Year})" : string.Empty)}"; $"{movieInfo.Title}{(movieInfo.ReleaseDate.HasValue ? $" ({movieInfo.ReleaseDate.Value.Year})" : string.Empty)}";

View file

@ -11,7 +11,7 @@
formAction = "/" + baseUrl.ToHtmlString(); formAction = "/" + baseUrl.ToHtmlString();
} }
var isAdmin = Html.HasAnyPermission(true, Permissions.Administrator) || Html.HasAnyPermission(Permissions.ManageRequests); var isAdmin = Html.HasAnyPermission(true, Permissions.Administrator, Permissions.ManageRequests);
} }
<h1>Details</h1> <h1>Details</h1>