aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
authorLukePulverenti <luke.pulverenti@gmail.com>2013-02-24 16:53:54 -0500
committerLukePulverenti <luke.pulverenti@gmail.com>2013-02-24 16:53:54 -0500
commit8ce3e74e8112a94773df22827849bf274fc88198 (patch)
treea4ce1edf34466be697e2e432609f6be80b6c6df6 /MediaBrowser.Controller
parent6c86721f6de2acbe68e9419064ff21111ff3a223 (diff)
More DI
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Drawing/ImageManager.cs45
-rw-r--r--MediaBrowser.Controller/Entities/User.cs15
-rw-r--r--MediaBrowser.Controller/IServerApplicationPaths.cs85
-rw-r--r--MediaBrowser.Controller/Kernel.cs64
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj2
-rw-r--r--MediaBrowser.Controller/MediaInfo/FFMpegManager.cs79
-rw-r--r--MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs30
-rw-r--r--MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs31
-rw-r--r--MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs8
-rw-r--r--MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs8
-rw-r--r--MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs29
-rw-r--r--MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs4
-rw-r--r--MediaBrowser.Controller/ScheduledTasks/ImageCleanupTask.cs7
-rw-r--r--MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs4
-rw-r--r--MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs4
-rw-r--r--MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs4
-rw-r--r--MediaBrowser.Controller/ServerApplicationPaths.cs334
-rw-r--r--MediaBrowser.Controller/Updates/InstallationManager.cs46
18 files changed, 339 insertions, 460 deletions
diff --git a/MediaBrowser.Controller/Drawing/ImageManager.cs b/MediaBrowser.Controller/Drawing/ImageManager.cs
index a0ba9d550..766d56115 100644
--- a/MediaBrowser.Controller/Drawing/ImageManager.cs
+++ b/MediaBrowser.Controller/Drawing/ImageManager.cs
@@ -1,12 +1,12 @@
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO;
-using MediaBrowser.Common.Kernel;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
+using MediaBrowser.Model.Serialization;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
@@ -22,7 +22,7 @@ namespace MediaBrowser.Controller.Drawing
/// <summary>
/// Class ImageManager
/// </summary>
- public class ImageManager : BaseManager<Kernel>
+ public class ImageManager : IDisposable
{
/// <summary>
/// Gets the image size cache.
@@ -58,19 +58,31 @@ namespace MediaBrowser.Controller.Drawing
private readonly ILogger _logger;
/// <summary>
+ /// The _protobuf serializer
+ /// </summary>
+ private readonly IProtobufSerializer _protobufSerializer;
+
+ /// <summary>
+ /// The _kernel
+ /// </summary>
+ private readonly Kernel _kernel;
+
+ /// <summary>
/// Initializes a new instance of the <see cref="ImageManager" /> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
+ /// <param name="protobufSerializer">The protobuf serializer.</param>
/// <param name="logger">The logger.</param>
- public ImageManager(Kernel kernel, ILogger logger)
- : base(kernel)
+ public ImageManager(Kernel kernel, IProtobufSerializer protobufSerializer, ILogger logger)
{
+ _protobufSerializer = protobufSerializer;
_logger = logger;
+ _kernel = kernel;
- ImageSizeCache = new FileSystemRepository(Path.Combine(Kernel.ApplicationPaths.ImageCachePath, "image-sizes"));
- ResizedImageCache = new FileSystemRepository(Path.Combine(Kernel.ApplicationPaths.ImageCachePath, "resized-images"));
- CroppedImageCache = new FileSystemRepository(Path.Combine(Kernel.ApplicationPaths.ImageCachePath, "cropped-images"));
- EnhancedImageCache = new FileSystemRepository(Path.Combine(Kernel.ApplicationPaths.ImageCachePath, "enhanced-images"));
+ ImageSizeCache = new FileSystemRepository(Path.Combine(_kernel.ApplicationPaths.ImageCachePath, "image-sizes"));
+ ResizedImageCache = new FileSystemRepository(Path.Combine(_kernel.ApplicationPaths.ImageCachePath, "resized-images"));
+ CroppedImageCache = new FileSystemRepository(Path.Combine(_kernel.ApplicationPaths.ImageCachePath, "cropped-images"));
+ EnhancedImageCache = new FileSystemRepository(Path.Combine(_kernel.ApplicationPaths.ImageCachePath, "enhanced-images"));
}
/// <summary>
@@ -276,7 +288,7 @@ namespace MediaBrowser.Controller.Drawing
try
{
- var result = Kernel.ProtobufSerializer.DeserializeFromFile<int[]>(fullCachePath);
+ var result = _protobufSerializer.DeserializeFromFile<int[]>(fullCachePath);
return new ImageSize { Width = result[0], Height = result[1] };
}
@@ -305,7 +317,7 @@ namespace MediaBrowser.Controller.Drawing
{
var output = new[] { width, height };
- Kernel.ProtobufSerializer.SerializeToFile(output, cachePath);
+ _protobufSerializer.SerializeToFile(output, cachePath);
}
/// <summary>
@@ -472,7 +484,7 @@ namespace MediaBrowser.Controller.Drawing
throw new ArgumentNullException("item");
}
- var supportedEnhancers = Kernel.ImageEnhancers.Where(i => i.Supports(item, imageType)).ToList();
+ var supportedEnhancers = _kernel.ImageEnhancers.Where(i => i.Supports(item, imageType)).ToList();
// No enhancement - don't cache
if (supportedEnhancers.Count == 0)
@@ -526,7 +538,7 @@ namespace MediaBrowser.Controller.Drawing
var dateModified = GetImageDateModified(item, imagePath);
- var supportedEnhancers = Kernel.ImageEnhancers.Where(i => i.Supports(item, imageType));
+ var supportedEnhancers = _kernel.ImageEnhancers.Where(i => i.Supports(item, imageType));
return GetImageCacheTag(imagePath, dateModified, supportedEnhancers, item, imageType);
}
@@ -600,11 +612,16 @@ namespace MediaBrowser.Controller.Drawing
return result;
}
+ public void Dispose()
+ {
+ Dispose(true);
+ }
+
/// <summary>
/// Releases unmanaged and - optionally - managed resources.
/// </summary>
/// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
- protected override void Dispose(bool dispose)
+ protected void Dispose(bool dispose)
{
if (dispose)
{
@@ -613,8 +630,6 @@ namespace MediaBrowser.Controller.Drawing
CroppedImageCache.Dispose();
EnhancedImageCache.Dispose();
}
-
- base.Dispose(dispose);
}
}
}
diff --git a/MediaBrowser.Controller/Entities/User.cs b/MediaBrowser.Controller/Entities/User.cs
index 426e7f18e..5abd3e5a8 100644
--- a/MediaBrowser.Controller/Entities/User.cs
+++ b/MediaBrowser.Controller/Entities/User.cs
@@ -1,15 +1,13 @@
using MediaBrowser.Common.Extensions;
-using MediaBrowser.Common.IO;
-using MediaBrowser.Common.Serialization;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.Configuration;
-using MediaBrowser.Model.Tasks;
using System;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Model.Serialization;
namespace MediaBrowser.Controller.Entities
{
@@ -170,7 +168,7 @@ namespace MediaBrowser.Controller.Entities
get
{
// Lazy load
- LazyInitializer.EnsureInitialized(ref _configuration, ref _configurationInitialized, ref _configurationSyncLock, () => XmlSerializer.GetXmlConfiguration<UserConfiguration>(ConfigurationFilePath, Logger));
+ LazyInitializer.EnsureInitialized(ref _configuration, ref _configurationInitialized, ref _configurationSyncLock, () => (UserConfiguration)Kernel.Instance.GetXmlConfiguration(typeof(UserConfiguration), ConfigurationFilePath));
return _configuration;
}
private set
@@ -338,9 +336,9 @@ namespace MediaBrowser.Controller.Entities
/// <summary>
/// Saves the current configuration to the file system
/// </summary>
- public void SaveConfiguration()
+ public void SaveConfiguration(IXmlSerializer serializer)
{
- XmlSerializer.SerializeToFile(Configuration, ConfigurationFilePath);
+ serializer.SerializeToFile(Configuration, ConfigurationFilePath);
}
/// <summary>
@@ -376,8 +374,9 @@ namespace MediaBrowser.Controller.Entities
/// Updates the configuration.
/// </summary>
/// <param name="config">The config.</param>
+ /// <param name="serializer">The serializer.</param>
/// <exception cref="System.ArgumentNullException">config</exception>
- public void UpdateConfiguration(UserConfiguration config)
+ public void UpdateConfiguration(UserConfiguration config, IXmlSerializer serializer)
{
if (config == null)
{
@@ -387,7 +386,7 @@ namespace MediaBrowser.Controller.Entities
var customLibraryChanged = config.UseCustomLibrary != Configuration.UseCustomLibrary;
Configuration = config;
- SaveConfiguration();
+ SaveConfiguration(serializer);
// Force these to be lazy loaded again
if (customLibraryChanged)
diff --git a/MediaBrowser.Controller/IServerApplicationPaths.cs b/MediaBrowser.Controller/IServerApplicationPaths.cs
new file mode 100644
index 000000000..b5fcdef28
--- /dev/null
+++ b/MediaBrowser.Controller/IServerApplicationPaths.cs
@@ -0,0 +1,85 @@
+using MediaBrowser.Common.Kernel;
+
+namespace MediaBrowser.Controller
+{
+ public interface IServerApplicationPaths : IApplicationPaths
+ {
+ /// <summary>
+ /// Gets the path to the base root media directory
+ /// </summary>
+ /// <value>The root folder path.</value>
+ string RootFolderPath { get; }
+
+ /// <summary>
+ /// Gets the path to the default user view directory. Used if no specific user view is defined.
+ /// </summary>
+ /// <value>The default user views path.</value>
+ string DefaultUserViewsPath { get; }
+
+ /// <summary>
+ /// Gets the path to localization data.
+ /// </summary>
+ /// <value>The localization path.</value>
+ string LocalizationPath { get; }
+
+ /// <summary>
+ /// Gets the path to the Images By Name directory
+ /// </summary>
+ /// <value>The images by name path.</value>
+ string ImagesByNamePath { get; }
+
+ /// <summary>
+ /// Gets the path to the People directory
+ /// </summary>
+ /// <value>The people path.</value>
+ string PeoplePath { get; }
+
+ /// <summary>
+ /// Gets the path to the Genre directory
+ /// </summary>
+ /// <value>The genre path.</value>
+ string GenrePath { get; }
+
+ /// <summary>
+ /// Gets the path to the Studio directory
+ /// </summary>
+ /// <value>The studio path.</value>
+ string StudioPath { get; }
+
+ /// <summary>
+ /// Gets the path to the Year directory
+ /// </summary>
+ /// <value>The year path.</value>
+ string YearPath { get; }
+
+ /// <summary>
+ /// Gets the path to the General IBN directory
+ /// </summary>
+ /// <value>The general path.</value>
+ string GeneralPath { get; }
+
+ /// <summary>
+ /// Gets the path to the Ratings IBN directory
+ /// </summary>
+ /// <value>The ratings path.</value>
+ string RatingsPath { get; }
+
+ /// <summary>
+ /// Gets the path to the user configuration directory
+ /// </summary>
+ /// <value>The user configuration directory path.</value>
+ string UserConfigurationDirectoryPath { get; }
+
+ /// <summary>
+ /// Gets the FF MPEG stream cache path.
+ /// </summary>
+ /// <value>The FF MPEG stream cache path.</value>
+ string FFMpegStreamCachePath { get; }
+
+ /// <summary>
+ /// Gets the folder path to tools
+ /// </summary>
+ /// <value>The media tools path.</value>
+ string MediaToolsPath { get; }
+ }
+} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs
index 5ee590bde..d879b888b 100644
--- a/MediaBrowser.Controller/Kernel.cs
+++ b/MediaBrowser.Controller/Kernel.cs
@@ -1,5 +1,6 @@
using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.Plugins;
+using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.IO;
@@ -16,6 +17,7 @@ using MediaBrowser.Controller.Updates;
using MediaBrowser.Controller.Weather;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Logging;
+using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.System;
using System;
using System.Collections.Generic;
@@ -28,7 +30,7 @@ namespace MediaBrowser.Controller
/// <summary>
/// Class Kernel
/// </summary>
- public class Kernel : BaseKernel<ServerConfiguration, ServerApplicationPaths>
+ public class Kernel : BaseKernel<ServerConfiguration, IServerApplicationPaths>
{
/// <summary>
/// The MB admin URL
@@ -291,17 +293,24 @@ namespace MediaBrowser.Controller
get { return 7359; }
}
+ private readonly ITaskManager _taskManager;
+
/// <summary>
/// Creates a kernel based on a Data path, which is akin to our current programdata path
/// </summary>
/// <param name="appHost">The app host.</param>
+ /// <param name="appPaths">The app paths.</param>
+ /// <param name="xmlSerializer">The XML serializer.</param>
+ /// <param name="taskManager">The task manager.</param>
/// <param name="logger">The logger.</param>
/// <exception cref="System.ArgumentNullException">isoManager</exception>
- public Kernel(IApplicationHost appHost, ILogger logger)
- : base(appHost, logger)
+ public Kernel(IApplicationHost appHost, IServerApplicationPaths appPaths, IXmlSerializer xmlSerializer, ITaskManager taskManager, ILogger logger)
+ : base(appHost, appPaths, xmlSerializer, logger)
{
Instance = this;
+ _taskManager = taskManager;
+
// For now there's no real way to inject this properly
BaseItem.Logger = logger;
Ratings.Logger = logger;
@@ -311,20 +320,9 @@ namespace MediaBrowser.Controller
}
/// <summary>
- /// Composes the exported values.
- /// </summary>
- protected override void RegisterExportedValues()
- {
- ApplicationHost.RegisterSingleInstance(this);
-
- base.RegisterExportedValues();
- }
-
- /// <summary>
/// Composes the parts with ioc container.
/// </summary>
- /// <param name="allTypes">All types.</param>
- protected override void FindParts(Type[] allTypes)
+ protected override void FindParts()
{
InstallationManager = (InstallationManager)ApplicationHost.CreateInstance(typeof(InstallationManager));
FFMpegManager = (FFMpegManager)ApplicationHost.CreateInstance(typeof(FFMpegManager));
@@ -335,21 +333,21 @@ namespace MediaBrowser.Controller
UserDataManager = (UserDataManager)ApplicationHost.CreateInstance(typeof(UserDataManager));
PluginSecurityManager = (PluginSecurityManager)ApplicationHost.CreateInstance(typeof(PluginSecurityManager));
- base.FindParts(allTypes);
-
- EntityResolutionIgnoreRules = GetExports<IResolutionIgnoreRule>(allTypes);
- UserDataRepositories = GetExports<IUserDataRepository>(allTypes);
- UserRepositories = GetExports<IUserRepository>(allTypes);
- DisplayPreferencesRepositories = GetExports<IDisplayPreferencesRepository>(allTypes);
- ItemRepositories = GetExports<IItemRepository>(allTypes);
- WeatherProviders = GetExports<IWeatherProvider>(allTypes);
- IntroProviders = GetExports<IIntroProvider>(allTypes);
- PluginConfigurationPages = GetExports<IPluginConfigurationPage>(allTypes);
- ImageEnhancers = GetExports<IImageEnhancer>(allTypes).OrderBy(e => e.Priority).ToArray();
- PluginFolderCreators = GetExports<IVirtualFolderCreator>(allTypes);
- StringFiles = GetExports<LocalizedStringData>(allTypes);
- EntityResolvers = GetExports<IBaseItemResolver>(allTypes).OrderBy(e => e.Priority).ToArray();
- MetadataProviders = GetExports<BaseMetadataProvider>(allTypes).OrderBy(e => e.Priority).ToArray();
+ base.FindParts();
+
+ EntityResolutionIgnoreRules = ApplicationHost.GetExports<IResolutionIgnoreRule>();
+ UserDataRepositories = ApplicationHost.GetExports<IUserDataRepository>();
+ UserRepositories = ApplicationHost.GetExports<IUserRepository>();
+ DisplayPreferencesRepositories = ApplicationHost.GetExports<IDisplayPreferencesRepository>();
+ ItemRepositories = ApplicationHost.GetExports<IItemRepository>();
+ WeatherProviders = ApplicationHost.GetExports<IWeatherProvider>();
+ IntroProviders = ApplicationHost.GetExports<IIntroProvider>();
+ PluginConfigurationPages = ApplicationHost.GetExports<IPluginConfigurationPage>();
+ ImageEnhancers = ApplicationHost.GetExports<IImageEnhancer>().OrderBy(e => e.Priority).ToArray();
+ PluginFolderCreators = ApplicationHost.GetExports<IVirtualFolderCreator>();
+ StringFiles = ApplicationHost.GetExports<LocalizedStringData>();
+ EntityResolvers = ApplicationHost.GetExports<IBaseItemResolver>().OrderBy(e => e.Priority).ToArray();
+ MetadataProviders = ApplicationHost.GetExports<BaseMetadataProvider>().OrderBy(e => e.Priority).ToArray();
}
/// <summary>
@@ -471,7 +469,7 @@ namespace MediaBrowser.Controller
{
DisposeFileSystemManager();
- FileSystemManager = new FileSystemManager(this, Logger, TaskManager);
+ FileSystemManager = new FileSystemManager(this, Logger, _taskManager);
FileSystemManager.StartWatchers();
}
@@ -570,11 +568,11 @@ namespace MediaBrowser.Controller
ProviderManager.ValidateCurrentlyRunningProviders();
// Any number of configuration settings could change the way the library is refreshed, so do that now
- TaskManager.CancelIfRunningAndQueue<RefreshMediaLibraryTask>();
+ _taskManager.CancelIfRunningAndQueue<RefreshMediaLibraryTask>();
if (refreshPeopleAfterUpdate)
{
- TaskManager.CancelIfRunningAndQueue<PeopleValidationTask>();
+ _taskManager.CancelIfRunningAndQueue<PeopleValidationTask>();
}
});
}
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
index 35540020e..1e901055e 100644
--- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj
+++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
@@ -110,6 +110,7 @@
<Compile Include="IO\FileSystem.cs" />
<Compile Include="IO\FileSystemManager.cs" />
<Compile Include="IO\NativeMethods.cs" />
+ <Compile Include="IServerApplicationPaths.cs" />
<Compile Include="Library\ChildrenChangedEventArgs.cs" />
<Compile Include="Library\DtoBuilder.cs" />
<Compile Include="Library\Profiler.cs" />
@@ -183,7 +184,6 @@
<Compile Include="ScheduledTasks\PeopleValidationTask.cs" />
<Compile Include="ScheduledTasks\PluginUpdateTask.cs" />
<Compile Include="ScheduledTasks\RefreshMediaLibraryTask.cs" />
- <Compile Include="ServerApplicationPaths.cs" />
<Compile Include="Library\ItemResolveArgs.cs" />
<Compile Include="IO\DirectoryWatchers.cs" />
<Compile Include="IO\FileData.cs" />
diff --git a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs
index 9c9b0e9f2..0f535208b 100644
--- a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs
+++ b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs
@@ -1,12 +1,10 @@
-using MediaBrowser.Common.Extensions;
-using MediaBrowser.Common.IO;
-using MediaBrowser.Common.Kernel;
-using MediaBrowser.Common.Serialization;
+using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Logging;
+using MediaBrowser.Model.Serialization;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -23,7 +21,7 @@ namespace MediaBrowser.Controller.MediaInfo
/// <summary>
/// Class FFMpegManager
/// </summary>
- public class FFMpegManager : BaseManager<Kernel>
+ public class FFMpegManager : IDisposable
{
/// <summary>
/// Gets or sets the video image cache.
@@ -47,30 +45,66 @@ namespace MediaBrowser.Controller.MediaInfo
/// Gets or sets the zip client.
/// </summary>
/// <value>The zip client.</value>
- private IZipClient ZipClient { get; set; }
+ private readonly IZipClient _zipClient;
/// <summary>
/// The _logger
/// </summary>
+ private readonly Kernel _kernel;
+
+ /// <summary>
+ /// The _logger
+ /// </summary>
private readonly ILogger _logger;
/// <summary>
+ /// Gets the json serializer.
+ /// </summary>
+ /// <value>The json serializer.</value>
+ private readonly IJsonSerializer _jsonSerializer;
+
+ /// <summary>
+ /// The _protobuf serializer
+ /// </summary>
+ private readonly IProtobufSerializer _protobufSerializer;
+
+ /// <summary>
/// Initializes a new instance of the <see cref="FFMpegManager" /> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="zipClient">The zip client.</param>
+ /// <param name="jsonSerializer">The json serializer.</param>
+ /// <param name="protobufSerializer">The protobuf serializer.</param>
/// <param name="logger">The logger.</param>
/// <exception cref="System.ArgumentNullException">zipClient</exception>
- public FFMpegManager(Kernel kernel, IZipClient zipClient, ILogger logger)
- : base(kernel)
+ public FFMpegManager(Kernel kernel, IZipClient zipClient, IJsonSerializer jsonSerializer, IProtobufSerializer protobufSerializer, ILogger logger)
{
+ if (kernel == null)
+ {
+ throw new ArgumentNullException("kernel");
+ }
if (zipClient == null)
{
throw new ArgumentNullException("zipClient");
}
+ if (jsonSerializer == null)
+ {
+ throw new ArgumentNullException("jsonSerializer");
+ }
+ if (protobufSerializer == null)
+ {
+ throw new ArgumentNullException("protobufSerializer");
+ }
+ if (logger == null)
+ {
+ throw new ArgumentNullException("logger");
+ }
+ _kernel = kernel;
+ _zipClient = zipClient;
+ _jsonSerializer = jsonSerializer;
+ _protobufSerializer = protobufSerializer;
_logger = logger;
- ZipClient = zipClient;
// Not crazy about this but it's the only way to suppress ffmpeg crash dialog boxes
SetErrorMode(ErrorModes.SEM_FAILCRITICALERRORS | ErrorModes.SEM_NOALIGNMENTFAULTEXCEPT | ErrorModes.SEM_NOGPFAULTERRORBOX | ErrorModes.SEM_NOOPENFILEERRORBOX);
@@ -82,11 +116,16 @@ namespace MediaBrowser.Controller.MediaInfo
Task.Run(() => VersionedDirectoryPath = GetVersionedDirectoryPath());
}
+ public void Dispose()
+ {
+ Dispose(true);
+ }
+
/// <summary>
/// Releases unmanaged and - optionally - managed resources.
/// </summary>
/// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
- protected override void Dispose(bool dispose)
+ protected void Dispose(bool dispose)
{
if (dispose)
{
@@ -95,8 +134,6 @@ namespace MediaBrowser.Controller.MediaInfo
AudioImageCache.Dispose();
VideoImageCache.Dispose();
}
-
- base.Dispose(dispose);
}
/// <summary>
@@ -186,7 +223,7 @@ namespace MediaBrowser.Controller.MediaInfo
{
if (_videoImagesDataPath == null)
{
- _videoImagesDataPath = Path.Combine(Kernel.ApplicationPaths.DataPath, "ffmpeg-video-images");
+ _videoImagesDataPath = Path.Combine(_kernel.ApplicationPaths.DataPath, "ffmpeg-video-images");
if (!Directory.Exists(_videoImagesDataPath))
{
@@ -212,7 +249,7 @@ namespace MediaBrowser.Controller.MediaInfo
{
if (_audioImagesDataPath == null)
{
- _audioImagesDataPath = Path.Combine(Kernel.ApplicationPaths.DataPath, "ffmpeg-audio-images");
+ _audioImagesDataPath = Path.Combine(_kernel.ApplicationPaths.DataPath, "ffmpeg-audio-images");
if (!Directory.Exists(_audioImagesDataPath))
{
@@ -238,7 +275,7 @@ namespace MediaBrowser.Controller.MediaInfo
{
if (_subtitleCachePath == null)
{
- _subtitleCachePath = Path.Combine(Kernel.ApplicationPaths.CachePath, "ffmpeg-subtitles");
+ _subtitleCachePath = Path.Combine(_kernel.ApplicationPaths.CachePath, "ffmpeg-subtitles");
if (!Directory.Exists(_subtitleCachePath))
{
@@ -265,7 +302,7 @@ namespace MediaBrowser.Controller.MediaInfo
var filename = resource.Substring(resource.IndexOf(prefix, StringComparison.OrdinalIgnoreCase) + prefix.Length);
- var versionedDirectoryPath = Path.Combine(Kernel.ApplicationPaths.MediaToolsPath, Path.GetFileNameWithoutExtension(filename));
+ var versionedDirectoryPath = Path.Combine(_kernel.ApplicationPaths.MediaToolsPath, Path.GetFileNameWithoutExtension(filename));
if (!Directory.Exists(versionedDirectoryPath))
{
@@ -287,7 +324,7 @@ namespace MediaBrowser.Controller.MediaInfo
{
using (var resourceStream = assembly.GetManifestResourceStream(zipFileResourcePath))
{
- ZipClient.ExtractAll(resourceStream, targetPath, false);
+ _zipClient.ExtractAll(resourceStream, targetPath, false);
}
}
@@ -353,7 +390,7 @@ namespace MediaBrowser.Controller.MediaInfo
// Avoid File.Exists by just trying to deserialize
try
{
- return Task.FromResult(Kernel.ProtobufSerializer.DeserializeFromFile<FFProbeResult>(cacheFilePath));
+ return Task.FromResult(_protobufSerializer.DeserializeFromFile<FFProbeResult>(cacheFilePath));
}
catch (FileNotFoundException)
{
@@ -428,7 +465,7 @@ namespace MediaBrowser.Controller.MediaInfo
process.BeginErrorReadLine();
}
- result = JsonSerializer.DeserializeFromStream<FFProbeResult>(process.StandardOutput.BaseStream);
+ result = _jsonSerializer.DeserializeFromStream<FFProbeResult>(process.StandardOutput.BaseStream);
if (extractChapters)
{
@@ -470,7 +507,7 @@ namespace MediaBrowser.Controller.MediaInfo
AddChapters(result, standardError);
}
- Kernel.ProtobufSerializer.SerializeToFile(result, cacheFile);
+ _protobufSerializer.SerializeToFile(result, cacheFile);
return result;
}
@@ -595,7 +632,7 @@ namespace MediaBrowser.Controller.MediaInfo
if (saveItem && changesMade)
{
- await Kernel.ItemRepository.SaveItem(video, CancellationToken.None).ConfigureAwait(false);
+ await _kernel.ItemRepository.SaveItem(video, CancellationToken.None).ConfigureAwait(false);
}
}
diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs
index 443d28b67..8905656ef 100644
--- a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs
+++ b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs
@@ -4,6 +4,7 @@ using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.MediaInfo;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.MediaInfo;
+using MediaBrowser.Model.Serialization;
using System;
using System.Collections.Generic;
using System.IO;
@@ -28,29 +29,44 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
/// Gets or sets the bluray examiner.
/// </summary>
/// <value>The bluray examiner.</value>
- private IBlurayExaminer BlurayExaminer { get; set; }
+ private readonly IBlurayExaminer _blurayExaminer;
- /// <summary>
+ /// <summary>
/// The _iso manager
/// </summary>
private readonly IIsoManager _isoManager;
/// <summary>
+ /// The _protobuf serializer
+ /// </summary>
+ private readonly IProtobufSerializer _protobufSerializer;
+
+ /// <summary>
/// Initializes a new instance of the <see cref="FFProbeVideoInfoProvider" /> class.
/// </summary>
/// <param name="isoManager">The iso manager.</param>
/// <param name="blurayExaminer">The bluray examiner.</param>
+ /// <param name="protobufSerializer">The protobuf serializer.</param>
/// <exception cref="System.ArgumentNullException">blurayExaminer</exception>
- public FFProbeVideoInfoProvider(IIsoManager isoManager, IBlurayExaminer blurayExaminer)
+ public FFProbeVideoInfoProvider(IIsoManager isoManager, IBlurayExaminer blurayExaminer, IProtobufSerializer protobufSerializer)
: base()
{
+ if (isoManager == null)
+ {
+ throw new ArgumentNullException("isoManager");
+ }
if (blurayExaminer == null)
{
throw new ArgumentNullException("blurayExaminer");
}
+ if (protobufSerializer == null)
+ {
+ throw new ArgumentNullException("protobufSerializer");
+ }
- BlurayExaminer = blurayExaminer;
+ _blurayExaminer = blurayExaminer;
_isoManager = isoManager;
+ _protobufSerializer = protobufSerializer;
BdInfoCache = new FileSystemRepository(Path.Combine(Kernel.Instance.ApplicationPaths.CachePath, "bdinfo"));
}
@@ -315,13 +331,13 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
try
{
- result = Kernel.Instance.ProtobufSerializer.DeserializeFromFile<BlurayDiscInfo>(cacheFile);
+ result = _protobufSerializer.DeserializeFromFile<BlurayDiscInfo>(cacheFile);
}
catch (FileNotFoundException)
{
result = GetBDInfo(inputPath);
- Kernel.Instance.ProtobufSerializer.SerializeToFile(result, cacheFile);
+ _protobufSerializer.SerializeToFile(result, cacheFile);
}
cancellationToken.ThrowIfCancellationRequested();
@@ -400,7 +416,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
/// <returns>VideoStream.</returns>
private BlurayDiscInfo GetBDInfo(string path)
{
- return BlurayExaminer.GetDiscInfo(path);
+ return _blurayExaminer.GetDiscInfo(path);
}
/// <summary>
diff --git a/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs
index 72f8a3fc7..bc261de6d 100644
--- a/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs
+++ b/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs
@@ -1,5 +1,4 @@
using MediaBrowser.Common.Extensions;
-using MediaBrowser.Common.Serialization;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Model.Entities;
@@ -15,6 +14,7 @@ using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Model.Serialization;
namespace MediaBrowser.Controller.Providers.Movies
{
@@ -31,6 +31,27 @@ namespace MediaBrowser.Controller.Providers.Movies
public class MovieDbProvider : BaseMetadataProvider
{
/// <summary>
+ /// Gets the json serializer.
+ /// </summary>
+ /// <value>The json serializer.</value>
+ protected IJsonSerializer JsonSerializer { get; private set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MovieDbProvider" /> class.
+ /// </summary>
+ /// <param name="jsonSerializer">The json serializer.</param>
+ /// <exception cref="System.ArgumentNullException">jsonSerializer</exception>
+ public MovieDbProvider(IJsonSerializer jsonSerializer)
+ : base()
+ {
+ if (jsonSerializer == null)
+ {
+ throw new ArgumentNullException("jsonSerializer");
+ }
+ JsonSerializer = jsonSerializer;
+ }
+
+ /// <summary>
/// Gets the priority.
/// </summary>
/// <value>The priority.</value>
@@ -93,7 +114,7 @@ namespace MediaBrowser.Controller.Providers.Movies
{
get
{
- LazyInitializer.EnsureInitialized(ref _tmdbSettingsTask, ref _tmdbSettingsTaskInitialized, ref _tmdbSettingsTaskSyncLock, GetTmdbSettings);
+ LazyInitializer.EnsureInitialized(ref _tmdbSettingsTask, ref _tmdbSettingsTaskInitialized, ref _tmdbSettingsTaskSyncLock, () => GetTmdbSettings(JsonSerializer));
return _tmdbSettingsTask;
}
}
@@ -102,13 +123,13 @@ namespace MediaBrowser.Controller.Providers.Movies
/// Gets the TMDB settings.
/// </summary>
/// <returns>Task{TmdbSettingsResult}.</returns>
- private static async Task<TmdbSettingsResult> GetTmdbSettings()
+ private static async Task<TmdbSettingsResult> GetTmdbSettings(IJsonSerializer jsonSerializer)
{
try
{
using (var json = await Kernel.Instance.HttpManager.Get(String.Format(TmdbConfigUrl, ApiKey), Kernel.Instance.ResourcePools.MovieDb, CancellationToken.None).ConfigureAwait(false))
{
- return JsonSerializer.DeserializeFromStream<TmdbSettingsResult>(json);
+ return jsonSerializer.DeserializeFromStream<TmdbSettingsResult>(json);
}
}
catch (HttpException e)
@@ -168,7 +189,7 @@ namespace MediaBrowser.Controller.Providers.Movies
{
//in addition to ours, we need to set the last refreshed time for the local data provider
//so it won't see the new files we download and process them all over again
- if (JsonProvider == null) JsonProvider = new MovieProviderFromJson();
+ if (JsonProvider == null) JsonProvider = new MovieProviderFromJson(JsonSerializer);
var data = item.ProviderData.GetValueOrDefault(JsonProvider.Id, new BaseProviderInfo { ProviderId = JsonProvider.Id });
data.LastRefreshed = value;
item.ProviderData[JsonProvider.Id] = data;
diff --git a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs
index 45079ddda..5de17aab0 100644
--- a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs
+++ b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs
@@ -1,5 +1,5 @@
-using MediaBrowser.Common.Serialization;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Model.Serialization;
using System;
using System.IO;
using System.Threading;
@@ -12,6 +12,10 @@ namespace MediaBrowser.Controller.Providers.Movies
/// </summary>
public class MovieProviderFromJson : MovieDbProvider
{
+ public MovieProviderFromJson(IJsonSerializer jsonSerializer) : base(jsonSerializer)
+ {
+ }
+
/// <summary>
/// Gets the priority.
/// </summary>
diff --git a/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs b/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs
index b4b4933e2..7517ec65c 100644
--- a/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs
+++ b/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs
@@ -1,5 +1,5 @@
-using MediaBrowser.Common.Serialization;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Model.Serialization;
using System;
using System.IO;
using System.Threading;
@@ -12,6 +12,10 @@ namespace MediaBrowser.Controller.Providers.Movies
/// </summary>
class PersonProviderFromJson : TmdbPersonProvider
{
+ public PersonProviderFromJson(IJsonSerializer jsonSerializer) : base(jsonSerializer)
+ {
+ }
+
/// <summary>
/// Supportses the specified item.
/// </summary>
diff --git a/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs b/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs
index 7b5d62fb0..32013614c 100644
--- a/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs
+++ b/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs
@@ -1,5 +1,4 @@
-using MediaBrowser.Common.Serialization;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Net;
using System;
@@ -10,6 +9,7 @@ using System.Linq;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Model.Serialization;
namespace MediaBrowser.Controller.Providers.Movies
{
@@ -24,6 +24,27 @@ namespace MediaBrowser.Controller.Providers.Movies
protected const string MetaFileName = "MBPerson.json";
/// <summary>
+ /// Gets the json serializer.
+ /// </summary>
+ /// <value>The json serializer.</value>
+ protected IJsonSerializer JsonSerializer { get; private set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MovieDbProvider" /> class.
+ /// </summary>
+ /// <param name="jsonSerializer">The json serializer.</param>
+ /// <exception cref="System.ArgumentNullException">jsonSerializer</exception>
+ public TmdbPersonProvider(IJsonSerializer jsonSerializer)
+ : base()
+ {
+ if (jsonSerializer == null)
+ {
+ throw new ArgumentNullException("jsonSerializer");
+ }
+ JsonSerializer = jsonSerializer;
+ }
+
+ /// <summary>
/// Supportses the specified item.
/// </summary>
/// <param name="item">The item.</param>
@@ -56,7 +77,7 @@ namespace MediaBrowser.Controller.Providers.Movies
protected override async Task<bool> FetchAsyncInternal(BaseItem item, bool force, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
-
+
var person = (Person)item;
var tasks = new List<Task>();
@@ -169,7 +190,7 @@ namespace MediaBrowser.Controller.Providers.Movies
}
cancellationToken.ThrowIfCancellationRequested();
-
+
if (searchResult != null && searchResult.Biography != null)
{
ProcessInfo(person, searchResult);
diff --git a/MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs b/MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs
index 1a64bb853..536033719 100644
--- a/MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs
+++ b/MediaBrowser.Controller/ScheduledTasks/ChapterImagesTask.cs
@@ -28,9 +28,9 @@ namespace MediaBrowser.Controller.ScheduledTasks
/// Creates the triggers that define when the task will run
/// </summary>
/// <returns>IEnumerable{BaseTaskTrigger}.</returns>
- protected override IEnumerable<BaseTaskTrigger> GetDefaultTriggers()
+ public override IEnumerable<ITaskTrigger> GetDefaultTriggers()
{
- return new BaseTaskTrigger[]
+ return new ITaskTrigger[]
{
new DailyTrigger { TimeOfDay = TimeSpan.FromHours(4) }
};
diff --git a/MediaBrowser.Controller/ScheduledTasks/ImageCleanupTask.cs b/MediaBrowser.Controller/ScheduledTasks/ImageCleanupTask.cs
index 8dd0895c9..7e0094a67 100644
--- a/MediaBrowser.Controller/ScheduledTasks/ImageCleanupTask.cs
+++ b/MediaBrowser.Controller/ScheduledTasks/ImageCleanupTask.cs
@@ -20,7 +20,8 @@ namespace MediaBrowser.Controller.ScheduledTasks
/// Initializes a new instance of the <see cref="ImageCleanupTask" /> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
- /// <param name="logger"></param>
+ /// <param name="taskManager">The task manager.</param>
+ /// <param name="logger">The logger.</param>
public ImageCleanupTask(Kernel kernel, ITaskManager taskManager, ILogger logger)
: base(kernel, taskManager, logger)
{
@@ -30,9 +31,9 @@ namespace MediaBrowser.Controller.ScheduledTasks
/// Creates the triggers that define when the task will run
/// </summary>
/// <returns>IEnumerable{BaseTaskTrigger}.</returns>
- protected override IEnumerable<BaseTaskTrigger> GetDefaultTriggers()
+ public override IEnumerable<ITaskTrigger> GetDefaultTriggers()
{
- return new BaseTaskTrigger[]
+ return new ITaskTrigger[]
{
new DailyTrigger { TimeOfDay = TimeSpan.FromHours(2) }
};
diff --git a/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs b/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs
index ee55ff2e9..595de684d 100644
--- a/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs
+++ b/MediaBrowser.Controller/ScheduledTasks/PeopleValidationTask.cs
@@ -26,9 +26,9 @@ namespace MediaBrowser.Controller.ScheduledTasks
/// Creates the triggers that define when the task will run
/// </summary>
/// <returns>IEnumerable{BaseTaskTrigger}.</returns>
- protected override IEnumerable<BaseTaskTrigger> GetDefaultTriggers()
+ public override IEnumerable<ITaskTrigger> GetDefaultTriggers()
{
- return new BaseTaskTrigger[]
+ return new ITaskTrigger[]
{
new DailyTrigger { TimeOfDay = TimeSpan.FromHours(2) },
diff --git a/MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs b/MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs
index 854c3b82f..7a1007f1b 100644
--- a/MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs
+++ b/MediaBrowser.Controller/ScheduledTasks/PluginUpdateTask.cs
@@ -29,9 +29,9 @@ namespace MediaBrowser.Controller.ScheduledTasks
/// Creates the triggers that define when the task will run
/// </summary>
/// <returns>IEnumerable{BaseTaskTrigger}.</returns>
- protected override IEnumerable<BaseTaskTrigger> GetDefaultTriggers()
+ public override IEnumerable<ITaskTrigger> GetDefaultTriggers()
{
- return new BaseTaskTrigger[] {
+ return new ITaskTrigger[] {
// 1:30am
new DailyTrigger { TimeOfDay = TimeSpan.FromHours(1.5) },
diff --git a/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs b/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs
index 76e60f2ef..104b432f4 100644
--- a/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs
+++ b/MediaBrowser.Controller/ScheduledTasks/RefreshMediaLibraryTask.cs
@@ -27,9 +27,9 @@ namespace MediaBrowser.Controller.ScheduledTasks
/// Gets the default triggers.
/// </summary>
/// <returns>IEnumerable{BaseTaskTrigger}.</returns>
- protected override IEnumerable<BaseTaskTrigger> GetDefaultTriggers()
+ public override IEnumerable<ITaskTrigger> GetDefaultTriggers()
{
- return new BaseTaskTrigger[] {
+ return new ITaskTrigger[] {
new StartupTrigger(),
diff --git a/MediaBrowser.Controller/ServerApplicationPaths.cs b/MediaBrowser.Controller/ServerApplicationPaths.cs
deleted file mode 100644
index a376afed8..000000000
--- a/MediaBrowser.Controller/ServerApplicationPaths.cs
+++ /dev/null
@@ -1,334 +0,0 @@
-using MediaBrowser.Common.Kernel;
-using System.IO;
-
-namespace MediaBrowser.Controller
-{
- /// <summary>
- /// Extends BaseApplicationPaths to add paths that are only applicable on the server
- /// </summary>
- public class ServerApplicationPaths : BaseApplicationPaths
- {
- /// <summary>
- /// The _root folder path
- /// </summary>
- private string _rootFolderPath;
- /// <summary>
- /// Gets the path to the base root media directory
- /// </summary>
- /// <value>The root folder path.</value>
- public string RootFolderPath
- {
- get
- {
- if (_rootFolderPath == null)
- {
- _rootFolderPath = Path.Combine(ProgramDataPath, "Root");
- if (!Directory.Exists(_rootFolderPath))
- {
- Directory.CreateDirectory(_rootFolderPath);
- }
- }
- return _rootFolderPath;
- }
- }
-
- /// <summary>
- /// The _default user views path
- /// </summary>
- private string _defaultUserViewsPath;
- /// <summary>
- /// Gets the path to the default user view directory. Used if no specific user view is defined.
- /// </summary>
- /// <value>The default user views path.</value>
- public string DefaultUserViewsPath
- {
- get
- {
- if (_defaultUserViewsPath == null)
- {
- _defaultUserViewsPath = Path.Combine(RootFolderPath, "Default");
- if (!Directory.Exists(_defaultUserViewsPath))
- {
- Directory.CreateDirectory(_defaultUserViewsPath);
- }
- }
- return _defaultUserViewsPath;
- }
- }
-
- /// <summary>
- /// The _localization path
- /// </summary>
- private string _localizationPath;
- /// <summary>
- /// Gets the path to localization data.
- /// </summary>
- /// <value>The localization path.</value>
- public string LocalizationPath
- {
- get
- {
- if (_localizationPath == null)
- {
- _localizationPath = Path.Combine(ProgramDataPath, "Localization");
- if (!Directory.Exists(_localizationPath))
- {
- Directory.CreateDirectory(_localizationPath);
- }
- }
- return _localizationPath;
- }
- }
-
- /// <summary>
- /// The _ibn path
- /// </summary>
- private string _ibnPath;
- /// <summary>
- /// Gets the path to the Images By Name directory
- /// </summary>
- /// <value>The images by name path.</value>
- public string ImagesByNamePath
- {
- get
- {
- if (_ibnPath == null)
- {
- _ibnPath = Path.Combine(ProgramDataPath, "ImagesByName");
- if (!Directory.Exists(_ibnPath))
- {
- Directory.CreateDirectory(_ibnPath);
- }
- }
-
- return _ibnPath;
- }
- }
-
- /// <summary>
- /// The _people path
- /// </summary>
- private string _peoplePath;
- /// <summary>
- /// Gets the path to the People directory
- /// </summary>
- /// <value>The people path.</value>
- public string PeoplePath
- {
- get
- {
- if (_peoplePath == null)
- {
- _peoplePath = Path.Combine(ImagesByNamePath, "People");
- if (!Directory.Exists(_peoplePath))
- {
- Directory.CreateDirectory(_peoplePath);
- }
- }
-
- return _peoplePath;
- }
- }
-
- /// <summary>
- /// The _genre path
- /// </summary>
- private string _genrePath;
- /// <summary>
- /// Gets the path to the Genre directory
- /// </summary>
- /// <value>The genre path.</value>
- public string GenrePath
- {
- get
- {
- if (_genrePath == null)
- {
- _genrePath = Path.Combine(ImagesByNamePath, "Genre");
- if (!Directory.Exists(_genrePath))
- {
- Directory.CreateDirectory(_genrePath);
- }
- }
-
- return _genrePath;
- }
- }
-
- /// <summary>
- /// The _studio path
- /// </summary>
- private string _studioPath;
- /// <summary>
- /// Gets the path to the Studio directory
- /// </summary>
- /// <value>The studio path.</value>
- public string StudioPath
- {
- get
- {
- if (_studioPath == null)
- {
- _studioPath = Path.Combine(ImagesByNamePath, "Studio");
- if (!Directory.Exists(_studioPath))
- {
- Directory.CreateDirectory(_studioPath);
- }
- }
-
- return _studioPath;
- }
- }
-
- /// <summary>
- /// The _year path
- /// </summary>
- private string _yearPath;
- /// <summary>
- /// Gets the path to the Year directory
- /// </summary>
- /// <value>The year path.</value>
- public string YearPath
- {
- get
- {
- if (_yearPath == null)
- {
- _yearPath = Path.Combine(ImagesByNamePath, "Year");
- if (!Directory.Exists(_yearPath))
- {
- Directory.CreateDirectory(_yearPath);
- }
- }
-
- return _yearPath;
- }
- }
-
- /// <summary>
- /// The _general path
- /// </summary>
- private string _generalPath;
- /// <summary>
- /// Gets the path to the General IBN directory
- /// </summary>
- /// <value>The general path.</value>
- public string GeneralPath
- {
- get
- {
- if (_generalPath == null)
- {
- _generalPath = Path.Combine(ImagesByNamePath, "General");
- if (!Directory.Exists(_generalPath))
- {
- Directory.CreateDirectory(_generalPath);
- }
- }
-
- return _generalPath;
- }
- }
-
- /// <summary>
- /// The _ratings path
- /// </summary>
- private string _ratingsPath;
- /// <summary>
- /// Gets the path to the Ratings IBN directory
- /// </summary>
- /// <value>The ratings path.</value>
- public string RatingsPath
- {
- get
- {
- if (_ratingsPath == null)
- {
- _ratingsPath = Path.Combine(ImagesByNamePath, "Ratings");
- if (!Directory.Exists(_ratingsPath))
- {
- Directory.CreateDirectory(_ratingsPath);
- }
- }
-
- return _ratingsPath;
- }
- }
-
- /// <summary>
- /// The _user configuration directory path
- /// </summary>
- private string _userConfigurationDirectoryPath;
- /// <summary>
- /// Gets the path to the user configuration directory
- /// </summary>
- /// <value>The user configuration directory path.</value>
- public string UserConfigurationDirectoryPath
- {
- get
- {
- if (_userConfigurationDirectoryPath == null)
- {
- _userConfigurationDirectoryPath = Path.Combine(ConfigurationDirectoryPath, "users");
- if (!Directory.Exists(_userConfigurationDirectoryPath))
- {
- Directory.CreateDirectory(_userConfigurationDirectoryPath);
- }
- }
- return _userConfigurationDirectoryPath;
- }
- }
-
- /// <summary>
- /// The _f F MPEG stream cache path
- /// </summary>
- private string _fFMpegStreamCachePath;
- /// <summary>
- /// Gets the FF MPEG stream cache path.
- /// </summary>
- /// <value>The FF MPEG stream cache path.</value>
- public string FFMpegStreamCachePath
- {
- get
- {
- if (_fFMpegStreamCachePath == null)
- {
- _fFMpegStreamCachePath = Path.Combine(CachePath, "ffmpeg-streams");
-
- if (!Directory.Exists(_fFMpegStreamCachePath))
- {
- Directory.CreateDirectory(_fFMpegStreamCachePath);
- }
- }
-
- return _fFMpegStreamCachePath;
- }
- }
-
- /// <summary>
- /// The _media tools path
- /// </summary>
- private string _mediaToolsPath;
- /// <summary>
- /// Gets the folder path to tools
- /// </summary>
- /// <value>The media tools path.</value>
- public string MediaToolsPath
- {
- get
- {
- if (_mediaToolsPath == null)
- {
- _mediaToolsPath = Path.Combine(ProgramDataPath, "MediaTools");
-
- if (!Directory.Exists(_mediaToolsPath))
- {
- Directory.CreateDirectory(_mediaToolsPath);
- }
- }
-
- return _mediaToolsPath;
- }
- }
- }
-}
diff --git a/MediaBrowser.Controller/Updates/InstallationManager.cs b/MediaBrowser.Controller/Updates/InstallationManager.cs
index bef5a6472..af544dd51 100644
--- a/MediaBrowser.Controller/Updates/InstallationManager.cs
+++ b/MediaBrowser.Controller/Updates/InstallationManager.cs
@@ -1,18 +1,17 @@
-using System.Security.Cryptography;
-using MediaBrowser.Common.Events;
-using MediaBrowser.Common.Kernel;
+using MediaBrowser.Common.Events;
using MediaBrowser.Common.Net;
using MediaBrowser.Common.Plugins;
using MediaBrowser.Common.Progress;
-using MediaBrowser.Common.Serialization;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Logging;
+using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Updates;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Security.Cryptography;
using System.Threading;
using System.Threading.Tasks;
@@ -32,8 +31,8 @@ namespace MediaBrowser.Controller.Updates
/// <summary>
/// The completed installations
/// </summary>
- public readonly ConcurrentBag<InstallationInfo> CompletedInstallations = new ConcurrentBag<InstallationInfo>();
-
+ public readonly ConcurrentBag<InstallationInfo> CompletedInstallations = new ConcurrentBag<InstallationInfo>();
+
#region PluginUninstalled Event
/// <summary>
/// Occurs when [plugin uninstalled].
@@ -68,7 +67,7 @@ namespace MediaBrowser.Controller.Updates
_logger.Info("Plugin updated: {0} {1} {2}", newVersion.name, newVersion.version, newVersion.classification);
EventHelper.QueueEventIfNotNull(PluginUpdated, this, new GenericEventArgs<Tuple<IPlugin, PackageVersionInfo>> { Argument = new Tuple<IPlugin, PackageVersionInfo>(plugin, newVersion) }, _logger);
-
+
Kernel.NotifyPendingRestart();
}
#endregion
@@ -109,14 +108,21 @@ namespace MediaBrowser.Controller.Updates
private readonly INetworkManager _networkManager;
/// <summary>
+ /// Gets the json serializer.
+ /// </summary>
+ /// <value>The json serializer.</value>
+ protected IJsonSerializer JsonSerializer { get; private set; }
+
+ /// <summary>
/// Initializes a new instance of the <see cref="InstallationManager" /> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="zipClient">The zip client.</param>
/// <param name="networkManager">The network manager.</param>
+ /// <param name="jsonSerializer"></param>
/// <param name="logger">The logger.</param>
/// <exception cref="System.ArgumentNullException">zipClient</exception>
- public InstallationManager(Kernel kernel, IZipClient zipClient, INetworkManager networkManager, ILogger logger)
+ public InstallationManager(Kernel kernel, IZipClient zipClient, INetworkManager networkManager, IJsonSerializer jsonSerializer, ILogger logger)
: base(kernel)
{
if (zipClient == null)
@@ -131,6 +137,12 @@ namespace MediaBrowser.Controller.Updates
{
throw new ArgumentNullException("logger");
}
+ if (jsonSerializer == null)
+ {
+ throw new ArgumentNullException("jsonSerializer");
+ }
+
+ JsonSerializer = jsonSerializer;
_networkManager = networkManager;
_logger = logger;
@@ -161,7 +173,7 @@ namespace MediaBrowser.Controller.Updates
package.versions = package.versions.Where(v => !string.IsNullOrWhiteSpace(v.sourceUrl))
.OrderByDescending(v => v.version).ToList();
}
-
+
if (packageType.HasValue)
{
packages = packages.Where(p => p.type == packageType.Value).ToList();
@@ -178,7 +190,7 @@ namespace MediaBrowser.Controller.Updates
// Remove packages with no versions
packages = packages.Where(p => p.versions.Any()).ToList();
-
+
return packages;
}
}
@@ -320,7 +332,7 @@ namespace MediaBrowser.Controller.Updates
var innerCancellationTokenSource = new CancellationTokenSource();
var tuple = new Tuple<InstallationInfo, CancellationTokenSource>(installationInfo, innerCancellationTokenSource);
-
+
// Add it to the in-progress list
lock (CurrentInstallations)
{
@@ -364,7 +376,7 @@ namespace MediaBrowser.Controller.Updates
_logger.Info("Package installation cancelled: {0} {1}", package.name, package.versionStr);
Kernel.TcpManager.SendWebSocketMessage("PackageInstallationCancelled", installationInfo);
-
+
throw;
}
catch
@@ -373,7 +385,7 @@ namespace MediaBrowser.Controller.Updates
{
CurrentInstallations.Remove(tuple);
}
-
+
Kernel.TcpManager.SendWebSocketMessage("PackageInstallationFailed", installationInfo);
throw;
@@ -421,7 +433,7 @@ namespace MediaBrowser.Controller.Updates
}
cancellationToken.ThrowIfCancellationRequested();
-
+
// Success - move it to the real target based on type
if (isArchive)
{
@@ -435,7 +447,7 @@ namespace MediaBrowser.Controller.Updates
throw;
}
- }
+ }
else
{
try
@@ -448,8 +460,8 @@ namespace MediaBrowser.Controller.Updates
_logger.ErrorException("Error attempting to move file from {0} to {1}", e, tempFile, target);
throw;
}
- }
-
+ }
+
// Set last update time if we were installed before
var plugin = Kernel.Plugins.FirstOrDefault(p => p.Name.Equals(package.name, StringComparison.OrdinalIgnoreCase));