aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-02-19 23:53:15 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-02-19 23:53:15 -0500
commit13e4b2a6a76df957a85e444822c816b42f2bb60c (patch)
tree35140e9b5447937ad70744c6605b9c890cb342a2 /MediaBrowser.Providers
parent120c8bcbb9381086bf9171eae1ba2df9b3c11bde (diff)
add search methods to remote metadata providers
Diffstat (limited to 'MediaBrowser.Providers')
-rw-r--r--MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs11
-rw-r--r--MediaBrowser.Providers/Manager/ProviderManager.cs4
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbProvider.cs15
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs15
-rw-r--r--MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs17
-rw-r--r--MediaBrowser.Providers/Music/AudioDbArtistProvider.cs11
-rw-r--r--MediaBrowser.Providers/Music/LastfmAlbumProvider.cs11
-rw-r--r--MediaBrowser.Providers/Music/LastfmArtistProvider.cs12
-rw-r--r--MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs16
-rw-r--r--MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs12
-rw-r--r--MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs15
-rw-r--r--MediaBrowser.Providers/Omdb/OmdbItemProvider.cs23
-rw-r--r--MediaBrowser.Providers/People/MovieDbPersonProvider.cs32
-rw-r--r--MediaBrowser.Providers/TV/FanartSeriesProvider.cs28
-rw-r--r--MediaBrowser.Providers/TV/MissingEpisodeProvider.cs9
-rw-r--r--MediaBrowser.Providers/TV/MovieDbSeriesProvider.cs13
-rw-r--r--MediaBrowser.Providers/TV/SeriesPostScanTask.cs2
-rw-r--r--MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs60
-rw-r--r--MediaBrowser.Providers/TV/TvdbSeriesProvider.cs11
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();
+ }
}
}