diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs
index 3b1499419..4b9d78c9c 100644
--- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs
+++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs
@@ -17,8 +17,6 @@ using MediaBrowser.Model.IO;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Updates;
-using ServiceStack;
-using SimpleInjector;
using System;
using System.Collections.Generic;
using System.IO;
@@ -41,7 +39,7 @@ namespace MediaBrowser.Common.Implementations
/// Class BaseApplicationHost
///
/// The type of the T application paths type.
- public abstract class BaseApplicationHost : IApplicationHost, IDependencyContainer
+ public abstract class BaseApplicationHost : IApplicationHost
where TApplicationPathsType : class, IApplicationPaths
{
///
@@ -84,11 +82,6 @@ namespace MediaBrowser.Common.Implementations
/// The application paths.
protected TApplicationPathsType ApplicationPaths { get; private set; }
- ///
- /// The container
- ///
- protected readonly Container Container = new Container();
-
///
/// The json serializer
///
@@ -223,15 +216,6 @@ namespace MediaBrowser.Common.Implementations
/// Task.
public virtual async Task Init(IProgress progress)
{
- try
- {
- // https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.IntegrationTests/Web.config#L4
- Licensing.RegisterLicense("1001-e1JlZjoxMDAxLE5hbWU6VGVzdCBCdXNpbmVzcyxUeXBlOkJ1c2luZXNzLEhhc2g6UHVNTVRPclhvT2ZIbjQ5MG5LZE1mUTd5RUMzQnBucTFEbTE3TDczVEF4QUNMT1FhNXJMOWkzVjFGL2ZkVTE3Q2pDNENqTkQyUktRWmhvUVBhYTBiekJGUUZ3ZE5aZHFDYm9hL3lydGlwUHI5K1JsaTBYbzNsUC85cjVJNHE5QVhldDN6QkE4aTlvdldrdTgyTk1relY2eis2dFFqTThYN2lmc0JveHgycFdjPSxFeHBpcnk6MjAxMy0wMS0wMX0=");
- }
- catch
- {
- // Failing under mono
- }
progress.Report(1);
JsonSerializer = CreateJsonSerializer();
@@ -328,10 +312,7 @@ namespace MediaBrowser.Common.Implementations
return builder;
}
- protected virtual IJsonSerializer CreateJsonSerializer()
- {
- return new JsonSerializer(FileSystemManager, LogManager.GetLogger("JsonSerializer"));
- }
+ protected abstract IJsonSerializer CreateJsonSerializer();
private void SetHttpLimit()
{
@@ -424,8 +405,6 @@ namespace MediaBrowser.Common.Implementations
///
protected virtual void FindParts()
{
- RegisterModules();
-
ConfigurationManager.AddParts(GetExports());
Plugins = GetExports().Select(LoadPlugin).Where(i => i != null).ToArray();
}
@@ -525,25 +504,6 @@ namespace MediaBrowser.Common.Implementations
return Task.FromResult(true);
}
- private void RegisterModules()
- {
- var moduleTypes = GetExportTypes();
-
- foreach (var type in moduleTypes)
- {
- try
- {
- var instance = Activator.CreateInstance(type) as IDependencyModule;
- if (instance != null)
- instance.BindDependencies(this);
- }
- catch (Exception ex)
- {
- Logger.ErrorException("Error setting up dependency bindings for " + type.Name, ex);
- }
- }
- }
-
///
/// Gets a list of types within an assembly
/// This will handle situations that would normally throw an exception - such as a type within the assembly that depends on some other non-existant reference
@@ -584,43 +544,14 @@ namespace MediaBrowser.Common.Implementations
///
/// The type.
/// System.Object.
- public object CreateInstance(Type type)
- {
- try
- {
- return Container.GetInstance(type);
- }
- catch (Exception ex)
- {
- Logger.ErrorException("Error creating {0}", ex, type.FullName);
-
- throw;
- }
- }
+ public abstract object CreateInstance(Type type);
///
/// Creates the instance safe.
///
/// The type.
/// System.Object.
- protected object CreateInstanceSafe(Type type)
- {
- try
- {
- return Container.GetInstance(type);
- }
- catch (Exception ex)
- {
- Logger.ErrorException("Error creating {0}", ex, type.FullName);
- // Don't blow up in release mode
- return null;
- }
- }
-
- void IDependencyContainer.RegisterSingleInstance(T obj, bool manageLifetime)
- {
- RegisterSingleInstance(obj, manageLifetime);
- }
+ protected abstract object CreateInstanceSafe(Type type);
///
/// Registers the specified obj.
@@ -628,68 +559,30 @@ namespace MediaBrowser.Common.Implementations
///
/// The obj.
/// if set to true [manage lifetime].
- protected void RegisterSingleInstance(T obj, bool manageLifetime = true)
- where T : class
- {
- Container.RegisterSingleton(obj);
-
- if (manageLifetime)
- {
- var disposable = obj as IDisposable;
-
- if (disposable != null)
- {
- DisposableParts.Add(disposable);
- }
- }
- }
-
- void IDependencyContainer.RegisterSingleInstance(Func func)
- {
- RegisterSingleInstance(func);
- }
+ protected abstract void RegisterSingleInstance(T obj, bool manageLifetime = true)
+ where T : class;
///
/// Registers the single instance.
///
///
/// The func.
- protected void RegisterSingleInstance(Func func)
- where T : class
- {
- Container.RegisterSingleton(func);
- }
-
- void IDependencyContainer.Register(Type typeInterface, Type typeImplementation)
- {
- Container.Register(typeInterface, typeImplementation);
- }
+ protected abstract void RegisterSingleInstance(Func func)
+ where T : class;
///
/// Resolves this instance.
///
///
/// ``0.
- public T Resolve()
- {
- return (T)Container.GetRegistration(typeof(T), true).GetInstance();
- }
+ public abstract T Resolve();
///
/// Resolves this instance.
///
///
/// ``0.
- public T TryResolve()
- {
- var result = Container.GetRegistration(typeof(T), false);
-
- if (result == null)
- {
- return default(T);
- }
- return (T)result.GetInstance();
- }
+ public abstract T TryResolve();
///
/// Loads the assembly.
diff --git a/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs b/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs
index dd7a10b1a..7c1302ff6 100644
--- a/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs
+++ b/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs
@@ -11,7 +11,6 @@ using System.Linq;
using System.Threading;
using MediaBrowser.Model.IO;
using MediaBrowser.Common.Extensions;
-using MediaBrowser.Common.IO;
namespace MediaBrowser.Common.Implementations.Configuration
{
diff --git a/MediaBrowser.Common.Implementations/Devices/DeviceId.cs b/MediaBrowser.Common.Implementations/Devices/DeviceId.cs
index a43697c7b..40bbe8713 100644
--- a/MediaBrowser.Common.Implementations/Devices/DeviceId.cs
+++ b/MediaBrowser.Common.Implementations/Devices/DeviceId.cs
@@ -3,7 +3,6 @@ using MediaBrowser.Model.Logging;
using System;
using System.IO;
using System.Text;
-using MediaBrowser.Common.IO;
using MediaBrowser.Model.IO;
namespace MediaBrowser.Common.Implementations.Devices
diff --git a/MediaBrowser.Common.Implementations/IO/LnkShortcutHandler.cs b/MediaBrowser.Common.Implementations/IO/LnkShortcutHandler.cs
deleted file mode 100644
index 441e6939f..000000000
--- a/MediaBrowser.Common.Implementations/IO/LnkShortcutHandler.cs
+++ /dev/null
@@ -1,399 +0,0 @@
-using System;
-using System.IO;
-using System.Runtime.InteropServices;
-using System.Security;
-using System.Text;
-using MediaBrowser.Model.IO;
-
-namespace MediaBrowser.Common.Implementations.IO
-{
- public class LnkShortcutHandler :IShortcutHandler
- {
- public string Extension
- {
- get { return ".lnk"; }
- }
-
- public string Resolve(string shortcutPath)
- {
- var link = new ShellLink();
- ((IPersistFile)link).Load(shortcutPath, NativeMethods.STGM_READ);
- // ((IShellLinkW)link).Resolve(hwnd, 0)
- var sb = new StringBuilder(NativeMethods.MAX_PATH);
- WIN32_FIND_DATA data;
- ((IShellLinkW)link).GetPath(sb, sb.Capacity, out data, 0);
- return sb.ToString();
- }
-
- public void Create(string shortcutPath, string targetPath)
- {
- throw new NotImplementedException();
- }
- }
-
- ///
- /// Class NativeMethods
- ///
- [SuppressUnmanagedCodeSecurity]
- public static class NativeMethods
- {
- ///
- /// The MA x_ PATH
- ///
- public const int MAX_PATH = 260;
- ///
- /// The MA x_ ALTERNATE
- ///
- public const int MAX_ALTERNATE = 14;
- ///
- /// The INVALI d_ HANDL e_ VALUE
- ///
- public static IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
- ///
- /// The STG m_ READ
- ///
- public const uint STGM_READ = 0;
- }
-
- ///
- /// Struct FILETIME
- ///
- [StructLayout(LayoutKind.Sequential)]
- public struct FILETIME
- {
- ///
- /// The dw low date time
- ///
- public uint dwLowDateTime;
- ///
- /// The dw high date time
- ///
- public uint dwHighDateTime;
- }
-
- ///
- /// Struct WIN32_FIND_DATA
- ///
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
- public struct WIN32_FIND_DATA
- {
- ///
- /// The dw file attributes
- ///
- public FileAttributes dwFileAttributes;
- ///
- /// The ft creation time
- ///
- public FILETIME ftCreationTime;
- ///
- /// The ft last access time
- ///
- public FILETIME ftLastAccessTime;
- ///
- /// The ft last write time
- ///
- public FILETIME ftLastWriteTime;
- ///
- /// The n file size high
- ///
- public int nFileSizeHigh;
- ///
- /// The n file size low
- ///
- public int nFileSizeLow;
- ///
- /// The dw reserved0
- ///
- public int dwReserved0;
- ///
- /// The dw reserved1
- ///
- public int dwReserved1;
-
- ///
- /// The c file name
- ///
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = NativeMethods.MAX_PATH)]
- public string cFileName;
-
- ///
- /// This will always be null when FINDEX_INFO_LEVELS = basic
- ///
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = NativeMethods.MAX_ALTERNATE)]
- public string cAlternate;
-
- ///
- /// Gets or sets the path.
- ///
- /// The path.
- public string Path { get; set; }
-
- ///
- /// Returns a that represents this instance.
- ///
- /// A that represents this instance.
- public override string ToString()
- {
- return Path ?? string.Empty;
- }
- }
-
- ///
- /// Enum SLGP_FLAGS
- ///
- [Flags]
- public enum SLGP_FLAGS
- {
- ///
- /// Retrieves the standard short (8.3 format) file name
- ///
- SLGP_SHORTPATH = 0x1,
- ///
- /// Retrieves the Universal Naming Convention (UNC) path name of the file
- ///
- SLGP_UNCPRIORITY = 0x2,
- ///
- /// Retrieves the raw path name. A raw path is something that might not exist and may include environment variables that need to be expanded
- ///
- SLGP_RAWPATH = 0x4
- }
- ///
- /// Enum SLR_FLAGS
- ///
- [Flags]
- public enum SLR_FLAGS
- {
- ///
- /// Do not display a dialog box if the link cannot be resolved. When SLR_NO_UI is set,
- /// the high-order word of fFlags can be set to a time-out value that specifies the
- /// maximum amount of time to be spent resolving the link. The function returns if the
- /// link cannot be resolved within the time-out duration. If the high-order word is set
- /// to zero, the time-out duration will be set to the default value of 3,000 milliseconds
- /// (3 seconds). To specify a value, set the high word of fFlags to the desired time-out
- /// duration, in milliseconds.
- ///
- SLR_NO_UI = 0x1,
- ///
- /// Obsolete and no longer used
- ///
- SLR_ANY_MATCH = 0x2,
- ///
- /// If the link object has changed, update its path and list of identifiers.
- /// If SLR_UPDATE is set, you do not need to call IPersistFile::IsDirty to determine
- /// whether or not the link object has changed.
- ///
- SLR_UPDATE = 0x4,
- ///
- /// Do not update the link information
- ///
- SLR_NOUPDATE = 0x8,
- ///
- /// Do not execute the search heuristics
- ///
- SLR_NOSEARCH = 0x10,
- ///
- /// Do not use distributed link tracking
- ///
- SLR_NOTRACK = 0x20,
- ///
- /// Disable distributed link tracking. By default, distributed link tracking tracks
- /// removable media across multiple devices based on the volume name. It also uses the
- /// Universal Naming Convention (UNC) path to track remote file systems whose drive letter
- /// has changed. Setting SLR_NOLINKINFO disables both types of tracking.
- ///
- SLR_NOLINKINFO = 0x40,
- ///
- /// Call the Microsoft Windows Installer
- ///
- SLR_INVOKE_MSI = 0x80
- }
-
- ///
- /// The IShellLink interface allows Shell links to be created, modified, and resolved
- ///
- [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("000214F9-0000-0000-C000-000000000046")]
- public interface IShellLinkW
- {
- ///
- /// Retrieves the path and file name of a Shell link object
- ///
- /// The PSZ file.
- /// The CCH max path.
- /// The PFD.
- /// The f flags.
- void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out WIN32_FIND_DATA pfd, SLGP_FLAGS fFlags);
- ///
- /// Retrieves the list of item identifiers for a Shell link object
- ///
- /// The ppidl.
- void GetIDList(out IntPtr ppidl);
- ///
- /// Sets the pointer to an item identifier list (PIDL) for a Shell link object.
- ///
- /// The pidl.
- void SetIDList(IntPtr pidl);
- ///
- /// Retrieves the description string for a Shell link object
- ///
- /// Name of the PSZ.
- /// Name of the CCH max.
- void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName);
- ///
- /// Sets the description for a Shell link object. The description can be any application-defined string
- ///
- /// Name of the PSZ.
- void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName);
- ///
- /// Retrieves the name of the working directory for a Shell link object
- ///
- /// The PSZ dir.
- /// The CCH max path.
- void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath);
- ///
- /// Sets the name of the working directory for a Shell link object
- ///
- /// The PSZ dir.
- void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir);
- ///
- /// Retrieves the command-line arguments associated with a Shell link object
- ///
- /// The PSZ args.
- /// The CCH max path.
- void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath);
- ///
- /// Sets the command-line arguments for a Shell link object
- ///
- /// The PSZ args.
- void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs);
- ///
- /// Retrieves the hot key for a Shell link object
- ///
- /// The pw hotkey.
- void GetHotkey(out short pwHotkey);
- ///
- /// Sets a hot key for a Shell link object
- ///
- /// The w hotkey.
- void SetHotkey(short wHotkey);
- ///
- /// Retrieves the show command for a Shell link object
- ///
- /// The pi show CMD.
- void GetShowCmd(out int piShowCmd);
- ///
- /// Sets the show command for a Shell link object. The show command sets the initial show state of the window.
- ///
- /// The i show CMD.
- void SetShowCmd(int iShowCmd);
- ///
- /// Retrieves the location (path and index) of the icon for a Shell link object
- ///
- /// The PSZ icon path.
- /// The CCH icon path.
- /// The pi icon.
- void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath,
- int cchIconPath, out int piIcon);
- ///
- /// Sets the location (path and index) of the icon for a Shell link object
- ///
- /// The PSZ icon path.
- /// The i icon.
- void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon);
- ///
- /// Sets the relative path to the Shell link object
- ///
- /// The PSZ path rel.
- /// The dw reserved.
- void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved);
- ///
- /// Attempts to find the target of a Shell link, even if it has been moved or renamed
- ///
- /// The HWND.
- /// The f flags.
- void Resolve(IntPtr hwnd, SLR_FLAGS fFlags);
- ///
- /// Sets the path and file name of a Shell link object
- ///
- /// The PSZ file.
- void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile);
-
- }
-
- ///
- /// Interface IPersist
- ///
- [ComImport, Guid("0000010c-0000-0000-c000-000000000046"),
- InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
- public interface IPersist
- {
- ///
- /// Gets the class ID.
- ///
- /// The p class ID.
- [PreserveSig]
- void GetClassID(out Guid pClassID);
- }
-
- ///
- /// Interface IPersistFile
- ///
- [ComImport, Guid("0000010b-0000-0000-C000-000000000046"),
- InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
- public interface IPersistFile : IPersist
- {
- ///
- /// Gets the class ID.
- ///
- /// The p class ID.
- new void GetClassID(out Guid pClassID);
- ///
- /// Determines whether this instance is dirty.
- ///
- [PreserveSig]
- int IsDirty();
-
- ///
- /// Loads the specified PSZ file name.
- ///
- /// Name of the PSZ file.
- /// The dw mode.
- [PreserveSig]
- void Load([In, MarshalAs(UnmanagedType.LPWStr)]
- string pszFileName, uint dwMode);
-
- ///
- /// Saves the specified PSZ file name.
- ///
- /// Name of the PSZ file.
- /// if set to true [remember].
- [PreserveSig]
- void Save([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName,
- [In, MarshalAs(UnmanagedType.Bool)] bool remember);
-
- ///
- /// Saves the completed.
- ///
- /// Name of the PSZ file.
- [PreserveSig]
- void SaveCompleted([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName);
-
- ///
- /// Gets the cur file.
- ///
- /// Name of the PPSZ file.
- [PreserveSig]
- void GetCurFile([In, MarshalAs(UnmanagedType.LPWStr)] string ppszFileName);
- }
-
- // CLSID_ShellLink from ShlGuid.h
- ///
- /// Class ShellLink
- ///
- [
- ComImport,
- Guid("00021401-0000-0000-C000-000000000046")
- ]
- public class ShellLink
- {
- }
-}
diff --git a/MediaBrowser.Common.Implementations/IO/ManagedFileSystem.cs b/MediaBrowser.Common.Implementations/IO/ManagedFileSystem.cs
index ffb1e4234..8b027d41a 100644
--- a/MediaBrowser.Common.Implementations/IO/ManagedFileSystem.cs
+++ b/MediaBrowser.Common.Implementations/IO/ManagedFileSystem.cs
@@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using MediaBrowser.Common.IO;
using MediaBrowser.Model.IO;
-using Patterns.Logging;
+using MediaBrowser.Model.Logging;
namespace MediaBrowser.Common.Implementations.IO
{
diff --git a/MediaBrowser.Common.Implementations/IO/WindowsFileSystem.cs b/MediaBrowser.Common.Implementations/IO/WindowsFileSystem.cs
index e8f8de8ae..db386c682 100644
--- a/MediaBrowser.Common.Implementations/IO/WindowsFileSystem.cs
+++ b/MediaBrowser.Common.Implementations/IO/WindowsFileSystem.cs
@@ -1,4 +1,4 @@
-using Patterns.Logging;
+using MediaBrowser.Model.Logging;
namespace MediaBrowser.Common.Implementations.IO
{
@@ -7,7 +7,6 @@ namespace MediaBrowser.Common.Implementations.IO
public WindowsFileSystem(ILogger logger)
: base(logger, true, true)
{
- AddShortcutHandler(new LnkShortcutHandler());
EnableFileSystemRequestConcat = false;
}
}
diff --git a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj
index ce776b245..4b3fe3dba 100644
--- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj
+++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj
@@ -45,26 +45,12 @@
Always
-
- ..\packages\NLog.4.3.10\lib\net45\NLog.dll
- True
-
-
- ..\packages\Patterns.Logging.1.0.0.2\lib\portable-net45+sl4+wp71+win8+wpa81\Patterns.Logging.dll
-
-
- ..\packages\SimpleInjector.3.2.4\lib\net45\SimpleInjector.dll
- True
-
-
- ..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll
-
@@ -79,12 +65,8 @@
-
-
-
-
@@ -102,7 +84,6 @@
-
@@ -117,9 +98,6 @@
MediaBrowser.Model
-
-
-
diff --git a/MediaBrowser.Common.Implementations/packages.config b/MediaBrowser.Common.Implementations/packages.config
deleted file mode 100644
index 4eacd0d72..000000000
--- a/MediaBrowser.Common.Implementations/packages.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/MediaBrowser.Common.Implementations/Logging/LogHelper.cs b/MediaBrowser.Model/Logging/LogHelper.cs
similarity index 98%
rename from MediaBrowser.Common.Implementations/Logging/LogHelper.cs
rename to MediaBrowser.Model/Logging/LogHelper.cs
index 8080c2111..5b8090d30 100644
--- a/MediaBrowser.Common.Implementations/Logging/LogHelper.cs
+++ b/MediaBrowser.Model/Logging/LogHelper.cs
@@ -1,7 +1,7 @@
using System;
using System.Text;
-namespace MediaBrowser.Common.Implementations.Logging
+namespace MediaBrowser.Model.Logging
{
///
/// Class LogHelper
diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj
index dca74298e..912decfa3 100644
--- a/MediaBrowser.Model/MediaBrowser.Model.csproj
+++ b/MediaBrowser.Model/MediaBrowser.Model.csproj
@@ -142,6 +142,7 @@
+
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index e0570ffc4..3046fc395 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -10,8 +10,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Providers;
diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
index e34df6b62..c47b6ab93 100644
--- a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
+++ b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
@@ -93,44 +93,19 @@ namespace MediaBrowser.Providers.MediaInfo
return;
}
- var failHistoryPath = Path.Combine(_config.ApplicationPaths.CachePath, "subtitlehistory.json");
- var history = GetHistory(failHistoryPath);
-
var numComplete = 0;
- var hasChanges = false;
foreach (var video in videos)
{
- DateTime lastAttempt;
- if (history.TryGetValue(video.Id.ToString("N"), out lastAttempt))
- {
- if ((DateTime.UtcNow - lastAttempt).TotalDays <= 7)
- {
- continue;
- }
- }
-
try
{
- var shouldRetry = await DownloadSubtitles(video, options, cancellationToken).ConfigureAwait(false);
-
- if (shouldRetry)
- {
- history[video.Id.ToString("N")] = DateTime.UtcNow;
- }
- else
- {
- history.Remove(video.Id.ToString("N"));
- }
+ await DownloadSubtitles(video, options, cancellationToken).ConfigureAwait(false);
}
catch (Exception ex)
{
_logger.ErrorException("Error downloading subtitles for {0}", ex, video.Path);
- history[video.Id.ToString("N")] = DateTime.UtcNow;
}
- hasChanges = true;
-
// Update progress
numComplete++;
double percent = numComplete;
@@ -138,29 +113,6 @@ namespace MediaBrowser.Providers.MediaInfo
progress.Report(100 * percent);
}
-
- if (hasChanges)
- {
- _json.SerializeToFile(history, failHistoryPath);
- }
- }
-
- private Dictionary GetHistory(string path)
- {
- try
- {
- var result = _json.DeserializeFromFile>(path);
-
- if (result != null)
- {
- return result;
- }
- }
- catch
- {
- }
-
- return new Dictionary();
}
private async Task DownloadSubtitles(Video video, SubtitleOptions options, CancellationToken cancellationToken)
diff --git a/MediaBrowser.Common.Implementations/Logging/NLogger.cs b/MediaBrowser.Server.Implementations/Logging/NLogger.cs
similarity index 100%
rename from MediaBrowser.Common.Implementations/Logging/NLogger.cs
rename to MediaBrowser.Server.Implementations/Logging/NLogger.cs
diff --git a/MediaBrowser.Common.Implementations/Logging/NlogManager.cs b/MediaBrowser.Server.Implementations/Logging/NlogManager.cs
similarity index 100%
rename from MediaBrowser.Common.Implementations/Logging/NlogManager.cs
rename to MediaBrowser.Server.Implementations/Logging/NlogManager.cs
diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
index 854a9cecb..ec1fbb479 100644
--- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
+++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
@@ -61,6 +61,10 @@
..\packages\Microsoft.IO.RecyclableMemoryStream.1.1.0.0\lib\net45\Microsoft.IO.RecyclableMemoryStream.dll
True
+
+ ..\packages\NLog.4.3.10\lib\net45\NLog.dll
+ True
+
..\packages\Patterns.Logging.1.0.0.2\lib\portable-net45+sl4+wp71+win8+wpa81\Patterns.Logging.dll
@@ -272,6 +276,8 @@
+
+
@@ -281,6 +287,7 @@
+
diff --git a/MediaBrowser.Common.Implementations/Serialization/JsonSerializer.cs b/MediaBrowser.Server.Implementations/Serialization/JsonSerializer.cs
similarity index 98%
rename from MediaBrowser.Common.Implementations/Serialization/JsonSerializer.cs
rename to MediaBrowser.Server.Implementations/Serialization/JsonSerializer.cs
index 98d2967ac..b9a03242c 100644
--- a/MediaBrowser.Common.Implementations/Serialization/JsonSerializer.cs
+++ b/MediaBrowser.Server.Implementations/Serialization/JsonSerializer.cs
@@ -1,11 +1,10 @@
-using MediaBrowser.Model.Serialization;
-using System;
+using System;
using System.IO;
-using MediaBrowser.Common.IO;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Logging;
+using MediaBrowser.Model.Serialization;
-namespace MediaBrowser.Common.Implementations.Serialization
+namespace MediaBrowser.Server.Implementations.Serialization
{
///
/// Provides a wrapper around third party json serialization.
diff --git a/MediaBrowser.Server.Implementations/packages.config b/MediaBrowser.Server.Implementations/packages.config
index 522d2bbfd..223b61b2b 100644
--- a/MediaBrowser.Server.Implementations/packages.config
+++ b/MediaBrowser.Server.Implementations/packages.config
@@ -5,6 +5,7 @@
+
diff --git a/MediaBrowser.Server.Mono/Program.cs b/MediaBrowser.Server.Mono/Program.cs
index adfed72ab..f970f68db 100644
--- a/MediaBrowser.Server.Mono/Program.cs
+++ b/MediaBrowser.Server.Mono/Program.cs
@@ -77,7 +77,7 @@ namespace MediaBrowser.Server.Mono
// Allow all https requests
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
- var fileSystem = new ManagedFileSystem(new PatternsLogger(logManager.GetLogger("FileSystem")), false, false);
+ var fileSystem = new ManagedFileSystem(logManager.GetLogger("FileSystem"), false, false);
fileSystem.AddShortcutHandler(new MbLinkShortcutHandler(fileSystem));
var nativeApp = new NativeApp(options, logManager.GetLogger("App"));
diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs
index b6e7bb5e9..3ef63fd94 100644
--- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs
+++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs
@@ -103,10 +103,10 @@ using MediaBrowser.Common.Implementations.Networking;
using MediaBrowser.Common.Implementations.Serialization;
using MediaBrowser.Common.Implementations.Updates;
using MediaBrowser.Common.IO;
+using MediaBrowser.Common.Plugins;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Extensions;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.Activity;
using MediaBrowser.Model.Globalization;
@@ -119,15 +119,18 @@ using MediaBrowser.Model.Social;
using MediaBrowser.Model.Xml;
using MediaBrowser.Server.Implementations.Archiving;
using MediaBrowser.Server.Implementations.Reflection;
+using MediaBrowser.Server.Implementations.Serialization;
using MediaBrowser.Server.Implementations.Xml;
using OpenSubtitlesHandler;
+using ServiceStack;
+using StringExtensions = MediaBrowser.Controller.Extensions.StringExtensions;
namespace MediaBrowser.Server.Startup.Common
{
///
/// Class CompositionRoot
///
- public class ApplicationHost : BaseApplicationHost, IServerApplicationHost
+ public class ApplicationHost : BaseApplicationHost, IServerApplicationHost, IDependencyContainer
{
///
/// Gets the server configuration manager.
@@ -234,6 +237,11 @@ namespace MediaBrowser.Server.Startup.Common
internal INativeApp NativeApp { get; set; }
+ ///
+ /// The container
+ ///
+ protected readonly SimpleInjector.Container Container = new SimpleInjector.Container();
+
///
/// Initializes a new instance of the class.
///
@@ -399,7 +407,17 @@ namespace MediaBrowser.Server.Startup.Common
protected override IJsonSerializer CreateJsonSerializer()
{
- var result = base.CreateJsonSerializer();
+ try
+ {
+ // https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.IntegrationTests/Web.config#L4
+ Licensing.RegisterLicense("1001-e1JlZjoxMDAxLE5hbWU6VGVzdCBCdXNpbmVzcyxUeXBlOkJ1c2luZXNzLEhhc2g6UHVNTVRPclhvT2ZIbjQ5MG5LZE1mUTd5RUMzQnBucTFEbTE3TDczVEF4QUNMT1FhNXJMOWkzVjFGL2ZkVTE3Q2pDNENqTkQyUktRWmhvUVBhYTBiekJGUUZ3ZE5aZHFDYm9hL3lydGlwUHI5K1JsaTBYbzNsUC85cjVJNHE5QVhldDN6QkE4aTlvdldrdTgyTk1relY2eis2dFFqTThYN2lmc0JveHgycFdjPSxFeHBpcnk6MjAxMy0wMS0wMX0=");
+ }
+ catch
+ {
+ // Failing under mono
+ }
+
+ var result = new JsonSerializer(FileSystemManager, LogManager.GetLogger("JsonSerializer"));
ServiceStack.Text.JsConfig.ExcludePropertyNames = new[] { "ShortOverview" };
ServiceStack.Text.JsConfig.ExcludePropertyNames = new[] { "Taglines" };
@@ -1010,6 +1028,8 @@ namespace MediaBrowser.Server.Startup.Common
ConfigurationManager.SaveConfiguration();
}
+ RegisterModules();
+
base.FindParts();
HttpServer.Init(GetExports(false));
@@ -1686,5 +1706,135 @@ namespace MediaBrowser.Server.Startup.Common
{
NativeApp.EnableLoopback(appName);
}
+
+ private void RegisterModules()
+ {
+ var moduleTypes = GetExportTypes();
+
+ foreach (var type in moduleTypes)
+ {
+ try
+ {
+ var instance = Activator.CreateInstance(type) as IDependencyModule;
+ if (instance != null)
+ instance.BindDependencies(this);
+ }
+ catch (Exception ex)
+ {
+ Logger.ErrorException("Error setting up dependency bindings for " + type.Name, ex);
+ }
+ }
+ }
+
+ ///
+ /// Creates an instance of type and resolves all constructor dependancies
+ ///
+ /// The type.
+ /// System.Object.
+ public override object CreateInstance(Type type)
+ {
+ try
+ {
+ return Container.GetInstance(type);
+ }
+ catch (Exception ex)
+ {
+ Logger.ErrorException("Error creating {0}", ex, type.FullName);
+
+ throw;
+ }
+ }
+
+ ///
+ /// Creates the instance safe.
+ ///
+ /// The type.
+ /// System.Object.
+ protected override object CreateInstanceSafe(Type type)
+ {
+ try
+ {
+ return Container.GetInstance(type);
+ }
+ catch (Exception ex)
+ {
+ Logger.ErrorException("Error creating {0}", ex, type.FullName);
+ // Don't blow up in release mode
+ return null;
+ }
+ }
+
+ void IDependencyContainer.RegisterSingleInstance(T obj, bool manageLifetime)
+ {
+ RegisterSingleInstance(obj, manageLifetime);
+ }
+
+ ///
+ /// Registers the specified obj.
+ ///
+ ///
+ /// The obj.
+ /// if set to true [manage lifetime].
+ protected override void RegisterSingleInstance(T obj, bool manageLifetime = true)
+ {
+ Container.RegisterSingleton(obj);
+
+ if (manageLifetime)
+ {
+ var disposable = obj as IDisposable;
+
+ if (disposable != null)
+ {
+ DisposableParts.Add(disposable);
+ }
+ }
+ }
+
+ void IDependencyContainer.RegisterSingleInstance(Func func)
+ {
+ RegisterSingleInstance(func);
+ }
+
+ ///
+ /// Registers the single instance.
+ ///
+ ///
+ /// The func.
+ protected override void RegisterSingleInstance(Func func)
+ {
+ Container.RegisterSingleton(func);
+ }
+
+ void IDependencyContainer.Register(Type typeInterface, Type typeImplementation)
+ {
+ Container.Register(typeInterface, typeImplementation);
+ }
+
+ ///
+ /// Resolves this instance.
+ ///
+ ///
+ /// ``0.
+ public override T Resolve()
+ {
+ return (T)Container.GetRegistration(typeof(T), true).GetInstance();
+ }
+
+ ///
+ /// Resolves this instance.
+ ///
+ ///
+ /// ``0.
+ public override T TryResolve()
+ {
+ var result = Container.GetRegistration(typeof(T), false);
+
+ if (result == null)
+ {
+ return default(T);
+ }
+ return (T)result.GetInstance();
+ }
+
}
}
diff --git a/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj b/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj
index 042366e88..c0ef484c9 100644
--- a/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj
+++ b/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj
@@ -48,6 +48,10 @@
False
..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll
+
+ ..\packages\SimpleInjector.3.2.4\lib\net45\SimpleInjector.dll
+ True
+
diff --git a/MediaBrowser.Server.Startup.Common/packages.config b/MediaBrowser.Server.Startup.Common/packages.config
index a3235d0ca..49eee1536 100644
--- a/MediaBrowser.Server.Startup.Common/packages.config
+++ b/MediaBrowser.Server.Startup.Common/packages.config
@@ -2,4 +2,5 @@
+
\ No newline at end of file
diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs
index 5c6f6aec2..9287be3e2 100644
--- a/MediaBrowser.ServerApplication/MainStartup.cs
+++ b/MediaBrowser.ServerApplication/MainStartup.cs
@@ -308,9 +308,9 @@ namespace MediaBrowser.ServerApplication
/// The options.
private static void RunApplication(ServerApplicationPaths appPaths, ILogManager logManager, bool runService, StartupOptions options)
{
- var fileSystem = new WindowsFileSystem(new PatternsLogger(logManager.GetLogger("FileSystem")));
+ var fileSystem = new WindowsFileSystem(logManager.GetLogger("FileSystem"));
+ fileSystem.AddShortcutHandler(new LnkShortcutHandler());
fileSystem.AddShortcutHandler(new MbLinkShortcutHandler(fileSystem));
- //fileSystem.AddShortcutHandler(new LnkShortcutHandler(fileSystem));
var nativeApp = new WindowsApp(fileSystem, _logger)
{
diff --git a/MediaBrowser.ServerApplication/Native/LnkShortcutHandler.cs b/MediaBrowser.ServerApplication/Native/LnkShortcutHandler.cs
index 128ca2df8..91ff7033e 100644
--- a/MediaBrowser.ServerApplication/Native/LnkShortcutHandler.cs
+++ b/MediaBrowser.ServerApplication/Native/LnkShortcutHandler.cs
@@ -7,7 +7,7 @@ using MediaBrowser.Model.IO;
namespace MediaBrowser.ServerApplication.Native
{
- public class LnkShortcutHandler : IShortcutHandler
+ public class LnkShortcutHandler :IShortcutHandler
{
public string Extension
{