@ -15,6 +15,7 @@ using System.Threading;
using System.Threading.Tasks ;
using System.Xml ;
using CommonIO ;
using MediaBrowser.Controller.Entities ;
namespace MediaBrowser.Providers.TV
{
@ -89,7 +90,7 @@ namespace MediaBrowser.Providers.TV
var path = TvdbSeriesProvider . GetSeriesDataPath ( _config . CommonApplicationPaths ) ;
_fileSystem . CreateDirectory ( path ) ;
_fileSystem . CreateDirectory ( path ) ;
var timestampFile = Path . Combine ( path , "time.txt" ) ;
@ -102,7 +103,7 @@ namespace MediaBrowser.Providers.TV
}
// Find out the last time we queried tvdb for updates
var lastUpdateTime = timestampFileInfo . Exists ? _fileSystem . ReadAllText ( timestampFile , Encoding . UTF8 ) : string . Empty ;
var lastUpdateTime = timestampFileInfo . Exists ? _fileSystem . ReadAllText ( timestampFile , Encoding . UTF8 ) : string . Empty ;
string newUpdateTime ;
@ -110,15 +111,21 @@ namespace MediaBrowser.Providers.TV
. Select ( Path . GetFileName )
. ToList ( ) ;
var seriesIdsInLibrary = _libraryManager . RootFolder
. GetRecursiveChildren ( i = > i is Series & & ! string . IsNullOrEmpty ( i . GetProviderId ( MetadataProviders . Tvdb ) ) )
. Cast < Series > ( )
var seriesList = _libraryManager . GetItemList ( new InternalItemsQuery ( )
{
IncludeItemTypes = new [ ] { typeof ( Series ) . Name } ,
Recursive = true ,
GroupByPresentationUniqueKey = false
} ) . Cast < Series > ( ) ;
var seriesIdsInLibrary = seriesList
. Where ( i = > ! string . IsNullOrEmpty ( i . GetProviderId ( MetadataProviders . Tvdb ) ) )
. Select ( i = > i . GetProviderId ( MetadataProviders . Tvdb ) )
. ToList ( ) ;
var missingSeries = seriesIdsInLibrary . Except ( existingDirectories , StringComparer . OrdinalIgnoreCase )
. ToList ( ) ;
// If this is our first time, update all series
if ( string . IsNullOrEmpty ( lastUpdateTime ) )
{
@ -157,7 +164,7 @@ namespace MediaBrowser.Providers.TV
await UpdateSeries ( listToUpdate , path , nullableUpdateValue , progress , cancellationToken ) . ConfigureAwait ( false ) ;
}
_fileSystem . WriteAllText ( timestampFile , newUpdateTime , Encoding . UTF8 ) ;
_fileSystem . WriteAllText ( timestampFile , newUpdateTime , Encoding . UTF8 ) ;
progress . Report ( 100 ) ;
}
@ -300,10 +307,17 @@ namespace MediaBrowser.Providers.TV
var list = seriesIds . ToList ( ) ;
var numComplete = 0 ;
var seriesList = _libraryManager . GetItemList ( new InternalItemsQuery ( )
{
IncludeItemTypes = new [ ] { typeof ( Series ) . Name } ,
Recursive = true ,
GroupByPresentationUniqueKey = false
} ) . Cast < Series > ( ) ;
// Gather all series into a lookup by tvdb id
var allSeries = _libraryManager . RootFolder
. GetRecursiveChildren ( i = > i is Series & & ! string . IsNullOrEmpty ( i . GetProviderId ( MetadataProviders . Tvdb ) ) )
. Cast < Series > ( )
var allSeries = seriesList
. Where ( i = > ! string . IsNullOrEmpty ( i . GetProviderId ( MetadataProviders . Tvdb ) ) )
. ToLookup ( i = > i . GetProviderId ( MetadataProviders . Tvdb ) ) ;
foreach ( var seriesId in list )
@ -323,7 +337,7 @@ namespace MediaBrowser.Providers.TV
catch ( HttpException ex )
{
_logger . ErrorException ( "Error updating tvdb series id {0}, language {1}" , ex , seriesId , language ) ;
// Already logged at lower levels, but don't fail the whole operation, unless timed out
// We have to fail this to make it run again otherwise new episode data could potentially be missing
if ( ex . IsTimedOut )
@ -357,7 +371,7 @@ namespace MediaBrowser.Providers.TV
seriesDataPath = Path . Combine ( seriesDataPath , id ) ;
_fileSystem . CreateDirectory ( seriesDataPath ) ;
_fileSystem . CreateDirectory ( seriesDataPath ) ;
return TvdbSeriesProvider . Current . DownloadSeriesZip ( id , MetadataProviders . Tvdb . ToString ( ) , seriesDataPath , lastTvDbUpdateTime , preferredMetadataLanguage , cancellationToken ) ;
}