diff --git a/MediaBrowser.Api/Images/RemoteImageService.cs b/MediaBrowser.Api/Images/RemoteImageService.cs
index 49a582937f..960de017de 100644
--- a/MediaBrowser.Api/Images/RemoteImageService.cs
+++ b/MediaBrowser.Api/Images/RemoteImageService.cs
@@ -221,10 +221,17 @@ namespace MediaBrowser.Api.Images
var imagesList = images.ToList();
+ var allProviders = _providerManager.GetRemoteImageProviderInfo(item);
+
+ if (request.Type.HasValue)
+ {
+ allProviders = allProviders.Where(i => i.SupportedImages.Contains(request.Type.Value));
+ }
+
var result = new RemoteImageResult
{
TotalRecordCount = imagesList.Count,
- Providers = imagesList.Select(i => i.ProviderName)
+ Providers = allProviders.Select(i => i.Name)
.Distinct(StringComparer.OrdinalIgnoreCase)
.ToList()
};
diff --git a/MediaBrowser.Api/Library/LibraryStructureService.cs b/MediaBrowser.Api/Library/LibraryStructureService.cs
index f08d79c0db..ed086398ff 100644
--- a/MediaBrowser.Api/Library/LibraryStructureService.cs
+++ b/MediaBrowser.Api/Library/LibraryStructureService.cs
@@ -167,15 +167,32 @@ namespace MediaBrowser.Api.Library
public bool RefreshLibrary { get; set; }
}
- [Route("/Library/Changes/Path", "POST")]
+ [Route("/Library/Changes/New", "POST")]
public class ReportChangedPath : IReturnVoid
{
///
/// Gets or sets the name.
///
/// The name.
- [ApiMember(Name = "Path", Description = "The path that was changed.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ [ApiMember(Name = "Path", Description = "The path that was changed.", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")]
public string Path { get; set; }
+
+ [ApiMember(Name = "ImageUrl", Description = "Optional thumbnail image url of the content.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ public string ImageUrl { get; set; }
+ }
+
+ [Route("/Library/Episodes/New", "POST")]
+ public class ReportNewEpisode : IReturnVoid
+ {
+ ///
+ /// Gets or sets the name.
+ ///
+ /// The name.
+ [ApiMember(Name = "TvdbId", Description = "The tvdb id of the new episode.", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")]
+ public string TvdbId { get; set; }
+
+ [ApiMember(Name = "ImageUrl", Description = "Optional thumbnail image url of the content.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ public string ImageUrl { get; set; }
}
///
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index 310ddf64ca..cb14ed099e 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -521,7 +521,7 @@ namespace MediaBrowser.Controller.Entities
foreach (var child in children)
{
- if (tasks.Count >= 2)
+ if (tasks.Count >= 8)
{
await Task.WhenAll(tasks).ConfigureAwait(false);
tasks.Clear();
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs b/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs
index 81515a2e9a..a4a85ec04e 100644
--- a/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs
+++ b/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs
@@ -67,5 +67,13 @@ namespace MediaBrowser.Controller.LiveTv
{
return false;
}
+
+ public override bool SupportsLocalMetadata
+ {
+ get
+ {
+ return false;
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs b/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs
index 3f8d67e3b7..6e3644b4aa 100644
--- a/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs
+++ b/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs
@@ -67,5 +67,13 @@ namespace MediaBrowser.Controller.LiveTv
{
return false;
}
+
+ public override bool SupportsLocalMetadata
+ {
+ get
+ {
+ return false;
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/Providers/IProviderManager.cs b/MediaBrowser.Controller/Providers/IProviderManager.cs
index e7eb275033..a4800955d1 100644
--- a/MediaBrowser.Controller/Providers/IProviderManager.cs
+++ b/MediaBrowser.Controller/Providers/IProviderManager.cs
@@ -94,6 +94,6 @@ namespace MediaBrowser.Controller.Providers
///
/// The item.
/// MetadataOptions.
- MetadataOptions GetMetadataOptions(IHasMetadata item);
+ MetadataOptions GetMetadataOptions(IHasImages item);
}
}
\ No newline at end of file
diff --git a/MediaBrowser.Model/Configuration/MetadataOptions.cs b/MediaBrowser.Model/Configuration/MetadataOptions.cs
index 9fdcf045ec..d666f6ccea 100644
--- a/MediaBrowser.Model/Configuration/MetadataOptions.cs
+++ b/MediaBrowser.Model/Configuration/MetadataOptions.cs
@@ -15,8 +15,14 @@ namespace MediaBrowser.Model.Configuration
public ImageOption[] ImageOptions { get; set; }
public string[] DisabledMetadataSavers { get; set; }
- public string[] LocalMetadataReaders { get; set; }
+ public string[] LocalMetadataReaderOrder { get; set; }
+ public string[] DisabledMetadataFetchers { get; set; }
+ public string[] MetadataFetcherOrder { get; set; }
+
+ public string[] DisabledImageFetchers { get; set; }
+ public string[] ImageFetcherOrder { get; set; }
+
public MetadataOptions()
: this(3, 1280)
{
@@ -36,7 +42,12 @@ namespace MediaBrowser.Model.Configuration
ImageOptions = imageOptions.ToArray();
DisabledMetadataSavers = new string[] { };
- LocalMetadataReaders = new string[] { };
+ LocalMetadataReaderOrder = new string[] { };
+
+ DisabledMetadataFetchers = new string[] { };
+ MetadataFetcherOrder = new string[] { };
+ DisabledImageFetchers = new string[] { };
+ ImageFetcherOrder = new string[] { };
}
public int GetLimit(ImageType type)
diff --git a/MediaBrowser.Model/Providers/ImageProviderInfo.cs b/MediaBrowser.Model/Providers/ImageProviderInfo.cs
index 4b5a07805d..c519d66cb5 100644
--- a/MediaBrowser.Model/Providers/ImageProviderInfo.cs
+++ b/MediaBrowser.Model/Providers/ImageProviderInfo.cs
@@ -1,4 +1,7 @@
-namespace MediaBrowser.Model.Providers
+using System.Collections.Generic;
+using MediaBrowser.Model.Entities;
+
+namespace MediaBrowser.Model.Providers
{
///
/// Class ImageProviderInfo.
@@ -10,5 +13,12 @@
///
/// The name.
public string Name { get; set; }
+
+ public List SupportedImages { get; set; }
+
+ public ImageProviderInfo()
+ {
+ SupportedImages = new List();
+ }
}
}
diff --git a/MediaBrowser.Providers/AdultVideos/AdultVideoXmlProvider.cs b/MediaBrowser.Providers/AdultVideos/AdultVideoXmlProvider.cs
index d98989503b..fcdaf29fd3 100644
--- a/MediaBrowser.Providers/AdultVideos/AdultVideoXmlProvider.cs
+++ b/MediaBrowser.Providers/AdultVideos/AdultVideoXmlProvider.cs
@@ -23,7 +23,7 @@ namespace MediaBrowser.Providers.AdultVideos
new MovieXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
}
- protected override FileInfo GetXmlFile(ItemInfo info)
+ protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
{
return MovieXmlProvider.GetXmlFileInfo(info, FileSystem);
}
diff --git a/MediaBrowser.Providers/BaseXmlProvider.cs b/MediaBrowser.Providers/BaseXmlProvider.cs
index eb3be0eeb6..9086880868 100644
--- a/MediaBrowser.Providers/BaseXmlProvider.cs
+++ b/MediaBrowser.Providers/BaseXmlProvider.cs
@@ -1,6 +1,7 @@
using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Logging;
using System;
using System.IO;
using System.Threading;
@@ -17,7 +18,7 @@ namespace MediaBrowser.Providers
{
var result = new LocalMetadataResult();
- var file = GetXmlFile(info);
+ var file = GetXmlFile(info, new DirectoryService(new NullLogger()));
if (file == null)
{
@@ -58,12 +59,7 @@ namespace MediaBrowser.Providers
FileSystem = fileSystem;
}
- protected abstract FileInfo GetXmlFile(ItemInfo info);
-
- protected virtual FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
- {
- return GetXmlFile(info);
- }
+ protected abstract FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService);
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date)
{
diff --git a/MediaBrowser.Providers/BoxSets/BoxSetXmlProvider.cs b/MediaBrowser.Providers/BoxSets/BoxSetXmlProvider.cs
index f3f60abdc4..e9896c28ed 100644
--- a/MediaBrowser.Providers/BoxSets/BoxSetXmlProvider.cs
+++ b/MediaBrowser.Providers/BoxSets/BoxSetXmlProvider.cs
@@ -25,9 +25,9 @@ namespace MediaBrowser.Providers.BoxSets
new BaseItemXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
}
- protected override FileInfo GetXmlFile(ItemInfo info)
+ protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
{
- return new FileInfo(Path.Combine(info.Path, "collection.xml"));
+ return directoryService.GetFile(Path.Combine(info.Path, "collection.xml"));
}
}
}
diff --git a/MediaBrowser.Providers/Folders/FolderXmlProvider.cs b/MediaBrowser.Providers/Folders/FolderXmlProvider.cs
index 612cef79b5..978fb0f0cd 100644
--- a/MediaBrowser.Providers/Folders/FolderXmlProvider.cs
+++ b/MediaBrowser.Providers/Folders/FolderXmlProvider.cs
@@ -25,7 +25,7 @@ namespace MediaBrowser.Providers.Folders
new BaseItemXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
}
- protected override FileInfo GetXmlFile(ItemInfo info)
+ protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
{
return new FileInfo(Path.Combine(info.Path, "folder.xml"));
}
diff --git a/MediaBrowser.Providers/Games/GameSystemXmlProvider.cs b/MediaBrowser.Providers/Games/GameSystemXmlProvider.cs
index e35d849dba..9efa93dfa0 100644
--- a/MediaBrowser.Providers/Games/GameSystemXmlProvider.cs
+++ b/MediaBrowser.Providers/Games/GameSystemXmlProvider.cs
@@ -22,9 +22,9 @@ namespace MediaBrowser.Providers.Games
new GameSystemXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
}
- protected override FileInfo GetXmlFile(ItemInfo info)
+ protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
{
- return new FileInfo(Path.Combine(info.Path, "gamesystem.xml"));
+ return directoryService.GetFile(Path.Combine(info.Path, "gamesystem.xml"));
}
}
}
diff --git a/MediaBrowser.Providers/Games/GameXmlProvider.cs b/MediaBrowser.Providers/Games/GameXmlProvider.cs
index 4c09ce1a05..c12feb85c4 100644
--- a/MediaBrowser.Providers/Games/GameXmlProvider.cs
+++ b/MediaBrowser.Providers/Games/GameXmlProvider.cs
@@ -22,7 +22,7 @@ namespace MediaBrowser.Providers.Games
new GameXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
}
- protected override FileInfo GetXmlFile(ItemInfo info)
+ protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
{
var fileInfo = FileSystem.GetFileSystemInfo(info.Path);
diff --git a/MediaBrowser.Providers/LiveTv/ChannelXmlProvider.cs b/MediaBrowser.Providers/LiveTv/ChannelXmlProvider.cs
index 3d001596be..400ac825fc 100644
--- a/MediaBrowser.Providers/LiveTv/ChannelXmlProvider.cs
+++ b/MediaBrowser.Providers/LiveTv/ChannelXmlProvider.cs
@@ -22,9 +22,9 @@ namespace MediaBrowser.Providers.LiveTv
new BaseItemXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
}
- protected override FileInfo GetXmlFile(ItemInfo info)
+ protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
{
- return new FileInfo(Path.Combine(info.Path, "channel.xml"));
+ return directoryService.GetFile(Path.Combine(info.Path, "channel.xml"));
}
}
}
diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
index 8f72e601b1..ea8c14a8c2 100644
--- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs
+++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
@@ -55,7 +55,7 @@ namespace MediaBrowser.Providers.Manager
{
var result = new RefreshResult { UpdateType = ItemUpdateType.None };
- var providers = GetImageProviders(item, imageProviders).ToList();
+ var providers = imageProviders.ToList();
var providerIds = new List();
@@ -213,7 +213,7 @@ namespace MediaBrowser.Providers.Manager
_logger.Debug("Running {0} for {1}", provider.GetType().Name, item.Path ?? item.Name);
- var images = await provider.GetAllImages(item, cancellationToken).ConfigureAwait(false);
+ var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, provider.Name).ConfigureAwait(false);
var list = images.ToList();
foreach (var type in _singularImages)
@@ -244,24 +244,6 @@ namespace MediaBrowser.Providers.Manager
}
}
- ///
- /// Gets the image providers.
- ///
- /// The item.
- /// The image providers.
- /// IEnumerable{IImageProvider}.
- private IEnumerable GetImageProviders(IHasImages item, IEnumerable imageProviders)
- {
- var providers = imageProviders;
-
- if (!_config.Configuration.EnableInternetProviders)
- {
- providers = providers.Where(i => !(i is IRemoteImageProvider));
- }
-
- return providers;
- }
-
public bool MergeImages(IHasImages item, List images)
{
var changed = false;
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index d64c98d5b3..5b22677322 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -159,7 +159,15 @@ namespace MediaBrowser.Providers.Manager
/// ItemUpdateType.
protected virtual ItemUpdateType BeforeSave(TItemType item)
{
- return ItemUpdateType.None;
+ var updateType = ItemUpdateType.None;
+
+ if (string.IsNullOrEmpty(item.Name) && !string.IsNullOrEmpty(item.Path))
+ {
+ item.Name = Path.GetFileNameWithoutExtension(item.Path);
+ updateType = updateType | ItemUpdateType.MetadataEdit;
+ }
+
+ return updateType;
}
///
@@ -318,7 +326,7 @@ namespace MediaBrowser.Providers.Manager
}
// Local metadata is king - if any is found don't run remote providers
- if (!options.ReplaceAllMetadata && !hasLocalMetadata)
+ if ((!options.ReplaceAllMetadata && !hasLocalMetadata) || options.MetadataRefreshMode == MetadataRefreshMode.FullRefresh)
{
await ExecuteRemoteProviders(item, temp, providers.OfType>(), refreshResult, cancellationToken).ConfigureAwait(false);
}
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs
index a7af795a12..db0a25ec6f 100644
--- a/MediaBrowser.Providers/Manager/ProviderManager.cs
+++ b/MediaBrowser.Providers/Manager/ProviderManager.cs
@@ -211,7 +211,7 @@ namespace MediaBrowser.Providers.Manager
/// Task{IEnumerable{RemoteImageInfo}}.
public async Task> GetAvailableRemoteImages(IHasImages item, CancellationToken cancellationToken, string providerName = null, ImageType? type = null)
{
- var providers = GetRemoteImageProviders(item);
+ var providers = GetRemoteImageProviders(item, true);
if (!string.IsNullOrEmpty(providerName))
{
@@ -277,27 +277,38 @@ namespace MediaBrowser.Providers.Manager
/// IEnumerable{IImageProvider}.
public IEnumerable GetRemoteImageProviderInfo(IHasImages item)
{
- return GetRemoteImageProviders(item).Select(i => new ImageProviderInfo
+ return GetRemoteImageProviders(item, true).Select(i => new ImageProviderInfo
{
- Name = i.Name
+ Name = i.Name,
+ SupportedImages = i.GetSupportedImages(item).ToList()
});
}
public IEnumerable GetImageProviders(IHasImages item)
{
- return ImageProviders.Where(i =>
+ return GetImageProviders(item, GetMetadataOptions(item), false);
+ }
+
+ private IEnumerable GetImageProviders(IHasImages item, MetadataOptions options, bool includeDisabled)
+ {
+ return ImageProviders.Where(i => CanRefresh(i, item, options, includeDisabled))
+ .OrderBy(i =>
{
- try
+ // See if there's a user-defined order
+ if (!(i is ILocalImageProvider))
{
- return i.Supports(item);
- }
- catch (Exception ex)
- {
- _logger.ErrorException("{0} failed in Supports for type {1}", ex, i.GetType().Name, item.GetType().Name);
- return false;
+ var index = Array.IndexOf(options.ImageFetcherOrder, i.Name);
+
+ if (index != -1)
+ {
+ return index;
+ }
}
- }).OrderBy(GetOrder);
+ // Not configured. Just return some high number to put it at the end.
+ return 100;
+ })
+ .ThenBy(GetOrder);
}
public IEnumerable> GetMetadataProviders(IHasMetadata item)
@@ -312,13 +323,13 @@ namespace MediaBrowser.Providers.Manager
where T : IHasMetadata
{
return _metadataProviders.OfType>()
- .Where(i => CanRefresh(i, item, includeDisabled))
+ .Where(i => CanRefresh(i, item, options, includeDisabled))
.OrderBy(i =>
{
// See if there's a user-defined order
if (i is ILocalMetadataProvider)
{
- var index = Array.IndexOf(options.LocalMetadataReaders, i.Name);
+ var index = Array.IndexOf(options.LocalMetadataReaderOrder, i.Name);
if (index != -1)
{
@@ -326,29 +337,46 @@ namespace MediaBrowser.Providers.Manager
}
}
+ // See if there's a user-defined order
+ if (i is IRemoteMetadataProvider)
+ {
+ var index = Array.IndexOf(options.MetadataFetcherOrder, i.Name);
+
+ if (index != -1)
+ {
+ return index;
+ }
+ }
+
// Not configured. Just return some high number to put it at the end.
return 100;
})
.ThenBy(GetOrder);
}
- private IEnumerable GetRemoteImageProviders(IHasImages item)
+ private IEnumerable GetRemoteImageProviders(IHasImages item, bool includeDisabled)
{
- return GetImageProviders(item).OfType();
+ var options = GetMetadataOptions(item);
+
+ return GetImageProviders(item, options, includeDisabled).OfType();
}
- ///
- /// Determines whether this instance can refresh the specified provider.
- ///
- /// The provider.
- /// The item.
- /// if set to true [include disabled].
- /// true if this instance can refresh the specified provider; otherwise, false.
- private bool CanRefresh(IMetadataProvider provider, IHasMetadata item, bool includeDisabled)
+ private bool CanRefresh(IMetadataProvider provider, IHasMetadata item, MetadataOptions options, bool includeDisabled)
{
- if (!includeDisabled && !ConfigurationManager.Configuration.EnableInternetProviders && provider is IRemoteMetadataProvider)
+ if (!includeDisabled)
{
- return false;
+ if (provider is IRemoteMetadataProvider)
+ {
+ if (!ConfigurationManager.Configuration.EnableInternetProviders)
+ {
+ return false;
+ }
+
+ if (Array.IndexOf(options.DisabledMetadataFetchers, provider.Name) != -1)
+ {
+ return false;
+ }
+ }
}
if (!item.SupportsLocalMetadata && provider is ILocalMetadataProvider)
@@ -368,6 +396,40 @@ namespace MediaBrowser.Providers.Manager
return true;
}
+ private bool CanRefresh(IImageProvider provider, IHasImages item, MetadataOptions options, bool includeDisabled)
+ {
+ if (!includeDisabled)
+ {
+ if (provider is IRemoteImageProvider)
+ {
+ if (!ConfigurationManager.Configuration.EnableInternetProviders)
+ {
+ return false;
+ }
+
+ if (Array.IndexOf(options.DisabledImageFetchers, provider.Name) != -1)
+ {
+ return false;
+ }
+ }
+ }
+
+ if (!item.SupportsLocalMetadata && provider is ILocalImageProvider)
+ {
+ return false;
+ }
+
+ try
+ {
+ return provider.Supports(item);
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("{0} failed in Supports for type {1}", ex, provider.GetType().Name, item.GetType().Name);
+ return false;
+ }
+ }
+
///
/// Gets the order.
///
@@ -454,7 +516,7 @@ namespace MediaBrowser.Providers.Manager
ItemType = typeof(T).Name
};
- var imageProviders = GetImageProviders(dummy).ToList();
+ var imageProviders = GetImageProviders(dummy, options, true).ToList();
AddMetadataPlugins(summary.Plugins, dummy, options);
AddImagePlugins(summary.Plugins, dummy, imageProviders);
@@ -513,7 +575,7 @@ namespace MediaBrowser.Providers.Manager
}));
}
- public MetadataOptions GetMetadataOptions(IHasMetadata item)
+ public MetadataOptions GetMetadataOptions(IHasImages item)
{
var type = item.GetType().Name;
diff --git a/MediaBrowser.Providers/Movies/MovieXmlProvider.cs b/MediaBrowser.Providers/Movies/MovieXmlProvider.cs
index afc0055a78..bb76502552 100644
--- a/MediaBrowser.Providers/Movies/MovieXmlProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieXmlProvider.cs
@@ -22,7 +22,7 @@ namespace MediaBrowser.Providers.Movies
new MovieXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
}
- protected override FileInfo GetXmlFile(ItemInfo info)
+ protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
{
return GetXmlFileInfo(info, FileSystem);
}
diff --git a/MediaBrowser.Providers/Movies/TrailerXmlProvider.cs b/MediaBrowser.Providers/Movies/TrailerXmlProvider.cs
index 044d87a48a..df90d32cad 100644
--- a/MediaBrowser.Providers/Movies/TrailerXmlProvider.cs
+++ b/MediaBrowser.Providers/Movies/TrailerXmlProvider.cs
@@ -22,7 +22,7 @@ namespace MediaBrowser.Providers.Movies
new MovieXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
}
- protected override FileInfo GetXmlFile(ItemInfo info)
+ protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
{
return MovieXmlProvider.GetXmlFileInfo(info, FileSystem);
}
diff --git a/MediaBrowser.Providers/Music/AlbumXmlProvider.cs b/MediaBrowser.Providers/Music/AlbumXmlProvider.cs
index 18e59fe68b..60bc18b2f6 100644
--- a/MediaBrowser.Providers/Music/AlbumXmlProvider.cs
+++ b/MediaBrowser.Providers/Music/AlbumXmlProvider.cs
@@ -22,9 +22,9 @@ namespace MediaBrowser.Providers.Music
new BaseItemXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
}
- protected override FileInfo GetXmlFile(ItemInfo info)
+ protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
{
- return new FileInfo(Path.Combine(info.Path, "album.xml"));
+ return directoryService.GetFile(Path.Combine(info.Path, "album.xml"));
}
}
}
diff --git a/MediaBrowser.Providers/Music/ArtistXmlProvider.cs b/MediaBrowser.Providers/Music/ArtistXmlProvider.cs
index f6da70702f..89ba1c7943 100644
--- a/MediaBrowser.Providers/Music/ArtistXmlProvider.cs
+++ b/MediaBrowser.Providers/Music/ArtistXmlProvider.cs
@@ -22,9 +22,9 @@ namespace MediaBrowser.Providers.Music
new BaseItemXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
}
- protected override FileInfo GetXmlFile(ItemInfo info)
+ protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
{
- return new FileInfo(Path.Combine(info.Path, "artist.xml"));
+ return directoryService.GetFile(Path.Combine(info.Path, "artist.xml"));
}
}
}
diff --git a/MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs b/MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs
index 3911777c1c..4291f23693 100644
--- a/MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs
+++ b/MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs
@@ -24,7 +24,7 @@ namespace MediaBrowser.Providers.Music
new MusicVideoXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
}
- protected override FileInfo GetXmlFile(ItemInfo info)
+ protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
{
return MovieXmlProvider.GetXmlFileInfo(info, FileSystem);
}
diff --git a/MediaBrowser.Providers/People/PersonXmlProvider.cs b/MediaBrowser.Providers/People/PersonXmlProvider.cs
index 9248e1b670..4a145a1c04 100644
--- a/MediaBrowser.Providers/People/PersonXmlProvider.cs
+++ b/MediaBrowser.Providers/People/PersonXmlProvider.cs
@@ -22,9 +22,9 @@ namespace MediaBrowser.Providers.People
new BaseItemXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
}
- protected override FileInfo GetXmlFile(ItemInfo info)
+ protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
{
- return new FileInfo(Path.Combine(info.Path, "person.xml"));
+ return directoryService.GetFile(Path.Combine(info.Path, "person.xml"));
}
}
}
diff --git a/MediaBrowser.Providers/TV/EpisodeXmlProvider.cs b/MediaBrowser.Providers/TV/EpisodeXmlProvider.cs
index 0f4ad14857..3def297e72 100644
--- a/MediaBrowser.Providers/TV/EpisodeXmlProvider.cs
+++ b/MediaBrowser.Providers/TV/EpisodeXmlProvider.cs
@@ -22,15 +22,6 @@ namespace MediaBrowser.Providers.TV
new EpisodeXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
}
- protected override FileInfo GetXmlFile(ItemInfo info)
- {
- var metadataPath = Path.GetDirectoryName(info.Path);
- metadataPath = Path.Combine(metadataPath, "metadata");
- var metadataFile = Path.Combine(metadataPath, Path.ChangeExtension(Path.GetFileName(info.Path), ".xml"));
-
- return new FileInfo(metadataFile);
- }
-
protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
{
var metadataPath = Path.GetDirectoryName(info.Path);
diff --git a/MediaBrowser.Providers/TV/SeasonXmlProvider.cs b/MediaBrowser.Providers/TV/SeasonXmlProvider.cs
index 07bec8dc95..e53a2deff4 100644
--- a/MediaBrowser.Providers/TV/SeasonXmlProvider.cs
+++ b/MediaBrowser.Providers/TV/SeasonXmlProvider.cs
@@ -25,9 +25,9 @@ namespace MediaBrowser.Providers.TV
new BaseItemXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
}
- protected override FileInfo GetXmlFile(ItemInfo info)
+ protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
{
- return new FileInfo(Path.Combine(info.Path, "season.xml"));
+ return directoryService.GetFile(Path.Combine(info.Path, "season.xml"));
}
}
}
diff --git a/MediaBrowser.Providers/TV/SeriesXmlProvider.cs b/MediaBrowser.Providers/TV/SeriesXmlProvider.cs
index 3a0c7f9d78..53599ef555 100644
--- a/MediaBrowser.Providers/TV/SeriesXmlProvider.cs
+++ b/MediaBrowser.Providers/TV/SeriesXmlProvider.cs
@@ -25,9 +25,9 @@ namespace MediaBrowser.Providers.TV
new SeriesXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
}
- protected override FileInfo GetXmlFile(ItemInfo info)
+ protected override FileInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
{
- return new FileInfo(Path.Combine(info.Path, "series.xml"));
+ return directoryService.GetFile(Path.Combine(info.Path, "series.xml"));
}
}
}
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index b9def8e262..f25cf541b4 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -793,10 +793,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv
double percent = numComplete;
percent /= allChannelsList.Count;
- progress.Report(90 * percent + 10);
+ progress.Report(80 * percent + 10);
}
_programs = programs.ToDictionary(i => i.Id);
+
+ // Load these now which will prefetch metadata
+ await GetRecordings(new RecordingQuery(), cancellationToken).ConfigureAwait(false);
+
+ progress.Report(100);
}
private double GetGuideDays(int channelCount)
diff --git a/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs b/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs
index 6713122742..4e84693262 100644
--- a/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs
+++ b/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs
@@ -210,7 +210,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager
}
catch (Exception ex)
{
- _logger.ErrorException("{0} failed processing WebSocket message {1}", ex, i.GetType().Name, result.MessageType);
+ _logger.ErrorException("{0} failed processing WebSocket message {1}", ex, i.GetType().Name, result.MessageType ?? string.Empty);
}
}));