diff --git a/Emby.Drawing/ImageProcessor.cs b/Emby.Drawing/ImageProcessor.cs
index 1e4537baef..9db2c1c205 100644
--- a/Emby.Drawing/ImageProcessor.cs
+++ b/Emby.Drawing/ImageProcessor.cs
@@ -189,7 +189,21 @@ namespace Emby.Drawing
dateModified = tuple.Item2;
}
- var originalImageSize = GetImageSize(originalImagePath, dateModified);
+ ImageSize originalImageSize;
+
+ try
+ {
+ originalImageSize = GetImageSize(originalImagePath, dateModified);
+ }
+ catch
+ {
+ // This is an arbitrary default, but don't fail the whole process over this
+ originalImageSize = new ImageSize
+ {
+ Width = 100,
+ Height = 100
+ };
+ }
// Determine the output size based on incoming parameters
var newSize = DrawingUtils.Resize(originalImageSize, options.Width, options.Height, options.MaxWidth, options.MaxHeight);
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index 3bef397f91..f108b344fc 100644
--- a/MediaBrowser.Api/Playback/BaseStreamingService.cs
+++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs
@@ -854,7 +854,7 @@ namespace MediaBrowser.Api.Playback
state.IsoMount = await IsoManager.Mount(state.MediaPath, cancellationTokenSource.Token).ConfigureAwait(false);
}
- if (state.MediaSource.RequiresOpening ?? false)
+ if (state.MediaSource.RequiresOpening)
{
var liveStreamResponse = await MediaSourceManager.OpenLiveStream(new LiveStreamRequest
{
diff --git a/MediaBrowser.Api/Playback/StreamState.cs b/MediaBrowser.Api/Playback/StreamState.cs
index 4df6960961..34dc5ea12f 100644
--- a/MediaBrowser.Api/Playback/StreamState.cs
+++ b/MediaBrowser.Api/Playback/StreamState.cs
@@ -185,7 +185,7 @@ namespace MediaBrowser.Api.Playback
private async void DisposeLiveStream()
{
- if ((MediaSource.RequiresClosing ?? false) && string.IsNullOrWhiteSpace(Request.LiveStreamId))
+ if ((MediaSource.RequiresClosing) && string.IsNullOrWhiteSpace(Request.LiveStreamId))
{
try
{
diff --git a/MediaBrowser.Api/StartupWizardService.cs b/MediaBrowser.Api/StartupWizardService.cs
index 6ee8d36035..277e02bf90 100644
--- a/MediaBrowser.Api/StartupWizardService.cs
+++ b/MediaBrowser.Api/StartupWizardService.cs
@@ -67,6 +67,7 @@ namespace MediaBrowser.Api
_config.Configuration.EnableLibraryMetadataSubFolder = true;
_config.Configuration.EnableUserSpecificUserViews = true;
_config.Configuration.EnableCustomPathSubFolders = true;
+ _config.Configuration.DisableXmlSavers = true;
_config.SaveConfiguration();
}
diff --git a/MediaBrowser.Controller/Library/IMetadataFileSaver.cs b/MediaBrowser.Controller/Library/IMetadataFileSaver.cs
index 0883da48f8..e09e583024 100644
--- a/MediaBrowser.Controller/Library/IMetadataFileSaver.cs
+++ b/MediaBrowser.Controller/Library/IMetadataFileSaver.cs
@@ -11,4 +11,9 @@ namespace MediaBrowser.Controller.Library
/// System.String.
string GetSavePath(IHasMetadata item);
}
+
+ public interface IConfigurableProvider
+ {
+ bool IsEnabled { get; }
+ }
}
\ No newline at end of file
diff --git a/MediaBrowser.LocalMetadata/Savers/EpisodeXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/EpisodeXmlSaver.cs
index 7a2a97c0ca..96d95d40bc 100644
--- a/MediaBrowser.LocalMetadata/Savers/EpisodeXmlSaver.cs
+++ b/MediaBrowser.LocalMetadata/Savers/EpisodeXmlSaver.cs
@@ -12,7 +12,7 @@ using System.Threading;
namespace MediaBrowser.LocalMetadata.Savers
{
- public class EpisodeXmlSaver : IMetadataFileSaver
+ public class EpisodeXmlProvider : IMetadataFileSaver, IConfigurableProvider
{
private readonly IItemRepository _itemRepository;
@@ -20,7 +20,7 @@ namespace MediaBrowser.LocalMetadata.Savers
private readonly IServerConfigurationManager _config;
private readonly ILibraryManager _libraryManager;
- public EpisodeXmlSaver(IItemRepository itemRepository, IServerConfigurationManager config, ILibraryManager libraryManager)
+ public EpisodeXmlProvider(IItemRepository itemRepository, IServerConfigurationManager config, ILibraryManager libraryManager)
{
_itemRepository = itemRepository;
_config = config;
@@ -51,6 +51,11 @@ namespace MediaBrowser.LocalMetadata.Savers
}
}
+ public bool IsEnabled
+ {
+ get { return !_config.Configuration.DisableXmlSavers; }
+ }
+
///
/// Saves the specified item.
///
diff --git a/MediaBrowser.LocalMetadata/Savers/MovieXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/MovieXmlSaver.cs
index dc5b452596..a6fba3e9ba 100644
--- a/MediaBrowser.LocalMetadata/Savers/MovieXmlSaver.cs
+++ b/MediaBrowser.LocalMetadata/Savers/MovieXmlSaver.cs
@@ -15,13 +15,13 @@ namespace MediaBrowser.LocalMetadata.Savers
///
/// Saves movie.xml for movies, trailers and music videos
///
- public class MovieXmlSaver : IMetadataFileSaver
+ public class MovieXmlProvider : IMetadataFileSaver, IConfigurableProvider
{
private readonly IItemRepository _itemRepository;
private readonly IServerConfigurationManager _config;
private readonly ILibraryManager _libraryManager;
- public MovieXmlSaver(IItemRepository itemRepository, IServerConfigurationManager config, ILibraryManager libraryManager)
+ public MovieXmlProvider(IItemRepository itemRepository, IServerConfigurationManager config, ILibraryManager libraryManager)
{
_itemRepository = itemRepository;
_config = config;
@@ -36,6 +36,11 @@ namespace MediaBrowser.LocalMetadata.Savers
}
}
+ public bool IsEnabled
+ {
+ get { return !_config.Configuration.DisableXmlSavers; }
+ }
+
///
/// Determines whether [is enabled for] [the specified item].
///
diff --git a/MediaBrowser.LocalMetadata/Savers/SeriesXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/SeriesXmlSaver.cs
index 45aff5e2c1..44b1cd8d3e 100644
--- a/MediaBrowser.LocalMetadata/Savers/SeriesXmlSaver.cs
+++ b/MediaBrowser.LocalMetadata/Savers/SeriesXmlSaver.cs
@@ -12,12 +12,12 @@ using System.Threading;
namespace MediaBrowser.LocalMetadata.Savers
{
- public class SeriesXmlSaver : IMetadataFileSaver
+ public class SeriesXmlProvider : IMetadataFileSaver, IConfigurableProvider
{
private readonly IServerConfigurationManager _config;
private readonly ILibraryManager _libraryManager;
- public SeriesXmlSaver(IServerConfigurationManager config, ILibraryManager libraryManager)
+ public SeriesXmlProvider(IServerConfigurationManager config, ILibraryManager libraryManager)
{
_config = config;
_libraryManager = libraryManager;
@@ -47,6 +47,11 @@ namespace MediaBrowser.LocalMetadata.Savers
return item is Series && updateType >= ItemUpdateType.MetadataDownload;
}
+ public bool IsEnabled
+ {
+ get { return !_config.Configuration.DisableXmlSavers; }
+ }
+
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
///
diff --git a/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs
index 140e849636..dd88512fbd 100644
--- a/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs
+++ b/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs
@@ -436,7 +436,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
state.IsoMount = await IsoManager.Mount(state.MediaPath, cancellationToken).ConfigureAwait(false);
}
- if (state.MediaSource.RequiresOpening ?? false)
+ if (state.MediaSource.RequiresOpening)
{
var liveStreamResponse = await MediaSourceManager.OpenLiveStream(new LiveStreamRequest
{
diff --git a/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs b/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs
index 2eeb580e3f..806910d893 100644
--- a/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs
+++ b/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs
@@ -136,7 +136,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
private async void DisposeLiveStream()
{
- if (MediaSource.RequiresClosing ?? false)
+ if (MediaSource.RequiresClosing)
{
try
{
diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
index 0a2fabc1b0..072416684e 100644
--- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs
+++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
@@ -213,6 +213,8 @@ namespace MediaBrowser.Model.Configuration
public int SharingExpirationDays { get; set; }
+ public bool DisableXmlSavers { get; set; }
+
///
/// Initializes a new instance of the class.
///
diff --git a/MediaBrowser.Model/Dto/MediaSourceInfo.cs b/MediaBrowser.Model/Dto/MediaSourceInfo.cs
index 75edc6a528..8897edcbdc 100644
--- a/MediaBrowser.Model/Dto/MediaSourceInfo.cs
+++ b/MediaBrowser.Model/Dto/MediaSourceInfo.cs
@@ -26,9 +26,9 @@ namespace MediaBrowser.Model.Dto
public bool SupportsDirectStream { get; set; }
public bool SupportsDirectPlay { get; set; }
- public bool? RequiresOpening { get; set; }
+ public bool RequiresOpening { get; set; }
public string OpenToken { get; set; }
- public bool? RequiresClosing { get; set; }
+ public bool RequiresClosing { get; set; }
public string LiveStreamId { get; set; }
public int? BufferMs { get; set; }
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs
index beef968fb6..453e07987a 100644
--- a/MediaBrowser.Providers/Manager/ProviderManager.cs
+++ b/MediaBrowser.Providers/Manager/ProviderManager.cs
@@ -106,9 +106,15 @@ namespace MediaBrowser.Providers.Manager
_identityProviders = identityProviders.ToArray();
_identityConverters = identityConverters.ToArray();
_metadataProviders = metadataProviders.ToArray();
- _savers = metadataSavers.ToArray();
_imageSavers = imageSavers.ToArray();
_externalIds = externalIds.OrderBy(i => i.Name).ToArray();
+
+ _savers = metadataSavers.Where(i =>
+ {
+ var configurable = i as IConfigurableProvider;
+
+ return configurable == null || configurable.IsEnabled;
+ }).ToArray();
}
public Task RefreshSingleItem(IHasMetadata item, MetadataRefreshOptions options, CancellationToken cancellationToken)
diff --git a/MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs b/MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs
index 2263b3e1f8..c5ff100f9d 100644
--- a/MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs
@@ -449,7 +449,7 @@ namespace MediaBrowser.Server.Implementations.Library
LiveStreamInfo current;
if (_openStreams.TryGetValue(id, out current))
{
- if (current.MediaSource.RequiresClosing ?? false)
+ if (current.MediaSource.RequiresClosing)
{
var tuple = GetProvider(id);
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index f73e648fae..b4669f53eb 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -368,7 +368,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
info = await service.GetChannelStream(channel.ExternalId, mediaSourceId, cancellationToken).ConfigureAwait(false);
info.RequiresClosing = true;
- if (info.RequiresClosing ?? false)
+ if (info.RequiresClosing)
{
var idPrefix = service.GetType().FullName.GetMD5().ToString("N") + "_";
@@ -385,7 +385,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
info = await service.GetRecordingStream(recording.ExternalId, null, cancellationToken).ConfigureAwait(false);
info.RequiresClosing = true;
- if (info.RequiresClosing ?? false)
+ if (info.RequiresClosing)
{
var idPrefix = service.GetType().FullName.GetMD5().ToString("N") + "_";
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs
index cf34b6b99f..66a21830e8 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs
@@ -59,6 +59,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
IEnumerable sources;
+ var forceRequireOpening = false;
+
try
{
if (item is ILiveTvRecording)
@@ -78,6 +80,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv
sources = _mediaSourceManager.GetStaticMediaSources(hasMediaSources, false)
.ToList();
+
+ forceRequireOpening = true;
}
var list = sources.ToList();
@@ -87,12 +91,12 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
source.Type = MediaSourceType.Default;
- if (!source.RequiresOpening.HasValue)
+ if (source.RequiresOpening || forceRequireOpening)
{
source.RequiresOpening = true;
}
- if (source.RequiresOpening.HasValue && source.RequiresOpening.Value)
+ if (source.RequiresOpening)
{
var openKeys = new List();
openKeys.Add(item.GetType().Name);
diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec
index fffb68e364..c43b90c8c9 100644
--- a/Nuget/MediaBrowser.Common.Internal.nuspec
+++ b/Nuget/MediaBrowser.Common.Internal.nuspec
@@ -2,7 +2,7 @@
MediaBrowser.Common.Internal
- 3.0.629
+ 3.0.631
MediaBrowser.Common.Internal
Luke
ebr,Luke,scottisafool
@@ -12,7 +12,7 @@
Contains common components shared by Emby Theater and Emby Server. Not intended for plugin developer consumption.
Copyright © Emby 2013
-
+
diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec
index 856e63199a..32e3b2fc67 100644
--- a/Nuget/MediaBrowser.Common.nuspec
+++ b/Nuget/MediaBrowser.Common.nuspec
@@ -2,7 +2,7 @@
MediaBrowser.Common
- 3.0.629
+ 3.0.631
MediaBrowser.Common
Emby Team
ebr,Luke,scottisafool
diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec
index 30175007dc..fc33477a90 100644
--- a/Nuget/MediaBrowser.Model.Signed.nuspec
+++ b/Nuget/MediaBrowser.Model.Signed.nuspec
@@ -2,7 +2,7 @@
MediaBrowser.Model.Signed
- 3.0.629
+ 3.0.631
MediaBrowser.Model - Signed Edition
Emby Team
ebr,Luke,scottisafool
diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec
index c688c6f2c5..704c30f951 100644
--- a/Nuget/MediaBrowser.Server.Core.nuspec
+++ b/Nuget/MediaBrowser.Server.Core.nuspec
@@ -2,7 +2,7 @@
MediaBrowser.Server.Core
- 3.0.629
+ 3.0.631
Media Browser.Server.Core
Emby Team
ebr,Luke,scottisafool
@@ -12,7 +12,7 @@
Contains core components required to build plugins for Emby Server.
Copyright © Emby 2013
-
+