Looks like we were overloading emby with out api calls.

Put a bit of handling around that to wait when we get some errors. Problem about this is it can take a long time to generate the infomation when we have episode searching enabled. #1109
pull/1257/head
tidusjar 8 years ago
parent 717b499874
commit b9c0c20af6

@ -185,7 +185,6 @@ namespace Ombi.Api
throw new ArgumentOutOfRangeException(nameof(type), type, null); throw new ArgumentOutOfRangeException(nameof(type), type, null);
} }
var info = new EmbyInformation();
switch (type) switch (type)
{ {

@ -32,6 +32,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using Newtonsoft.Json;
using NLog; using NLog;
using Ombi.Api; using Ombi.Api;
using Ombi.Api.Interfaces; using Ombi.Api.Interfaces;
@ -116,7 +117,6 @@ namespace Ombi.Services.Jobs.RecentlyAddedNewsletter
var filteredMovies = movie.Where(m => recentlyAdded.All(x => x.ProviderId != m.ProviderId)).ToList(); var filteredMovies = movie.Where(m => recentlyAdded.All(x => x.ProviderId != m.ProviderId)).ToList();
var filteredEp = episodes.Where(m => recentlyAdded.All(x => x.ProviderId != m.ProviderId)).ToList(); var filteredEp = episodes.Where(m => recentlyAdded.All(x => x.ProviderId != m.ProviderId)).ToList();
var info = new List<EmbyRecentlyAddedModel>(); var info = new List<EmbyRecentlyAddedModel>();
foreach (var m in filteredMovies) foreach (var m in filteredMovies)
{ {
@ -137,28 +137,41 @@ namespace Ombi.Services.Jobs.RecentlyAddedNewsletter
{ {
var i = Api.GetInformation(t.EmbyId, Ombi.Api.Models.Emby.EmbyMediaType.Series, var i = Api.GetInformation(t.EmbyId, Ombi.Api.Models.Emby.EmbyMediaType.Series,
embySettings.ApiKey, embySettings.AdministratorId, embySettings.FullUri); embySettings.ApiKey, embySettings.AdministratorId, embySettings.FullUri);
var ep = filteredEp.Where(x => x.ParentId == t.EmbyId); var ep = filteredEp.Where(x => x.ParentId == t.EmbyId).ToList();
var item = new EmbyRecentlyAddedModel
if (ep.Any())
{ {
var episodeList = new List<EmbyEpisodeInformation>(); EmbyContent = t,
foreach (var embyEpisodese in ep) EmbyInformation = i,
};
if (ep.Any() && embySettings.EnableEpisodeSearching)
{
try
{ {
var epInfo = Api.GetInformation(embyEpisodese.EmbyId, Ombi.Api.Models.Emby.EmbyMediaType.Episode, var episodeList = new List<EmbyEpisodeInformation>();
embySettings.ApiKey, embySettings.AdministratorId, embySettings.FullUri); foreach (var embyEpisodese in ep)
episodeList.Add(epInfo.EpisodeInformation); {
var epInfo = Api.GetInformation(embyEpisodese.EmbyId,
Ombi.Api.Models.Emby.EmbyMediaType.Episode,
embySettings.ApiKey, embySettings.AdministratorId, embySettings.FullUri);
episodeList.Add(epInfo.EpisodeInformation);
Thread.Sleep(200); // Let's not try and overload the server
}
item.EpisodeInformation = episodeList;
} }
info.Add(new EmbyRecentlyAddedModel catch (JsonReaderException)
{ {
EmbyContent = t, Log.Error(
EmbyInformation = i, "Failed getting episode information, we may have overloaded Emby's api... Waiting and we will skip this one and go to the next");
EpisodeInformation = episodeList Thread.Sleep(500);
}); }
} }
info.Add(item);
} }
GenerateTvHtml(info, sb); GenerateTvHtml(info, sb);
newsletter.TvCount = info.Count; newsletter.TvCount = info.Count;
var template = new RecentlyAddedTemplate(); var template = new RecentlyAddedTemplate();
var html = template.LoadTemplate(sb.ToString()); var html = template.LoadTemplate(sb.ToString());
Log.Debug("Loaded the template"); Log.Debug("Loaded the template");
@ -183,10 +196,12 @@ namespace Ombi.Services.Jobs.RecentlyAddedNewsletter
} }
} }
var escapedHtml = new string(html.Where(c => !char.IsControl(c)).ToArray()); var escapedHtml = new string(html.Where(c => !char.IsControl(c)).ToArray());
Log.Debug(escapedHtml); Log.Debug(escapedHtml);
newsletter.Html = escapedHtml; newsletter.Html = escapedHtml;
return newsletter; return newsletter;
} }
private void GenerateMovieHtml(IEnumerable<EmbyRecentlyAddedModel> recentlyAddedMovies, StringBuilder sb) private void GenerateMovieHtml(IEnumerable<EmbyRecentlyAddedModel> recentlyAddedMovies, StringBuilder sb)
@ -276,11 +291,12 @@ namespace Ombi.Services.Jobs.RecentlyAddedNewsletter
{ {
var seriesItem = t.EmbyInformation.SeriesInformation; var seriesItem = t.EmbyInformation.SeriesInformation;
var relatedEpisodes = t.EpisodeInformation; var relatedEpisodes = t.EpisodeInformation;
var endLoop = false;
try try
{ {
var info = TvApi.ShowLookupByTheTvDbId(int.Parse(seriesItem.ProviderIds.Tvdb)); var info = TvApi.ShowLookupByTheTvDbId(int.Parse(seriesItem.ProviderIds.Tvdb));
if(info == null)continue;
var banner = info.image?.original; var banner = info.image?.original;
if (!string.IsNullOrEmpty(banner)) if (!string.IsNullOrEmpty(banner))
@ -299,30 +315,33 @@ namespace Ombi.Services.Jobs.RecentlyAddedNewsletter
Header(sb, 3, title); Header(sb, 3, title);
EndTag(sb, "a"); EndTag(sb, "a");
var results = relatedEpisodes.GroupBy(p => p.ParentIndexNumber, if (relatedEpisodes != null)
(key, g) => new
{
ParentIndexNumber = key,
IndexNumber = g.ToList()
}
);
// Group the episodes
foreach (var embyEpisodeInformation in results.OrderBy(x => x.ParentIndexNumber))
{ {
var epSb = new StringBuilder(); var results = relatedEpisodes.GroupBy(p => p.ParentIndexNumber,
for (var i = 0; i < embyEpisodeInformation.IndexNumber.Count; i++) (key, g) => new
{
var ep = embyEpisodeInformation.IndexNumber[i];
if (i < embyEpisodeInformation.IndexNumber.Count)
{ {
epSb.Append($"{ep.IndexNumber},"); ParentIndexNumber = key,
IndexNumber = g.ToList()
} }
else );
// Group the episodes
foreach (var embyEpisodeInformation in results.OrderBy(x => x.ParentIndexNumber))
{
var epSb = new StringBuilder();
for (var i = 0; i < embyEpisodeInformation.IndexNumber.Count; i++)
{ {
epSb.Append(ep); var ep = embyEpisodeInformation.IndexNumber[i];
if (i < embyEpisodeInformation.IndexNumber.Count)
{
epSb.Append($"{ep.IndexNumber},");
}
else
{
epSb.Append(ep);
}
} }
AddParagraph(sb, $"Season: {embyEpisodeInformation.ParentIndexNumber}, Episode: {epSb}");
} }
AddParagraph(sb, $"Season: {embyEpisodeInformation.ParentIndexNumber}, Episode: {epSb}");
} }
if (info.genres.Any()) if (info.genres.Any())
@ -331,6 +350,7 @@ namespace Ombi.Services.Jobs.RecentlyAddedNewsletter
} }
AddParagraph(sb, string.IsNullOrEmpty(seriesItem.Overview) ? info.summary : seriesItem.Overview); AddParagraph(sb, string.IsNullOrEmpty(seriesItem.Overview) ? info.summary : seriesItem.Overview);
endLoop = true;
} }
catch (Exception e) catch (Exception e)
{ {
@ -338,7 +358,8 @@ namespace Ombi.Services.Jobs.RecentlyAddedNewsletter
} }
finally finally
{ {
EndLoopHtml(sb); if(endLoop)
EndLoopHtml(sb);
} }
} }
sb.Append("</table><br /><br />"); sb.Append("</table><br /><br />");

