aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-10-27 14:30:20 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-10-27 14:30:20 -0400
commit099b4d3e5b617a9e1fcff689fb1f81290641840d (patch)
tree7f12f04c940c5c0b9a4edaa270149e67b8151c8c
parent872aec9352d1e9aebf2c6f6722ff23a8aebb39a8 (diff)
update providers to use core interfaces
-rw-r--r--MediaBrowser.Providers/ImagesByName/ImageUtils.cs23
-rw-r--r--MediaBrowser.Providers/Manager/ImageSaver.cs17
-rw-r--r--MediaBrowser.Providers/Manager/ItemImageProvider.cs8
-rw-r--r--MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs4
-rw-r--r--MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs2
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbImageProvider.cs7
-rw-r--r--MediaBrowser.Providers/People/MovieDbPersonProvider.cs2
-rw-r--r--MediaBrowser.Providers/People/TvdbPersonImageProvider.cs67
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs198
9 files changed, 205 insertions, 123 deletions
diff --git a/MediaBrowser.Providers/ImagesByName/ImageUtils.cs b/MediaBrowser.Providers/ImagesByName/ImageUtils.cs
index a433a2fb8..bbcbbda90 100644
--- a/MediaBrowser.Providers/ImagesByName/ImageUtils.cs
+++ b/MediaBrowser.Providers/ImagesByName/ImageUtils.cs
@@ -70,23 +70,26 @@ namespace MediaBrowser.Providers.ImagesByName
.Replace("/", string.Empty);
}
- public static IEnumerable<string> GetAvailableImages(string file)
+ public static IEnumerable<string> GetAvailableImages(string file, IFileSystem fileSystem)
{
- using (var reader = new StreamReader(file))
+ using (var fileStream = fileSystem.GetFileStream(file, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
{
- var lines = new List<string>();
-
- while (!reader.EndOfStream)
+ using (var reader = new StreamReader(fileStream))
{
- var text = reader.ReadLine();
+ var lines = new List<string>();
- if (!string.IsNullOrWhiteSpace(text))
+ while (!reader.EndOfStream)
{
- lines.Add(text);
+ var text = reader.ReadLine();
+
+ if (!string.IsNullOrWhiteSpace(text))
+ {
+ lines.Add(text);
+ }
}
- }
- return lines;
+ return lines;
+ }
}
}
}
diff --git a/MediaBrowser.Providers/Manager/ImageSaver.cs b/MediaBrowser.Providers/Manager/ImageSaver.cs
index b8b2042bf..d4bfad174 100644
--- a/MediaBrowser.Providers/Manager/ImageSaver.cs
+++ b/MediaBrowser.Providers/Manager/ImageSaver.cs
@@ -174,14 +174,14 @@ namespace MediaBrowser.Providers.Manager
try
{
- var currentFile = new FileInfo(currentPath);
+ var currentFile = _fileSystem.GetFileInfo(currentPath);
// This will fail if the file is hidden
if (currentFile.Exists)
{
- if ((currentFile.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
+ if (currentFile.IsHidden)
{
- currentFile.Attributes &= ~FileAttributes.Hidden;
+ _fileSystem.SetHidden(currentFile.FullName, false);
}
_fileSystem.DeleteFile(currentFile.FullName);
@@ -256,14 +256,14 @@ namespace MediaBrowser.Providers.Manager
_fileSystem.CreateDirectory(Path.GetDirectoryName(path));
// If the file is currently hidden we'll have to remove that or the save will fail
- var file = new FileInfo(path);
+ var file = _fileSystem.GetFileInfo(path);
// This will fail if the file is hidden
if (file.Exists)
{
- if ((file.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
+ if (file.IsHidden)
{
- file.Attributes &= ~FileAttributes.Hidden;
+ _fileSystem.SetHidden(file.FullName, false);
}
}
@@ -275,10 +275,7 @@ namespace MediaBrowser.Providers.Manager
if (_config.Configuration.SaveMetadataHidden)
{
- file.Refresh();
-
- // Add back the attribute
- file.Attributes |= FileAttributes.Hidden;
+ _fileSystem.SetHidden(file.FullName, true);
}
}
finally
diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
index 8de56109a..e9a675b0a 100644
--- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs
+++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
@@ -372,14 +372,14 @@ namespace MediaBrowser.Providers.Manager
}
// Delete the source file
- var currentFile = new FileInfo(image.Path);
+ var currentFile = _fileSystem.GetFileInfo(image.Path);
// Deletion will fail if the file is hidden so remove the attribute first
if (currentFile.Exists)
{
- if ((currentFile.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
+ if (currentFile.IsHidden)
{
- currentFile.Attributes &= ~FileAttributes.Hidden;
+ _fileSystem.SetHidden(currentFile.FullName, false);
}
_fileSystem.DeleteFile(currentFile.FullName);
@@ -613,7 +613,7 @@ namespace MediaBrowser.Providers.Manager
{
try
{
- if (item.GetImages(imageType).Any(i => new FileInfo(i.Path).Length == response.ContentLength.Value))
+ if (item.GetImages(imageType).Any(i => _fileSystem.GetFileInfo(i.Path).Length == response.ContentLength.Value))
{
response.Content.Dispose();
continue;
diff --git a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs
index a2ba9ec2a..fee11d989 100644
--- a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs
+++ b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs
@@ -87,11 +87,11 @@ namespace MediaBrowser.Providers.MediaInfo
var tempFile = await _mediaEncoder.ExtractAudioImage(item.Path, imageStreamIndex, cancellationToken).ConfigureAwait(false);
- File.Copy(tempFile, path, true);
+ _fileSystem.CopyFile(tempFile, path, true);
try
{
- File.Delete(tempFile);
+ _fileSystem.DeleteFile(tempFile);
}
catch
{
diff --git a/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs b/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs
index 61783f8f8..cde7eda2f 100644
--- a/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs
+++ b/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs
@@ -118,7 +118,7 @@ namespace MediaBrowser.Providers.Movies
{
// No biggie. Don't blow up
}
- catch (DirectoryNotFoundException)
+ catch (IOException)
{
// No biggie. Don't blow up
}
diff --git a/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs b/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
index 49f341f26..f2e544d0a 100644
--- a/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
@@ -14,6 +14,7 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Movies
{
@@ -21,11 +22,13 @@ namespace MediaBrowser.Providers.Movies
{
private readonly IJsonSerializer _jsonSerializer;
private readonly IHttpClient _httpClient;
+ private readonly IFileSystem _fileSystem;
- public MovieDbImageProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient)
+ public MovieDbImageProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, IFileSystem fileSystem)
{
_jsonSerializer = jsonSerializer;
_httpClient = httpClient;
+ _fileSystem = fileSystem;
}
public string Name
@@ -196,7 +199,7 @@ namespace MediaBrowser.Providers.Movies
if (!string.IsNullOrEmpty(path))
{
- var fileInfo = new FileInfo(path);
+ var fileInfo = _fileSystem.GetFileInfo(path);
if (fileInfo.Exists)
{
diff --git a/MediaBrowser.Providers/People/MovieDbPersonProvider.cs b/MediaBrowser.Providers/People/MovieDbPersonProvider.cs
index 03d4950b2..caf9d5882 100644
--- a/MediaBrowser.Providers/People/MovieDbPersonProvider.cs
+++ b/MediaBrowser.Providers/People/MovieDbPersonProvider.cs
@@ -82,7 +82,7 @@ namespace MediaBrowser.Providers.People
};
result.SetProviderId(MetadataProviders.Tmdb, info.id.ToString(_usCulture));
- result.SetProviderId(MetadataProviders.Imdb, info.imdb_id.ToString(_usCulture));
+ result.SetProviderId(MetadataProviders.Imdb, info.imdb_id);
return new[] { result };
}
diff --git a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs b/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs
index 2d4d484e6..944078fc5 100644
--- a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs
+++ b/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs
@@ -15,6 +15,8 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Xml;
namespace MediaBrowser.Providers.People
{
@@ -23,12 +25,16 @@ namespace MediaBrowser.Providers.People
private readonly IServerConfigurationManager _config;
private readonly ILibraryManager _libraryManager;
private readonly IHttpClient _httpClient;
+ private readonly IFileSystem _fileSystem;
+ private readonly IXmlReaderSettingsFactory _xmlSettings;
- public TvdbPersonImageProvider(IServerConfigurationManager config, ILibraryManager libraryManager, IHttpClient httpClient)
+ public TvdbPersonImageProvider(IServerConfigurationManager config, ILibraryManager libraryManager, IHttpClient httpClient, IFileSystem fileSystem, IXmlReaderSettingsFactory xmlSettings)
{
_config = config;
_libraryManager = libraryManager;
_httpClient = httpClient;
+ _fileSystem = fileSystem;
+ _xmlSettings = xmlSettings;
}
public string Name
@@ -89,7 +95,7 @@ namespace MediaBrowser.Providers.People
{
return null;
}
- catch (DirectoryNotFoundException)
+ catch (IOException)
{
return null;
}
@@ -97,46 +103,47 @@ namespace MediaBrowser.Providers.People
private RemoteImageInfo GetImageInfo(string xmlFile, string personName, CancellationToken cancellationToken)
{
- var settings = new XmlReaderSettings
- {
- CheckCharacters = false,
- IgnoreProcessingInstructions = true,
- IgnoreComments = true,
- ValidationType = ValidationType.None
- };
+ var settings = _xmlSettings.Create(false);
- using (var streamReader = new StreamReader(xmlFile, Encoding.UTF8))
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
+
+ using (var fileStream = _fileSystem.GetFileStream(xmlFile, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
{
- // Use XmlReader for best performance
- using (var reader = XmlReader.Create(streamReader, settings))
+ using (var streamReader = new StreamReader(fileStream, Encoding.UTF8))
{
- reader.MoveToContent();
-
- // Loop through each element
- while (reader.Read())
+ // Use XmlReader for best performance
+ using (var reader = XmlReader.Create(streamReader, settings))
{
- cancellationToken.ThrowIfCancellationRequested();
+ reader.MoveToContent();
- if (reader.NodeType == XmlNodeType.Element)
+ // Loop through each element
+ while (reader.Read())
{
- switch (reader.Name)
+ cancellationToken.ThrowIfCancellationRequested();
+
+ if (reader.NodeType == XmlNodeType.Element)
{
- case "Actor":
- {
- using (var subtree = reader.ReadSubtree())
+ switch (reader.Name)
+ {
+ case "Actor":
{
- var info = FetchImageInfoFromActorNode(personName, subtree);
-
- if (info != null)
+ using (var subtree = reader.ReadSubtree())
{
- return info;
+ var info = FetchImageInfoFromActorNode(personName, subtree);
+
+ if (info != null)
+ {
+ return info;
+ }
}
+ break;
}
+ default:
+ reader.Skip();
break;
- }
- default:
- reader.Skip();
- break;
+ }
}
}
}
diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs
index 3618e4ddc..9dbc4a963 100644
--- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs
+++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs
@@ -35,12 +35,12 @@ namespace MediaBrowser.Providers.TV
private readonly IZipClient _zipClient;
private readonly IHttpClient _httpClient;
private readonly IFileSystem _fileSystem;
+ private readonly IXmlReaderSettingsFactory _xmlSettings;
private readonly IServerConfigurationManager _config;
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
private readonly ILogger _logger;
private readonly ILibraryManager _libraryManager;
private readonly IMemoryStreamProvider _memoryStreamProvider;
- private readonly IXmlReaderSettingsFactory _xmlSettings;
private readonly ILocalizationManager _localizationManager;
public TvdbSeriesProvider(IZipClient zipClient, IHttpClient httpClient, IFileSystem fileSystem, IServerConfigurationManager config, ILogger logger, ILibraryManager libraryManager, IMemoryStreamProvider memoryStreamProvider, IXmlReaderSettingsFactory xmlSettings, ILocalizationManager localizationManager)
@@ -512,9 +512,11 @@ namespace MediaBrowser.Providers.TV
private async Task<IEnumerable<RemoteSearchResult>> FindSeriesInternal(string name, string language, CancellationToken cancellationToken)
{
var url = string.Format(SeriesSearchUrl, WebUtility.UrlEncode(name), NormalizeLanguage(language));
- var doc = new XmlDocument();
+ var searchResults = new List<RemoteSearchResult>();
+
+ var comparableName = GetComparableName(name);
- using (var results = await _httpClient.Get(new HttpRequestOptions
+ using (var stream = await _httpClient.Get(new HttpRequestOptions
{
Url = url,
ResourcePool = TvDbResourcePool,
@@ -522,100 +524,170 @@ namespace MediaBrowser.Providers.TV
}).ConfigureAwait(false))
{
- doc.Load(results);
- }
+ var settings = _xmlSettings.Create(false);
- var searchResults = new List<RemoteSearchResult>();
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
- if (doc.HasChildNodes)
- {
- var nodes = doc.SelectNodes("//Series");
- var comparableName = GetComparableName(name);
- if (nodes != null)
+ using (var streamReader = new StreamReader(stream, Encoding.UTF8))
{
- foreach (XmlNode node in nodes)
+ // Use XmlReader for best performance
+ using (var reader = XmlReader.Create(streamReader, settings))
{
- var searchResult = new RemoteSearchResult
+ reader.MoveToContent();
+
+ // Loop through each element
+ while (reader.Read())
{
- SearchProviderName = Name
- };
+ cancellationToken.ThrowIfCancellationRequested();
- var titles = new List<string>();
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
+ {
+ case "Series":
+ {
+ using (var subtree = reader.ReadSubtree())
+ {
+ var searchResult = GetSeriesSearchResultFromSubTree(subtree, comparableName);
+ if (searchResult != null)
+ {
+ searchResult.SearchProviderName = Name;
+ searchResults.Add(searchResult);
+ }
+ }
+ break;
+ }
- var nameNode = node.SelectSingleNode("./SeriesName");
- if (nameNode != null)
- {
- titles.Add(GetComparableName(nameNode.InnerText));
+ default:
+ reader.Skip();
+ break;
+ }
+ }
}
+ }
+ }
+ }
- var aliasNode = node.SelectSingleNode("./AliasNames");
- if (aliasNode != null)
- {
- var alias = aliasNode.InnerText.Split('|').Select(GetComparableName);
- titles.AddRange(alias);
- }
+ if (searchResults.Count == 0)
+ {
+ _logger.Info("TVDb Provider - Could not find " + name + ". Check name on Thetvdb.org.");
+ }
- var imdbIdNode = node.SelectSingleNode("./IMDB_ID");
- if (imdbIdNode != null)
- {
- var val = imdbIdNode.InnerText;
- if (!string.IsNullOrWhiteSpace(val))
+ return searchResults;
+ }
+
+ private RemoteSearchResult GetSeriesSearchResultFromSubTree(XmlReader reader, string comparableName)
+ {
+ var searchResult = new RemoteSearchResult
+ {
+ SearchProviderName = Name
+ };
+
+ var titles = new List<string>();
+ string seriesId = null;
+
+ reader.MoveToContent();
+
+ while (reader.Read())
+ {
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
+ {
+ case "SeriesName":
{
- searchResult.SetProviderId(MetadataProviders.Imdb, val);
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ titles.Add(GetComparableName(val));
+ }
+ break;
}
- }
- var bannerNode = node.SelectSingleNode("./banner");
- if (bannerNode != null)
- {
- var val = bannerNode.InnerText;
- if (!string.IsNullOrWhiteSpace(val))
+ case "AliasNames":
{
- searchResult.ImageUrl = TVUtils.BannerUrl + val;
+ var val = reader.ReadElementContentAsString();
+
+ var alias = (val ?? string.Empty).Split(new [] { '|' }, StringSplitOptions.RemoveEmptyEntries).Select(GetComparableName);
+ titles.AddRange(alias);
+ break;
}
- }
- var airDateNode = node.SelectSingleNode("./FirstAired");
- if (airDateNode != null)
- {
- var val = airDateNode.InnerText;
- if (!string.IsNullOrWhiteSpace(val))
+ case "IMDB_ID":
{
- DateTime date;
- if (DateTime.TryParse(val, out date))
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
{
- searchResult.ProductionYear = date.Year;
+ searchResult.SetProviderId(MetadataProviders.Imdb, val);
}
+ break;
}
- }
- foreach (var title in titles)
- {
- if (string.Equals(title, comparableName, StringComparison.OrdinalIgnoreCase))
+ case "banner":
{
- var id = node.SelectSingleNode("./seriesid") ??
- node.SelectSingleNode("./id");
+ var val = reader.ReadElementContentAsString();
- if (id != null)
+ if (!string.IsNullOrWhiteSpace(val))
{
- searchResult.Name = title;
- searchResult.SetProviderId(MetadataProviders.Tvdb, id.InnerText);
- searchResults.Add(searchResult);
+ searchResult.ImageUrl = TVUtils.BannerUrl + val;
}
break;
}
- _logger.Info("TVDb Provider - " + title + " did not match " + comparableName);
- }
+
+ case "FirstAired":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ DateTime date;
+ if (DateTime.TryParse(val, out date))
+ {
+ searchResult.ProductionYear = date.Year;
+ }
+ }
+ break;
+ }
+
+ case "id":
+ case "seriesid":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ seriesId = val;
+ }
+ break;
+ }
+
+ default:
+ reader.Skip();
+ break;
}
}
}
- if (searchResults.Count == 0)
+ foreach (var title in titles)
{
- _logger.Info("TVDb Provider - Could not find " + name + ". Check name on Thetvdb.org.");
+ if (string.Equals(title, comparableName, StringComparison.OrdinalIgnoreCase))
+ {
+ if (!string.IsNullOrWhiteSpace(seriesId))
+ {
+ searchResult.Name = title;
+ searchResult.SetProviderId(MetadataProviders.Tvdb, seriesId);
+ return searchResult;
+ }
+ break;
+ }
+ _logger.Info("TVDb Provider - " + title + " did not match " + comparableName);
}
- return searchResults;
+ return null;
}
/// <summary>