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