@ -32,7 +32,9 @@
<div class="form-group"> <div class="form-group">
<div> <div>
<button id="recentlyAddedBtn" class="btn btn-primary-outline">Send test email to Admin <div id="testEmailSpinner"></div></button>
<button id="recentlyAddedBtn" class="btn btn-primary-outline">Send test email to Admin @Html.ToolTip("Note: nothing will send if there is no new content...")
<div id="testEmailSpinner"></div></button>
</div> </div>
</div> </div>
@ -84,6 +86,8 @@
$('#recentlyAddedBtn').click(function (e) { $('#recentlyAddedBtn').click(function (e) {
e.preventDefault(); e.preventDefault();
generateNotify("This could take some time depending on if you have episode searching enabled and also how many new items have been added!", "info");
var base = '@Html.GetBaseUrl()'; var base = '@Html.GetBaseUrl()';
var url = createBaseUrl(base, '/admin/testnewsletteradminemail'); var url = createBaseUrl(base, '/admin/testnewsletteradminemail');
$('#testEmailSpinner').attr("class", "fa fa-spinner fa-spin"); $('#testEmailSpinner').attr("class", "fa fa-spinner fa-spin");
@ -94,11 +98,11 @@
success: function (response) { success: function (response) {
if (response) { if (response) {
generateNotify(response.message, "success"); generateNotify(response.message, "success");
$('#testSendMassEmailSpinner').attr("class", "fa fa-check"); $('#testEmailSpinner').attr("class", "fa fa-check");
} else { } else {
generateNotify(response.message, "danger"); generateNotify(response.message, "danger");
$('#testSendMassEmailSpinner').attr("class", "fa fa-times"); $('#testEmailSpinner').attr("class", "fa fa-times");
} }
}, },
error: function (e) { error: function (e) {

Loading…
Cancel
Save