diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-02-19 23:53:15 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-02-19 23:53:15 -0500 |
| commit | 13e4b2a6a76df957a85e444822c816b42f2bb60c (patch) | |
| tree | 35140e9b5447937ad70744c6605b9c890cb342a2 /MediaBrowser.Providers | |
| parent | 120c8bcbb9381086bf9171eae1ba2df9b3c11bde (diff) | |
add search methods to remote metadata providers
Diffstat (limited to 'MediaBrowser.Providers')
19 files changed, 267 insertions, 50 deletions
diff --git a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs b/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs index beb8fe887..bc29bad34 100644 --- a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs +++ b/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs @@ -7,6 +7,7 @@ using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Providers; using MediaBrowser.Model.Serialization; using MediaBrowser.Providers.Movies; using System; @@ -42,6 +43,11 @@ namespace MediaBrowser.Providers.BoxSets Current = this; } + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(BoxSetInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + public async Task<MetadataResult<BoxSet>> GetMetadata(BoxSetInfo id, CancellationToken cancellationToken) { var tmdbId = id.GetProviderId(MetadataProviders.Tmdb); @@ -282,5 +288,10 @@ namespace MediaBrowser.Providers.BoxSets public List<Part> parts { get; set; } public Images images { get; set; } } + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } } } diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index a961be960..f584c40fa 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -586,7 +586,7 @@ namespace MediaBrowser.Providers.Manager } } - public async Task<IEnumerable<SearchResult<TLookupType>>> GetRemoteSearchResults<TItemType, TLookupType>(RemoteSearchQuery<TLookupType> searchInfo, + public async Task<IEnumerable<RemoteSearchResult>> GetRemoteSearchResults<TItemType, TLookupType>(RemoteSearchQuery<TLookupType> searchInfo, CancellationToken cancellationToken) where TItemType : BaseItem, new() where TLookupType : ItemLookupInfo @@ -623,7 +623,7 @@ namespace MediaBrowser.Providers.Manager } // Nothing found - return new List<SearchResult<TLookupType>>(); + return new List<RemoteSearchResult>(); } } }
\ No newline at end of file diff --git a/MediaBrowser.Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Providers/Movies/MovieDbProvider.cs index 2dc65e620..2f1c5cf18 100644 --- a/MediaBrowser.Providers/Movies/MovieDbProvider.cs +++ b/MediaBrowser.Providers/Movies/MovieDbProvider.cs @@ -1,5 +1,4 @@ -using System.Linq; -using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Configuration; using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; @@ -9,10 +8,12 @@ using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Providers; using MediaBrowser.Model.Serialization; using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -45,6 +46,11 @@ namespace MediaBrowser.Providers.Movies Current = this; } + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(MovieInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + public Task<MetadataResult<Movie>> GetMetadata(MovieInfo info, CancellationToken cancellationToken) { return GetItemMetadata<Movie>(info, cancellationToken); @@ -549,5 +555,10 @@ namespace MediaBrowser.Providers.Movies return 1; } } + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } } } diff --git a/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs b/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs index 0ad19840e..8c981e2d8 100644 --- a/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs +++ b/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs @@ -1,6 +1,9 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Providers; using System; +using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -13,6 +16,11 @@ namespace MediaBrowser.Providers.Movies return MovieDbProvider.Current.GetItemMetadata<Trailer>(info, cancellationToken); } + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(TrailerInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + public string Name { get { return MovieDbProvider.Current.Name; } @@ -31,5 +39,10 @@ namespace MediaBrowser.Providers.Movies return 1; } } + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } } } diff --git a/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs b/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs index 20f4af52c..a9b3d8e11 100644 --- a/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs +++ b/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs @@ -5,6 +5,7 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Providers; using MediaBrowser.Model.Serialization; using System; using System.Collections.Generic; @@ -15,7 +16,7 @@ using System.Threading.Tasks; namespace MediaBrowser.Providers.Music { - public class AudioDbAlbumProvider : IRemoteMetadataProvider<MusicAlbum,AlbumInfo>, IHasOrder + public class AudioDbAlbumProvider : IRemoteMetadataProvider<MusicAlbum, AlbumInfo>, IHasOrder { private readonly IServerConfigurationManager _config; private readonly IFileSystem _fileSystem; @@ -36,6 +37,11 @@ namespace MediaBrowser.Providers.Music Current = this; } + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(AlbumInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + public async Task<MetadataResult<MusicAlbum>> GetMetadata(AlbumInfo info, CancellationToken cancellationToken) { var result = new MetadataResult<MusicAlbum>(); @@ -81,7 +87,7 @@ namespace MediaBrowser.Providers.Music item.SetProviderId(MetadataProviders.MusicBrainzAlbumArtist, result.strMusicBrainzArtistID); item.SetProviderId(MetadataProviders.MusicBrainzReleaseGroup, result.strMusicBrainzID); } - + public string Name { get { return "TheAudioDB"; } @@ -112,7 +118,7 @@ namespace MediaBrowser.Providers.Music var url = AudioDbArtistProvider.BaseUrl + "/album-mb.php?i=" + musicBrainzReleaseGroupId; var path = GetAlbumInfoPath(_config.ApplicationPaths, musicBrainzReleaseGroupId); - + Directory.CreateDirectory(Path.GetDirectoryName(path)); using (var response = await _httpClient.Get(new HttpRequestOptions @@ -206,5 +212,10 @@ namespace MediaBrowser.Providers.Music { public List<Album> album { get; set; } } + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } } } diff --git a/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs b/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs index 00c5b94e0..665911618 100644 --- a/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs +++ b/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs @@ -5,6 +5,7 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Providers; using MediaBrowser.Model.Serialization; using System; using System.Collections.Generic; @@ -36,6 +37,11 @@ namespace MediaBrowser.Providers.Music Current = this; } + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(ArtistInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + public async Task<MetadataResult<MusicArtist>> GetMetadata(ArtistInfo info, CancellationToken cancellationToken) { var result = new MetadataResult<MusicArtist>(); @@ -213,5 +219,10 @@ namespace MediaBrowser.Providers.Music return 1; } } + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } } } diff --git a/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs b/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs index e1fd05a50..f7086d8e6 100644 --- a/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs +++ b/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs @@ -4,6 +4,7 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Providers; using MediaBrowser.Model.Serialization; using MoreLinq; using System; @@ -32,6 +33,11 @@ namespace MediaBrowser.Providers.Music _logger = logger; } + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(AlbumInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + public async Task<MetadataResult<MusicAlbum>> GetMetadata(AlbumInfo id, CancellationToken cancellationToken) { var result = new MetadataResult<MusicAlbum>(); @@ -204,6 +210,11 @@ namespace MediaBrowser.Providers.Music return 2; } } + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } } #region Result Objects diff --git a/MediaBrowser.Providers/Music/LastfmArtistProvider.cs b/MediaBrowser.Providers/Music/LastfmArtistProvider.cs index b52185ccc..a50e5f9d5 100644 --- a/MediaBrowser.Providers/Music/LastfmArtistProvider.cs +++ b/MediaBrowser.Providers/Music/LastfmArtistProvider.cs @@ -5,8 +5,10 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Providers; using MediaBrowser.Model.Serialization; using System; +using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; @@ -38,6 +40,11 @@ namespace MediaBrowser.Providers.Music _logger = logger; } + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(ArtistInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + public async Task<MetadataResult<MusicArtist>> GetMetadata(ArtistInfo id, CancellationToken cancellationToken) { var result = new MetadataResult<MusicArtist>(); @@ -170,5 +177,10 @@ namespace MediaBrowser.Providers.Music return 2; } } + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } } } diff --git a/MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs b/MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs index 99fe5c38d..55dcc99f5 100644 --- a/MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs +++ b/MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs @@ -1,8 +1,10 @@ -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Providers; using MediaBrowser.Providers.Movies; using System; +using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -15,6 +17,11 @@ namespace MediaBrowser.Providers.Music return MovieDbProvider.Current.GetItemMetadata<MusicVideo>(info, cancellationToken); } + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(MusicVideoInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + public string Name { get { return MovieDbProvider.Current.Name; } @@ -24,5 +31,10 @@ namespace MediaBrowser.Providers.Music { return MovieDbProvider.Current.HasChanged(item, date); } + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } } } diff --git a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs index 1a3860dab..43ee7bdbc 100644 --- a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs +++ b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs @@ -3,7 +3,9 @@ using MediaBrowser.Common.Net; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Providers; using System; +using System.Collections.Generic; using System.IO; using System.Net; using System.Text; @@ -27,6 +29,11 @@ namespace MediaBrowser.Providers.Music Current = this; } + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(AlbumInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + public async Task<MetadataResult<MusicAlbum>> GetMetadata(AlbumInfo id, CancellationToken cancellationToken) { var releaseId = id.GetReleaseId(); @@ -232,5 +239,10 @@ namespace MediaBrowser.Providers.Music { get { return 0; } } + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } } } diff --git a/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs index 3c45a7a48..7c0233d3e 100644 --- a/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs +++ b/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs @@ -1,7 +1,10 @@ -using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Providers; using System; +using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Net; @@ -14,6 +17,11 @@ namespace MediaBrowser.Providers.Music { public class MusicBrainzArtistProvider : IRemoteMetadataProvider<MusicArtist, ArtistInfo> { + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(ArtistInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + public async Task<MetadataResult<MusicArtist>> GetMetadata(ArtistInfo id, CancellationToken cancellationToken) { var result = new MetadataResult<MusicArtist>(); @@ -115,5 +123,10 @@ namespace MediaBrowser.Providers.Music { get { return "MusicBrainz"; } } + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } } } diff --git a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs index 3f30626ff..f1cfebcea 100644 --- a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs @@ -5,11 +5,12 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Providers; using MediaBrowser.Model.Serialization; using MediaBrowser.Providers.Movies; using MediaBrowser.Providers.TV; using System; -using System.Globalization; +using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -29,6 +30,21 @@ namespace MediaBrowser.Providers.Omdb _logger = logger; } + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(SeriesInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(TrailerInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(MovieInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + public string Name { get { return "IMDb via The Open Movie Database"; } @@ -139,5 +155,10 @@ namespace MediaBrowser.Providers.Omdb return new Tuple<string, string>(imdb, tvdb); } + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } } } diff --git a/MediaBrowser.Providers/People/MovieDbPersonProvider.cs b/MediaBrowser.Providers/People/MovieDbPersonProvider.cs index 5691190dc..792c9e910 100644 --- a/MediaBrowser.Providers/People/MovieDbPersonProvider.cs +++ b/MediaBrowser.Providers/People/MovieDbPersonProvider.cs @@ -6,6 +6,7 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Providers; using MediaBrowser.Model.Serialization; using MediaBrowser.Providers.Movies; using System; @@ -42,7 +43,7 @@ namespace MediaBrowser.Providers.People get { return "TheMovieDb"; } } - public async Task<IEnumerable<SearchResult<PersonLookupInfo>>> GetSearchResults(PersonLookupInfo searchInfo, CancellationToken cancellationToken) + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(PersonLookupInfo searchInfo, CancellationToken cancellationToken) { var tmdbId = searchInfo.GetProviderId(MetadataProviders.Tmdb); @@ -59,18 +60,15 @@ namespace MediaBrowser.Providers.People var images = (info.images ?? new Images()).profiles ?? new List<Profile>(); - var result = new SearchResult<PersonLookupInfo> + var result = new RemoteSearchResult { - Item = new PersonLookupInfo - { - Name = info.name - }, + Name = info.name, ImageUrl = images.Count == 0 ? null : (tmdbImageUrl + images[0].file_path) }; - result.Item.SetProviderId(MetadataProviders.Tmdb, info.id.ToString(_usCulture)); - result.Item.SetProviderId(MetadataProviders.Imdb, info.imdb_id.ToString(_usCulture)); + result.SetProviderId(MetadataProviders.Tmdb, info.id.ToString(_usCulture)); + result.SetProviderId(MetadataProviders.Imdb, info.imdb_id.ToString(_usCulture)); return new[] { result }; } @@ -92,19 +90,16 @@ namespace MediaBrowser.Providers.People } } - private SearchResult<PersonLookupInfo> GetSearchResult(PersonSearchResult i, string baseImageUrl) + private RemoteSearchResult GetSearchResult(PersonSearchResult i, string baseImageUrl) { - var result = new SearchResult<PersonLookupInfo> + var result = new RemoteSearchResult { - Item = new PersonLookupInfo - { - Name = i.Name - }, + Name = i.Name, ImageUrl = string.IsNullOrEmpty(i.Profile_Path) ? null : (baseImageUrl + i.Profile_Path) }; - result.Item.SetProviderId(MetadataProviders.Tmdb, i.Id.ToString(_usCulture)); + result.SetProviderId(MetadataProviders.Tmdb, i.Id.ToString(_usCulture)); return result; } @@ -175,7 +170,7 @@ namespace MediaBrowser.Providers.People { var results = await GetSearchResults(info, cancellationToken).ConfigureAwait(false); - return results.Select(i => i.Item.GetProviderId(MetadataProviders.Tmdb)).FirstOrDefault(); + return results.Select(i => i.GetProviderId(MetadataProviders.Tmdb)).FirstOrDefault(); } internal async Task EnsurePersonInfo(string id, CancellationToken cancellationToken) @@ -351,5 +346,10 @@ namespace MediaBrowser.Providers.People } #endregion + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } } } diff --git a/MediaBrowser.Providers/TV/FanartSeriesProvider.cs b/MediaBrowser.Providers/TV/FanartSeriesProvider.cs index 5f9754e4a..b640e373b 100644 --- a/MediaBrowser.Providers/TV/FanartSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/FanartSeriesProvider.cs @@ -367,22 +367,32 @@ namespace MediaBrowser.Providers.TV return Path.Combine(dataPath, "fanart.xml"); } - private readonly Task _cachedTask = Task.FromResult(true); - internal Task EnsureSeriesXml(string tvdbId, CancellationToken cancellationToken) + private readonly SemaphoreSlim _ensureSemaphore = new SemaphoreSlim(1, 1); + internal async Task EnsureSeriesXml(string tvdbId, CancellationToken cancellationToken) { - var xmlPath = GetSeriesDataPath(_config.ApplicationPaths, tvdbId); + var xmlPath = GetFanartXmlPath(tvdbId); - var fileInfo = _fileSystem.GetFileSystemInfo(xmlPath); + // Only allow one thread in here at a time since every season will be calling this method, possibly concurrently + await _ensureSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false); - if (fileInfo.Exists) + try { - if ((DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7) + var fileInfo = _fileSystem.GetFileSystemInfo(xmlPath); + + if (fileInfo.Exists) { - return _cachedTask; + if ((DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7) + { + return; + } } - } - return DownloadSeriesXml(tvdbId, cancellationToken); + await DownloadSeriesXml(tvdbId, cancellationToken).ConfigureAwait(false); + } + finally + { + _ensureSemaphore.Release(); + } } /// <summary> diff --git a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs index fafd82948..f4191fe8f 100644 --- a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -20,13 +21,15 @@ namespace MediaBrowser.Providers.TV { private readonly IServerConfigurationManager _config; private readonly ILogger _logger; + private readonly ILibraryManager _libraryManager; private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); - public MissingEpisodeProvider(ILogger logger, IServerConfigurationManager config) + public MissingEpisodeProvider(ILogger logger, IServerConfigurationManager config, ILibraryManager libraryManager) { _logger = logger; _config = config; + _libraryManager = libraryManager; } public async Task Run(IEnumerable<IGrouping<string, Series>> series, CancellationToken cancellationToken) @@ -268,7 +271,7 @@ namespace MediaBrowser.Providers.TV { _logger.Info("Removing missing/unaired episode {0} {1}x{2}", episodeToRemove.Series.Name, episodeToRemove.ParentIndexNumber, episodeToRemove.IndexNumber); - await episodeToRemove.Parent.RemoveChild(episodeToRemove, cancellationToken).ConfigureAwait(false); + await _libraryManager.DeleteItem(episodeToRemove).ConfigureAwait(false); hasChanges = true; } @@ -327,7 +330,7 @@ namespace MediaBrowser.Providers.TV { _logger.Info("Removing virtual season {0} {1}", seasonToRemove.Series.Name, seasonToRemove.IndexNumber); - await seasonToRemove.Parent.RemoveChild(seasonToRemove, cancellationToken).ConfigureAwait(false); + await _libraryManager.DeleteItem(seasonToRemove).ConfigureAwait(false); hasChanges = true; } diff --git a/MediaBrowser.Providers/TV/MovieDbSeriesProvider.cs b/MediaBrowser.Providers/TV/MovieDbSeriesProvider.cs index 5b7679e74..165f901ea 100644 --- a/MediaBrowser.Providers/TV/MovieDbSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/MovieDbSeriesProvider.cs @@ -8,15 +8,16 @@ using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Providers; using MediaBrowser.Model.Serialization; using MediaBrowser.Providers.Movies; using System; using System.Collections.Generic; using System.Globalization; using System.IO; +using System.Linq; using System.Threading; using System.Threading.Tasks; -using System.Linq; namespace MediaBrowser.Providers.TV { @@ -48,6 +49,11 @@ namespace MediaBrowser.Providers.TV get { return "TheMovieDb"; } } + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(SeriesInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + public async Task<MetadataResult<Series>> GetMetadata(SeriesInfo info, CancellationToken cancellationToken) { var result = new MetadataResult<Series>(); @@ -453,5 +459,10 @@ namespace MediaBrowser.Providers.TV return 2; } } + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } } } diff --git a/MediaBrowser.Providers/TV/SeriesPostScanTask.cs b/MediaBrowser.Providers/TV/SeriesPostScanTask.cs index 6ba9b4cdc..8c9b8672c 100644 --- a/MediaBrowser.Providers/TV/SeriesPostScanTask.cs +++ b/MediaBrowser.Providers/TV/SeriesPostScanTask.cs @@ -45,7 +45,7 @@ namespace MediaBrowser.Providers.TV group series by tvdbId into g select g; - await new MissingEpisodeProvider(_logger, _config).Run(seriesGroups, cancellationToken).ConfigureAwait(false); + await new MissingEpisodeProvider(_logger, _config, _libraryManager).Run(seriesGroups, cancellationToken).ConfigureAwait(false); var numComplete = 0; diff --git a/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs index fd77b9b87..08d21ab39 100644 --- a/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs @@ -1,9 +1,11 @@ using MediaBrowser.Common.IO; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Providers; using System; using System.Collections.Generic; using System.Globalization; @@ -34,17 +36,54 @@ namespace MediaBrowser.Providers.TV Current = this; } + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(EpisodeInfo searchInfo, CancellationToken cancellationToken) + { + var list = new List<RemoteSearchResult>(); + + string seriesTvdbId; + searchInfo.SeriesProviderIds.TryGetValue(MetadataProviders.Tvdb.ToString(), out seriesTvdbId); + + if (!string.IsNullOrEmpty(seriesTvdbId)) + { + var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, seriesTvdbId); + + try + { + var item = FetchEpisodeData(searchInfo, seriesDataPath, cancellationToken); + + if (item != null) + { + list.Add(new RemoteSearchResult + { + IndexNumber = item.IndexNumber, + Name = item.Name, + ParentIndexNumber = item.ParentIndexNumber, + PremiereDate = item.PremiereDate, + ProductionYear = item.ProductionYear, + ProviderIds = item.ProviderIds, + SearchProviderName = Name, + IndexNumberEnd = item.IndexNumberEnd + }); + } + } + catch (FileNotFoundException) + { + // Don't fail the provider because this will just keep on going and going. + } + } + + return list; + } + public string Name { get { return "TheTVDB"; } } - public Task<MetadataResult<Episode>> GetMetadata(EpisodeInfo id, CancellationToken cancellationToken) + public Task<MetadataResult<Episode>> GetMetadata(EpisodeInfo searchInfo, CancellationToken cancellationToken) { - var episodeId = id; - string seriesTvdbId; - episodeId.SeriesProviderIds.TryGetValue(MetadataProviders.Tvdb.ToString(), out seriesTvdbId); + searchInfo.SeriesProviderIds.TryGetValue(MetadataProviders.Tvdb.ToString(), out seriesTvdbId); var result = new MetadataResult<Episode>(); @@ -54,7 +93,7 @@ namespace MediaBrowser.Providers.TV try { - result.Item = FetchEpisodeData(episodeId, seriesDataPath, cancellationToken); + result.Item = FetchEpisodeData(searchInfo, seriesDataPath, cancellationToken); result.HasMetadata = result.Item != null; } catch (FileNotFoundException) @@ -192,9 +231,9 @@ namespace MediaBrowser.Providers.TV var episode = new Episode { - IndexNumber = id.IndexNumber, - ParentIndexNumber = id.ParentIndexNumber, - IndexNumberEnd = id.IndexNumberEnd + IndexNumber = id.IndexNumber, + ParentIndexNumber = id.ParentIndexNumber, + IndexNumberEnd = id.IndexNumberEnd }; try @@ -674,5 +713,10 @@ namespace MediaBrowser.Providers.TV } } } + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } } } diff --git a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs index c0ebd4a65..920da9b10 100644 --- a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs @@ -9,6 +9,7 @@ using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Providers; using System; using System.Collections.Generic; using System.Globalization; @@ -47,6 +48,11 @@ namespace MediaBrowser.Providers.TV private const string SeriesQuery = "GetSeries.php?seriesname={0}"; private const string SeriesGetZip = "http://www.thetvdb.com/api/{0}/series/{1}/all/{2}.zip"; + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(SeriesInfo searchInfo, CancellationToken cancellationToken) + { + return new List<RemoteSearchResult>(); + } + public async Task<MetadataResult<Series>> GetMetadata(SeriesInfo itemId, CancellationToken cancellationToken) { var result = new MetadataResult<Series>(); @@ -1081,5 +1087,10 @@ namespace MediaBrowser.Providers.TV return 1; } } + + public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } } } |
