move common dependencies
This commit is contained in:
parent
9c6da95d6a
commit
ce38e98791
|
@ -17,8 +17,6 @@ using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using MediaBrowser.Model.Serialization;
|
using MediaBrowser.Model.Serialization;
|
||||||
using MediaBrowser.Model.Updates;
|
using MediaBrowser.Model.Updates;
|
||||||
using ServiceStack;
|
|
||||||
using SimpleInjector;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
@ -41,7 +39,7 @@ namespace MediaBrowser.Common.Implementations
|
||||||
/// Class BaseApplicationHost
|
/// Class BaseApplicationHost
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TApplicationPathsType">The type of the T application paths type.</typeparam>
|
/// <typeparam name="TApplicationPathsType">The type of the T application paths type.</typeparam>
|
||||||
public abstract class BaseApplicationHost<TApplicationPathsType> : IApplicationHost, IDependencyContainer
|
public abstract class BaseApplicationHost<TApplicationPathsType> : IApplicationHost
|
||||||
where TApplicationPathsType : class, IApplicationPaths
|
where TApplicationPathsType : class, IApplicationPaths
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -84,11 +82,6 @@ namespace MediaBrowser.Common.Implementations
|
||||||
/// <value>The application paths.</value>
|
/// <value>The application paths.</value>
|
||||||
protected TApplicationPathsType ApplicationPaths { get; private set; }
|
protected TApplicationPathsType ApplicationPaths { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The container
|
|
||||||
/// </summary>
|
|
||||||
protected readonly Container Container = new Container();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The json serializer
|
/// The json serializer
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -223,15 +216,6 @@ namespace MediaBrowser.Common.Implementations
|
||||||
/// <returns>Task.</returns>
|
/// <returns>Task.</returns>
|
||||||
public virtual async Task Init(IProgress<double> progress)
|
public virtual async Task Init(IProgress<double> 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);
|
progress.Report(1);
|
||||||
|
|
||||||
JsonSerializer = CreateJsonSerializer();
|
JsonSerializer = CreateJsonSerializer();
|
||||||
|
@ -328,10 +312,7 @@ namespace MediaBrowser.Common.Implementations
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual IJsonSerializer CreateJsonSerializer()
|
protected abstract IJsonSerializer CreateJsonSerializer();
|
||||||
{
|
|
||||||
return new JsonSerializer(FileSystemManager, LogManager.GetLogger("JsonSerializer"));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetHttpLimit()
|
private void SetHttpLimit()
|
||||||
{
|
{
|
||||||
|
@ -424,8 +405,6 @@ namespace MediaBrowser.Common.Implementations
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected virtual void FindParts()
|
protected virtual void FindParts()
|
||||||
{
|
{
|
||||||
RegisterModules();
|
|
||||||
|
|
||||||
ConfigurationManager.AddParts(GetExports<IConfigurationFactory>());
|
ConfigurationManager.AddParts(GetExports<IConfigurationFactory>());
|
||||||
Plugins = GetExports<IPlugin>().Select(LoadPlugin).Where(i => i != null).ToArray();
|
Plugins = GetExports<IPlugin>().Select(LoadPlugin).Where(i => i != null).ToArray();
|
||||||
}
|
}
|
||||||
|
@ -525,25 +504,6 @@ namespace MediaBrowser.Common.Implementations
|
||||||
return Task.FromResult(true);
|
return Task.FromResult(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RegisterModules()
|
|
||||||
{
|
|
||||||
var moduleTypes = GetExportTypes<IDependencyModule>();
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a list of types within an assembly
|
/// 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
|
/// 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
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="type">The type.</param>
|
/// <param name="type">The type.</param>
|
||||||
/// <returns>System.Object.</returns>
|
/// <returns>System.Object.</returns>
|
||||||
public object CreateInstance(Type type)
|
public abstract object CreateInstance(Type type);
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return Container.GetInstance(type);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Logger.ErrorException("Error creating {0}", ex, type.FullName);
|
|
||||||
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates the instance safe.
|
/// Creates the instance safe.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="type">The type.</param>
|
/// <param name="type">The type.</param>
|
||||||
/// <returns>System.Object.</returns>
|
/// <returns>System.Object.</returns>
|
||||||
protected object CreateInstanceSafe(Type type)
|
protected abstract 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>(T obj, bool manageLifetime)
|
|
||||||
{
|
|
||||||
RegisterSingleInstance(obj, manageLifetime);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Registers the specified obj.
|
/// Registers the specified obj.
|
||||||
|
@ -628,68 +559,30 @@ namespace MediaBrowser.Common.Implementations
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T"></typeparam>
|
||||||
/// <param name="obj">The obj.</param>
|
/// <param name="obj">The obj.</param>
|
||||||
/// <param name="manageLifetime">if set to <c>true</c> [manage lifetime].</param>
|
/// <param name="manageLifetime">if set to <c>true</c> [manage lifetime].</param>
|
||||||
protected void RegisterSingleInstance<T>(T obj, bool manageLifetime = true)
|
protected abstract void RegisterSingleInstance<T>(T obj, bool manageLifetime = true)
|
||||||
where T : class
|
where T : class;
|
||||||
{
|
|
||||||
Container.RegisterSingleton(obj);
|
|
||||||
|
|
||||||
if (manageLifetime)
|
|
||||||
{
|
|
||||||
var disposable = obj as IDisposable;
|
|
||||||
|
|
||||||
if (disposable != null)
|
|
||||||
{
|
|
||||||
DisposableParts.Add(disposable);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void IDependencyContainer.RegisterSingleInstance<T>(Func<T> func)
|
|
||||||
{
|
|
||||||
RegisterSingleInstance(func);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Registers the single instance.
|
/// Registers the single instance.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T"></typeparam>
|
||||||
/// <param name="func">The func.</param>
|
/// <param name="func">The func.</param>
|
||||||
protected void RegisterSingleInstance<T>(Func<T> func)
|
protected abstract void RegisterSingleInstance<T>(Func<T> func)
|
||||||
where T : class
|
where T : class;
|
||||||
{
|
|
||||||
Container.RegisterSingleton(func);
|
|
||||||
}
|
|
||||||
|
|
||||||
void IDependencyContainer.Register(Type typeInterface, Type typeImplementation)
|
|
||||||
{
|
|
||||||
Container.Register(typeInterface, typeImplementation);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Resolves this instance.
|
/// Resolves this instance.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T"></typeparam>
|
||||||
/// <returns>``0.</returns>
|
/// <returns>``0.</returns>
|
||||||
public T Resolve<T>()
|
public abstract T Resolve<T>();
|
||||||
{
|
|
||||||
return (T)Container.GetRegistration(typeof(T), true).GetInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Resolves this instance.
|
/// Resolves this instance.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T"></typeparam>
|
||||||
/// <returns>``0.</returns>
|
/// <returns>``0.</returns>
|
||||||
public T TryResolve<T>()
|
public abstract T TryResolve<T>();
|
||||||
{
|
|
||||||
var result = Container.GetRegistration(typeof(T), false);
|
|
||||||
|
|
||||||
if (result == null)
|
|
||||||
{
|
|
||||||
return default(T);
|
|
||||||
}
|
|
||||||
return (T)result.GetInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Loads the assembly.
|
/// Loads the assembly.
|
||||||
|
|
|
@ -11,7 +11,6 @@ using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using MediaBrowser.Common.IO;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Common.Implementations.Configuration
|
namespace MediaBrowser.Common.Implementations.Configuration
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,7 +3,6 @@ using MediaBrowser.Model.Logging;
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using MediaBrowser.Common.IO;
|
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
|
|
||||||
namespace MediaBrowser.Common.Implementations.Devices
|
namespace MediaBrowser.Common.Implementations.Devices
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Class NativeMethods
|
|
||||||
/// </summary>
|
|
||||||
[SuppressUnmanagedCodeSecurity]
|
|
||||||
public static class NativeMethods
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The MA x_ PATH
|
|
||||||
/// </summary>
|
|
||||||
public const int MAX_PATH = 260;
|
|
||||||
/// <summary>
|
|
||||||
/// The MA x_ ALTERNATE
|
|
||||||
/// </summary>
|
|
||||||
public const int MAX_ALTERNATE = 14;
|
|
||||||
/// <summary>
|
|
||||||
/// The INVALI d_ HANDL e_ VALUE
|
|
||||||
/// </summary>
|
|
||||||
public static IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
|
|
||||||
/// <summary>
|
|
||||||
/// The STG m_ READ
|
|
||||||
/// </summary>
|
|
||||||
public const uint STGM_READ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Struct FILETIME
|
|
||||||
/// </summary>
|
|
||||||
[StructLayout(LayoutKind.Sequential)]
|
|
||||||
public struct FILETIME
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The dw low date time
|
|
||||||
/// </summary>
|
|
||||||
public uint dwLowDateTime;
|
|
||||||
/// <summary>
|
|
||||||
/// The dw high date time
|
|
||||||
/// </summary>
|
|
||||||
public uint dwHighDateTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Struct WIN32_FIND_DATA
|
|
||||||
/// </summary>
|
|
||||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
|
||||||
public struct WIN32_FIND_DATA
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The dw file attributes
|
|
||||||
/// </summary>
|
|
||||||
public FileAttributes dwFileAttributes;
|
|
||||||
/// <summary>
|
|
||||||
/// The ft creation time
|
|
||||||
/// </summary>
|
|
||||||
public FILETIME ftCreationTime;
|
|
||||||
/// <summary>
|
|
||||||
/// The ft last access time
|
|
||||||
/// </summary>
|
|
||||||
public FILETIME ftLastAccessTime;
|
|
||||||
/// <summary>
|
|
||||||
/// The ft last write time
|
|
||||||
/// </summary>
|
|
||||||
public FILETIME ftLastWriteTime;
|
|
||||||
/// <summary>
|
|
||||||
/// The n file size high
|
|
||||||
/// </summary>
|
|
||||||
public int nFileSizeHigh;
|
|
||||||
/// <summary>
|
|
||||||
/// The n file size low
|
|
||||||
/// </summary>
|
|
||||||
public int nFileSizeLow;
|
|
||||||
/// <summary>
|
|
||||||
/// The dw reserved0
|
|
||||||
/// </summary>
|
|
||||||
public int dwReserved0;
|
|
||||||
/// <summary>
|
|
||||||
/// The dw reserved1
|
|
||||||
/// </summary>
|
|
||||||
public int dwReserved1;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The c file name
|
|
||||||
/// </summary>
|
|
||||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = NativeMethods.MAX_PATH)]
|
|
||||||
public string cFileName;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This will always be null when FINDEX_INFO_LEVELS = basic
|
|
||||||
/// </summary>
|
|
||||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = NativeMethods.MAX_ALTERNATE)]
|
|
||||||
public string cAlternate;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the path.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The path.</value>
|
|
||||||
public string Path { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Returns a <see cref="System.String" /> that represents this instance.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>A <see cref="System.String" /> that represents this instance.</returns>
|
|
||||||
public override string ToString()
|
|
||||||
{
|
|
||||||
return Path ?? string.Empty;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Enum SLGP_FLAGS
|
|
||||||
/// </summary>
|
|
||||||
[Flags]
|
|
||||||
public enum SLGP_FLAGS
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Retrieves the standard short (8.3 format) file name
|
|
||||||
/// </summary>
|
|
||||||
SLGP_SHORTPATH = 0x1,
|
|
||||||
/// <summary>
|
|
||||||
/// Retrieves the Universal Naming Convention (UNC) path name of the file
|
|
||||||
/// </summary>
|
|
||||||
SLGP_UNCPRIORITY = 0x2,
|
|
||||||
/// <summary>
|
|
||||||
/// Retrieves the raw path name. A raw path is something that might not exist and may include environment variables that need to be expanded
|
|
||||||
/// </summary>
|
|
||||||
SLGP_RAWPATH = 0x4
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Enum SLR_FLAGS
|
|
||||||
/// </summary>
|
|
||||||
[Flags]
|
|
||||||
public enum SLR_FLAGS
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 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.
|
|
||||||
/// </summary>
|
|
||||||
SLR_NO_UI = 0x1,
|
|
||||||
/// <summary>
|
|
||||||
/// Obsolete and no longer used
|
|
||||||
/// </summary>
|
|
||||||
SLR_ANY_MATCH = 0x2,
|
|
||||||
/// <summary>
|
|
||||||
/// 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.
|
|
||||||
/// </summary>
|
|
||||||
SLR_UPDATE = 0x4,
|
|
||||||
/// <summary>
|
|
||||||
/// Do not update the link information
|
|
||||||
/// </summary>
|
|
||||||
SLR_NOUPDATE = 0x8,
|
|
||||||
/// <summary>
|
|
||||||
/// Do not execute the search heuristics
|
|
||||||
/// </summary>
|
|
||||||
SLR_NOSEARCH = 0x10,
|
|
||||||
/// <summary>
|
|
||||||
/// Do not use distributed link tracking
|
|
||||||
/// </summary>
|
|
||||||
SLR_NOTRACK = 0x20,
|
|
||||||
/// <summary>
|
|
||||||
/// 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.
|
|
||||||
/// </summary>
|
|
||||||
SLR_NOLINKINFO = 0x40,
|
|
||||||
/// <summary>
|
|
||||||
/// Call the Microsoft Windows Installer
|
|
||||||
/// </summary>
|
|
||||||
SLR_INVOKE_MSI = 0x80
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The IShellLink interface allows Shell links to be created, modified, and resolved
|
|
||||||
/// </summary>
|
|
||||||
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("000214F9-0000-0000-C000-000000000046")]
|
|
||||||
public interface IShellLinkW
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Retrieves the path and file name of a Shell link object
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pszFile">The PSZ file.</param>
|
|
||||||
/// <param name="cchMaxPath">The CCH max path.</param>
|
|
||||||
/// <param name="pfd">The PFD.</param>
|
|
||||||
/// <param name="fFlags">The f flags.</param>
|
|
||||||
void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out WIN32_FIND_DATA pfd, SLGP_FLAGS fFlags);
|
|
||||||
/// <summary>
|
|
||||||
/// Retrieves the list of item identifiers for a Shell link object
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="ppidl">The ppidl.</param>
|
|
||||||
void GetIDList(out IntPtr ppidl);
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the pointer to an item identifier list (PIDL) for a Shell link object.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pidl">The pidl.</param>
|
|
||||||
void SetIDList(IntPtr pidl);
|
|
||||||
/// <summary>
|
|
||||||
/// Retrieves the description string for a Shell link object
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pszName">Name of the PSZ.</param>
|
|
||||||
/// <param name="cchMaxName">Name of the CCH max.</param>
|
|
||||||
void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName);
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the description for a Shell link object. The description can be any application-defined string
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pszName">Name of the PSZ.</param>
|
|
||||||
void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName);
|
|
||||||
/// <summary>
|
|
||||||
/// Retrieves the name of the working directory for a Shell link object
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pszDir">The PSZ dir.</param>
|
|
||||||
/// <param name="cchMaxPath">The CCH max path.</param>
|
|
||||||
void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath);
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the name of the working directory for a Shell link object
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pszDir">The PSZ dir.</param>
|
|
||||||
void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir);
|
|
||||||
/// <summary>
|
|
||||||
/// Retrieves the command-line arguments associated with a Shell link object
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pszArgs">The PSZ args.</param>
|
|
||||||
/// <param name="cchMaxPath">The CCH max path.</param>
|
|
||||||
void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath);
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the command-line arguments for a Shell link object
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pszArgs">The PSZ args.</param>
|
|
||||||
void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs);
|
|
||||||
/// <summary>
|
|
||||||
/// Retrieves the hot key for a Shell link object
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pwHotkey">The pw hotkey.</param>
|
|
||||||
void GetHotkey(out short pwHotkey);
|
|
||||||
/// <summary>
|
|
||||||
/// Sets a hot key for a Shell link object
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="wHotkey">The w hotkey.</param>
|
|
||||||
void SetHotkey(short wHotkey);
|
|
||||||
/// <summary>
|
|
||||||
/// Retrieves the show command for a Shell link object
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="piShowCmd">The pi show CMD.</param>
|
|
||||||
void GetShowCmd(out int piShowCmd);
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the show command for a Shell link object. The show command sets the initial show state of the window.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="iShowCmd">The i show CMD.</param>
|
|
||||||
void SetShowCmd(int iShowCmd);
|
|
||||||
/// <summary>
|
|
||||||
/// Retrieves the location (path and index) of the icon for a Shell link object
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pszIconPath">The PSZ icon path.</param>
|
|
||||||
/// <param name="cchIconPath">The CCH icon path.</param>
|
|
||||||
/// <param name="piIcon">The pi icon.</param>
|
|
||||||
void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath,
|
|
||||||
int cchIconPath, out int piIcon);
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the location (path and index) of the icon for a Shell link object
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pszIconPath">The PSZ icon path.</param>
|
|
||||||
/// <param name="iIcon">The i icon.</param>
|
|
||||||
void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon);
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the relative path to the Shell link object
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pszPathRel">The PSZ path rel.</param>
|
|
||||||
/// <param name="dwReserved">The dw reserved.</param>
|
|
||||||
void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved);
|
|
||||||
/// <summary>
|
|
||||||
/// Attempts to find the target of a Shell link, even if it has been moved or renamed
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="hwnd">The HWND.</param>
|
|
||||||
/// <param name="fFlags">The f flags.</param>
|
|
||||||
void Resolve(IntPtr hwnd, SLR_FLAGS fFlags);
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the path and file name of a Shell link object
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pszFile">The PSZ file.</param>
|
|
||||||
void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Interface IPersist
|
|
||||||
/// </summary>
|
|
||||||
[ComImport, Guid("0000010c-0000-0000-c000-000000000046"),
|
|
||||||
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
|
||||||
public interface IPersist
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the class ID.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pClassID">The p class ID.</param>
|
|
||||||
[PreserveSig]
|
|
||||||
void GetClassID(out Guid pClassID);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Interface IPersistFile
|
|
||||||
/// </summary>
|
|
||||||
[ComImport, Guid("0000010b-0000-0000-C000-000000000046"),
|
|
||||||
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
|
||||||
public interface IPersistFile : IPersist
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the class ID.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pClassID">The p class ID.</param>
|
|
||||||
new void GetClassID(out Guid pClassID);
|
|
||||||
/// <summary>
|
|
||||||
/// Determines whether this instance is dirty.
|
|
||||||
/// </summary>
|
|
||||||
[PreserveSig]
|
|
||||||
int IsDirty();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Loads the specified PSZ file name.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pszFileName">Name of the PSZ file.</param>
|
|
||||||
/// <param name="dwMode">The dw mode.</param>
|
|
||||||
[PreserveSig]
|
|
||||||
void Load([In, MarshalAs(UnmanagedType.LPWStr)]
|
|
||||||
string pszFileName, uint dwMode);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Saves the specified PSZ file name.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pszFileName">Name of the PSZ file.</param>
|
|
||||||
/// <param name="remember">if set to <c>true</c> [remember].</param>
|
|
||||||
[PreserveSig]
|
|
||||||
void Save([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName,
|
|
||||||
[In, MarshalAs(UnmanagedType.Bool)] bool remember);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Saves the completed.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pszFileName">Name of the PSZ file.</param>
|
|
||||||
[PreserveSig]
|
|
||||||
void SaveCompleted([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the cur file.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="ppszFileName">Name of the PPSZ file.</param>
|
|
||||||
[PreserveSig]
|
|
||||||
void GetCurFile([In, MarshalAs(UnmanagedType.LPWStr)] string ppszFileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
// CLSID_ShellLink from ShlGuid.h
|
|
||||||
/// <summary>
|
|
||||||
/// Class ShellLink
|
|
||||||
/// </summary>
|
|
||||||
[
|
|
||||||
ComImport,
|
|
||||||
Guid("00021401-0000-0000-C000-000000000046")
|
|
||||||
]
|
|
||||||
public class ShellLink
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -5,7 +5,7 @@ using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using MediaBrowser.Common.IO;
|
using MediaBrowser.Common.IO;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using Patterns.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
|
|
||||||
namespace MediaBrowser.Common.Implementations.IO
|
namespace MediaBrowser.Common.Implementations.IO
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using Patterns.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
|
|
||||||
namespace MediaBrowser.Common.Implementations.IO
|
namespace MediaBrowser.Common.Implementations.IO
|
||||||
{
|
{
|
||||||
|
@ -7,7 +7,6 @@ namespace MediaBrowser.Common.Implementations.IO
|
||||||
public WindowsFileSystem(ILogger logger)
|
public WindowsFileSystem(ILogger logger)
|
||||||
: base(logger, true, true)
|
: base(logger, true, true)
|
||||||
{
|
{
|
||||||
AddShortcutHandler(new LnkShortcutHandler());
|
|
||||||
EnableFileSystemRequestConcat = false;
|
EnableFileSystemRequestConcat = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,26 +45,12 @@
|
||||||
<RunPostBuildEvent>Always</RunPostBuildEvent>
|
<RunPostBuildEvent>Always</RunPostBuildEvent>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\NLog.4.3.10\lib\net45\NLog.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Patterns.Logging">
|
|
||||||
<HintPath>..\packages\Patterns.Logging.1.0.0.2\lib\portable-net45+sl4+wp71+win8+wpa81\Patterns.Logging.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="SimpleInjector, Version=3.2.4.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\SimpleInjector.3.2.4\lib\net45\SimpleInjector.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Configuration" />
|
<Reference Include="System.Configuration" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
<Reference Include="System.Net" />
|
<Reference Include="System.Net" />
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
<Reference Include="ServiceStack.Text">
|
|
||||||
<HintPath>..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="..\SharedVersion.cs">
|
<Compile Include="..\SharedVersion.cs">
|
||||||
|
@ -79,12 +65,8 @@
|
||||||
<Compile Include="HttpClientManager\HttpClientInfo.cs" />
|
<Compile Include="HttpClientManager\HttpClientInfo.cs" />
|
||||||
<Compile Include="HttpClientManager\HttpClientManager.cs" />
|
<Compile Include="HttpClientManager\HttpClientManager.cs" />
|
||||||
<Compile Include="IO\IsoManager.cs" />
|
<Compile Include="IO\IsoManager.cs" />
|
||||||
<Compile Include="IO\LnkShortcutHandler.cs" />
|
|
||||||
<Compile Include="IO\ManagedFileSystem.cs" />
|
<Compile Include="IO\ManagedFileSystem.cs" />
|
||||||
<Compile Include="IO\WindowsFileSystem.cs" />
|
<Compile Include="IO\WindowsFileSystem.cs" />
|
||||||
<Compile Include="Logging\LogHelper.cs" />
|
|
||||||
<Compile Include="Logging\NLogger.cs" />
|
|
||||||
<Compile Include="Logging\NlogManager.cs" />
|
|
||||||
<Compile Include="Networking\BaseNetworkManager.cs" />
|
<Compile Include="Networking\BaseNetworkManager.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="ScheduledTasks\DailyTrigger.cs" />
|
<Compile Include="ScheduledTasks\DailyTrigger.cs" />
|
||||||
|
@ -102,7 +84,6 @@
|
||||||
<Compile Include="Security\PluginSecurityManager.cs" />
|
<Compile Include="Security\PluginSecurityManager.cs" />
|
||||||
<Compile Include="Security\RegRecord.cs" />
|
<Compile Include="Security\RegRecord.cs" />
|
||||||
<Compile Include="Security\SuppporterInfoResponse.cs" />
|
<Compile Include="Security\SuppporterInfoResponse.cs" />
|
||||||
<Compile Include="Serialization\JsonSerializer.cs" />
|
|
||||||
<Compile Include="Serialization\XmlSerializer.cs" />
|
<Compile Include="Serialization\XmlSerializer.cs" />
|
||||||
<Compile Include="Updates\GithubUpdater.cs" />
|
<Compile Include="Updates\GithubUpdater.cs" />
|
||||||
<Compile Include="Updates\InstallationManager.cs" />
|
<Compile Include="Updates\InstallationManager.cs" />
|
||||||
|
@ -117,9 +98,6 @@
|
||||||
<Name>MediaBrowser.Model</Name>
|
<Name>MediaBrowser.Model</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<None Include="packages.config" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup />
|
<ItemGroup />
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<packages>
|
|
||||||
<package id="NLog" version="4.3.10" targetFramework="net46" />
|
|
||||||
<package id="Patterns.Logging" version="1.0.0.2" targetFramework="net45" />
|
|
||||||
<package id="SimpleInjector" version="3.2.4" targetFramework="net46" />
|
|
||||||
</packages>
|
|
|
@ -1,7 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace MediaBrowser.Common.Implementations.Logging
|
namespace MediaBrowser.Model.Logging
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class LogHelper
|
/// Class LogHelper
|
|
@ -142,6 +142,7 @@
|
||||||
<Compile Include="IO\IShortcutHandler.cs" />
|
<Compile Include="IO\IShortcutHandler.cs" />
|
||||||
<Compile Include="IO\StreamDefaults.cs" />
|
<Compile Include="IO\StreamDefaults.cs" />
|
||||||
<Compile Include="Globalization\ILocalizationManager.cs" />
|
<Compile Include="Globalization\ILocalizationManager.cs" />
|
||||||
|
<Compile Include="Logging\LogHelper.cs" />
|
||||||
<Compile Include="MediaInfo\LiveStreamRequest.cs" />
|
<Compile Include="MediaInfo\LiveStreamRequest.cs" />
|
||||||
<Compile Include="MediaInfo\LiveStreamResponse.cs" />
|
<Compile Include="MediaInfo\LiveStreamResponse.cs" />
|
||||||
<Compile Include="MediaInfo\PlaybackInfoRequest.cs" />
|
<Compile Include="MediaInfo\PlaybackInfoRequest.cs" />
|
||||||
|
|
|
@ -10,8 +10,6 @@ using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MediaBrowser.Common.IO;
|
|
||||||
using MediaBrowser.Controller.IO;
|
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Configuration;
|
using MediaBrowser.Model.Configuration;
|
||||||
using MediaBrowser.Model.Providers;
|
using MediaBrowser.Model.Providers;
|
||||||
|
|
|
@ -93,44 +93,19 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var failHistoryPath = Path.Combine(_config.ApplicationPaths.CachePath, "subtitlehistory.json");
|
|
||||||
var history = GetHistory(failHistoryPath);
|
|
||||||
|
|
||||||
var numComplete = 0;
|
var numComplete = 0;
|
||||||
var hasChanges = false;
|
|
||||||
|
|
||||||
foreach (var video in videos)
|
foreach (var video in videos)
|
||||||
{
|
{
|
||||||
DateTime lastAttempt;
|
|
||||||
if (history.TryGetValue(video.Id.ToString("N"), out lastAttempt))
|
|
||||||
{
|
|
||||||
if ((DateTime.UtcNow - lastAttempt).TotalDays <= 7)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var shouldRetry = await DownloadSubtitles(video, options, cancellationToken).ConfigureAwait(false);
|
await DownloadSubtitles(video, options, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
if (shouldRetry)
|
|
||||||
{
|
|
||||||
history[video.Id.ToString("N")] = DateTime.UtcNow;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
history.Remove(video.Id.ToString("N"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.ErrorException("Error downloading subtitles for {0}", ex, video.Path);
|
_logger.ErrorException("Error downloading subtitles for {0}", ex, video.Path);
|
||||||
history[video.Id.ToString("N")] = DateTime.UtcNow;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hasChanges = true;
|
|
||||||
|
|
||||||
// Update progress
|
// Update progress
|
||||||
numComplete++;
|
numComplete++;
|
||||||
double percent = numComplete;
|
double percent = numComplete;
|
||||||
|
@ -138,29 +113,6 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||||
|
|
||||||
progress.Report(100 * percent);
|
progress.Report(100 * percent);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasChanges)
|
|
||||||
{
|
|
||||||
_json.SerializeToFile(history, failHistoryPath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Dictionary<string,DateTime> GetHistory(string path)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var result = _json.DeserializeFromFile<Dictionary<string, DateTime>>(path);
|
|
||||||
|
|
||||||
if (result != null)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Dictionary<string, DateTime>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<bool> DownloadSubtitles(Video video, SubtitleOptions options, CancellationToken cancellationToken)
|
private async Task<bool> DownloadSubtitles(Video video, SubtitleOptions options, CancellationToken cancellationToken)
|
||||||
|
|
|
@ -61,6 +61,10 @@
|
||||||
<HintPath>..\packages\Microsoft.IO.RecyclableMemoryStream.1.1.0.0\lib\net45\Microsoft.IO.RecyclableMemoryStream.dll</HintPath>
|
<HintPath>..\packages\Microsoft.IO.RecyclableMemoryStream.1.1.0.0\lib\net45\Microsoft.IO.RecyclableMemoryStream.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\NLog.4.3.10\lib\net45\NLog.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Patterns.Logging">
|
<Reference Include="Patterns.Logging">
|
||||||
<HintPath>..\packages\Patterns.Logging.1.0.0.2\lib\portable-net45+sl4+wp71+win8+wpa81\Patterns.Logging.dll</HintPath>
|
<HintPath>..\packages\Patterns.Logging.1.0.0.2\lib\portable-net45+sl4+wp71+win8+wpa81\Patterns.Logging.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
@ -272,6 +276,8 @@
|
||||||
<Compile Include="LiveTv\TunerHosts\SatIp\TransmissionMode.cs" />
|
<Compile Include="LiveTv\TunerHosts\SatIp\TransmissionMode.cs" />
|
||||||
<Compile Include="LiveTv\TunerHosts\SatIp\Utils.cs" />
|
<Compile Include="LiveTv\TunerHosts\SatIp\Utils.cs" />
|
||||||
<Compile Include="Localization\LocalizationManager.cs" />
|
<Compile Include="Localization\LocalizationManager.cs" />
|
||||||
|
<Compile Include="Logging\NLogger.cs" />
|
||||||
|
<Compile Include="Logging\NlogManager.cs" />
|
||||||
<Compile Include="Logging\PatternsLogger.cs" />
|
<Compile Include="Logging\PatternsLogger.cs" />
|
||||||
<Compile Include="MediaEncoder\EncodingManager.cs" />
|
<Compile Include="MediaEncoder\EncodingManager.cs" />
|
||||||
<Compile Include="Notifications\IConfigurableNotificationService.cs" />
|
<Compile Include="Notifications\IConfigurableNotificationService.cs" />
|
||||||
|
@ -281,6 +287,7 @@
|
||||||
<Compile Include="Persistence\IDbConnector.cs" />
|
<Compile Include="Persistence\IDbConnector.cs" />
|
||||||
<Compile Include="Persistence\MediaStreamColumns.cs" />
|
<Compile Include="Persistence\MediaStreamColumns.cs" />
|
||||||
<Compile Include="Reflection\AssemblyInfo.cs" />
|
<Compile Include="Reflection\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Serialization\JsonSerializer.cs" />
|
||||||
<Compile Include="Social\SharingManager.cs" />
|
<Compile Include="Social\SharingManager.cs" />
|
||||||
<Compile Include="Social\SharingRepository.cs" />
|
<Compile Include="Social\SharingRepository.cs" />
|
||||||
<Compile Include="Sorting\StartDateComparer.cs" />
|
<Compile Include="Sorting\StartDateComparer.cs" />
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
using MediaBrowser.Model.Serialization;
|
using System;
|
||||||
using System;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using MediaBrowser.Common.IO;
|
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
|
using MediaBrowser.Model.Serialization;
|
||||||
|
|
||||||
namespace MediaBrowser.Common.Implementations.Serialization
|
namespace MediaBrowser.Server.Implementations.Serialization
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Provides a wrapper around third party json serialization.
|
/// Provides a wrapper around third party json serialization.
|
|
@ -5,6 +5,7 @@
|
||||||
<package id="Interfaces.IO" version="1.0.0.5" targetFramework="net45" />
|
<package id="Interfaces.IO" version="1.0.0.5" targetFramework="net45" />
|
||||||
<package id="MediaBrowser.Naming" version="1.0.0.55" targetFramework="net45" />
|
<package id="MediaBrowser.Naming" version="1.0.0.55" targetFramework="net45" />
|
||||||
<package id="Microsoft.IO.RecyclableMemoryStream" version="1.1.0.0" targetFramework="net46" />
|
<package id="Microsoft.IO.RecyclableMemoryStream" version="1.1.0.0" targetFramework="net46" />
|
||||||
|
<package id="NLog" version="4.3.10" targetFramework="net46" />
|
||||||
<package id="Patterns.Logging" version="1.0.0.2" targetFramework="net45" />
|
<package id="Patterns.Logging" version="1.0.0.2" targetFramework="net45" />
|
||||||
<package id="SimpleInjector" version="3.2.4" targetFramework="net46" />
|
<package id="SimpleInjector" version="3.2.4" targetFramework="net46" />
|
||||||
<package id="SocketHttpListener" version="1.0.0.40" targetFramework="net45" />
|
<package id="SocketHttpListener" version="1.0.0.40" targetFramework="net45" />
|
||||||
|
|
|
@ -77,7 +77,7 @@ namespace MediaBrowser.Server.Mono
|
||||||
// Allow all https requests
|
// Allow all https requests
|
||||||
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
|
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));
|
fileSystem.AddShortcutHandler(new MbLinkShortcutHandler(fileSystem));
|
||||||
|
|
||||||
var nativeApp = new NativeApp(options, logManager.GetLogger("App"));
|
var nativeApp = new NativeApp(options, logManager.GetLogger("App"));
|
||||||
|
|
|
@ -103,10 +103,10 @@ using MediaBrowser.Common.Implementations.Networking;
|
||||||
using MediaBrowser.Common.Implementations.Serialization;
|
using MediaBrowser.Common.Implementations.Serialization;
|
||||||
using MediaBrowser.Common.Implementations.Updates;
|
using MediaBrowser.Common.Implementations.Updates;
|
||||||
using MediaBrowser.Common.IO;
|
using MediaBrowser.Common.IO;
|
||||||
|
using MediaBrowser.Common.Plugins;
|
||||||
using MediaBrowser.Controller.Entities.Audio;
|
using MediaBrowser.Controller.Entities.Audio;
|
||||||
using MediaBrowser.Controller.Entities.Movies;
|
using MediaBrowser.Controller.Entities.Movies;
|
||||||
using MediaBrowser.Controller.Entities.TV;
|
using MediaBrowser.Controller.Entities.TV;
|
||||||
using MediaBrowser.Controller.Extensions;
|
|
||||||
using MediaBrowser.Controller.IO;
|
using MediaBrowser.Controller.IO;
|
||||||
using MediaBrowser.Model.Activity;
|
using MediaBrowser.Model.Activity;
|
||||||
using MediaBrowser.Model.Globalization;
|
using MediaBrowser.Model.Globalization;
|
||||||
|
@ -119,15 +119,18 @@ using MediaBrowser.Model.Social;
|
||||||
using MediaBrowser.Model.Xml;
|
using MediaBrowser.Model.Xml;
|
||||||
using MediaBrowser.Server.Implementations.Archiving;
|
using MediaBrowser.Server.Implementations.Archiving;
|
||||||
using MediaBrowser.Server.Implementations.Reflection;
|
using MediaBrowser.Server.Implementations.Reflection;
|
||||||
|
using MediaBrowser.Server.Implementations.Serialization;
|
||||||
using MediaBrowser.Server.Implementations.Xml;
|
using MediaBrowser.Server.Implementations.Xml;
|
||||||
using OpenSubtitlesHandler;
|
using OpenSubtitlesHandler;
|
||||||
|
using ServiceStack;
|
||||||
|
using StringExtensions = MediaBrowser.Controller.Extensions.StringExtensions;
|
||||||
|
|
||||||
namespace MediaBrowser.Server.Startup.Common
|
namespace MediaBrowser.Server.Startup.Common
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class CompositionRoot
|
/// Class CompositionRoot
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class ApplicationHost : BaseApplicationHost<ServerApplicationPaths>, IServerApplicationHost
|
public class ApplicationHost : BaseApplicationHost<ServerApplicationPaths>, IServerApplicationHost, IDependencyContainer
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the server configuration manager.
|
/// Gets the server configuration manager.
|
||||||
|
@ -234,6 +237,11 @@ namespace MediaBrowser.Server.Startup.Common
|
||||||
|
|
||||||
internal INativeApp NativeApp { get; set; }
|
internal INativeApp NativeApp { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The container
|
||||||
|
/// </summary>
|
||||||
|
protected readonly SimpleInjector.Container Container = new SimpleInjector.Container();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="ApplicationHost" /> class.
|
/// Initializes a new instance of the <see cref="ApplicationHost" /> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -399,7 +407,17 @@ namespace MediaBrowser.Server.Startup.Common
|
||||||
|
|
||||||
protected override IJsonSerializer CreateJsonSerializer()
|
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<Movie>.ExcludePropertyNames = new[] { "ShortOverview" };
|
ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "ShortOverview" };
|
||||||
ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "Taglines" };
|
ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "Taglines" };
|
||||||
|
@ -1010,6 +1028,8 @@ namespace MediaBrowser.Server.Startup.Common
|
||||||
ConfigurationManager.SaveConfiguration();
|
ConfigurationManager.SaveConfiguration();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RegisterModules();
|
||||||
|
|
||||||
base.FindParts();
|
base.FindParts();
|
||||||
|
|
||||||
HttpServer.Init(GetExports<IService>(false));
|
HttpServer.Init(GetExports<IService>(false));
|
||||||
|
@ -1686,5 +1706,135 @@ namespace MediaBrowser.Server.Startup.Common
|
||||||
{
|
{
|
||||||
NativeApp.EnableLoopback(appName);
|
NativeApp.EnableLoopback(appName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void RegisterModules()
|
||||||
|
{
|
||||||
|
var moduleTypes = GetExportTypes<IDependencyModule>();
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates an instance of type and resolves all constructor dependancies
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type">The type.</param>
|
||||||
|
/// <returns>System.Object.</returns>
|
||||||
|
public override object CreateInstance(Type type)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return Container.GetInstance(type);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.ErrorException("Error creating {0}", ex, type.FullName);
|
||||||
|
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates the instance safe.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type">The type.</param>
|
||||||
|
/// <returns>System.Object.</returns>
|
||||||
|
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>(T obj, bool manageLifetime)
|
||||||
|
{
|
||||||
|
RegisterSingleInstance(obj, manageLifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Registers the specified obj.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
/// <param name="obj">The obj.</param>
|
||||||
|
/// <param name="manageLifetime">if set to <c>true</c> [manage lifetime].</param>
|
||||||
|
protected override void RegisterSingleInstance<T>(T obj, bool manageLifetime = true)
|
||||||
|
{
|
||||||
|
Container.RegisterSingleton(obj);
|
||||||
|
|
||||||
|
if (manageLifetime)
|
||||||
|
{
|
||||||
|
var disposable = obj as IDisposable;
|
||||||
|
|
||||||
|
if (disposable != null)
|
||||||
|
{
|
||||||
|
DisposableParts.Add(disposable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void IDependencyContainer.RegisterSingleInstance<T>(Func<T> func)
|
||||||
|
{
|
||||||
|
RegisterSingleInstance(func);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Registers the single instance.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
/// <param name="func">The func.</param>
|
||||||
|
protected override void RegisterSingleInstance<T>(Func<T> func)
|
||||||
|
{
|
||||||
|
Container.RegisterSingleton(func);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IDependencyContainer.Register(Type typeInterface, Type typeImplementation)
|
||||||
|
{
|
||||||
|
Container.Register(typeInterface, typeImplementation);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Resolves this instance.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
/// <returns>``0.</returns>
|
||||||
|
public override T Resolve<T>()
|
||||||
|
{
|
||||||
|
return (T)Container.GetRegistration(typeof(T), true).GetInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Resolves this instance.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
/// <returns>``0.</returns>
|
||||||
|
public override T TryResolve<T>()
|
||||||
|
{
|
||||||
|
var result = Container.GetRegistration(typeof(T), false);
|
||||||
|
|
||||||
|
if (result == null)
|
||||||
|
{
|
||||||
|
return default(T);
|
||||||
|
}
|
||||||
|
return (T)result.GetInstance();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,10 @@
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll</HintPath>
|
<HintPath>..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="SimpleInjector, Version=3.2.4.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\SimpleInjector.3.2.4\lib\net45\SimpleInjector.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Configuration" />
|
<Reference Include="System.Configuration" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
|
|
|
@ -2,4 +2,5 @@
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Mono.Posix" version="4.0.0.0" targetFramework="net45" />
|
<package id="Mono.Posix" version="4.0.0.0" targetFramework="net45" />
|
||||||
<package id="Patterns.Logging" version="1.0.0.2" targetFramework="net45" />
|
<package id="Patterns.Logging" version="1.0.0.2" targetFramework="net45" />
|
||||||
|
<package id="SimpleInjector" version="3.2.4" targetFramework="net46" />
|
||||||
</packages>
|
</packages>
|
|
@ -308,9 +308,9 @@ namespace MediaBrowser.ServerApplication
|
||||||
/// <param name="options">The options.</param>
|
/// <param name="options">The options.</param>
|
||||||
private static void RunApplication(ServerApplicationPaths appPaths, ILogManager logManager, bool runService, StartupOptions 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 MbLinkShortcutHandler(fileSystem));
|
||||||
//fileSystem.AddShortcutHandler(new LnkShortcutHandler(fileSystem));
|
|
||||||
|
|
||||||
var nativeApp = new WindowsApp(fileSystem, _logger)
|
var nativeApp = new WindowsApp(fileSystem, _logger)
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,7 +7,7 @@ using MediaBrowser.Model.IO;
|
||||||
|
|
||||||
namespace MediaBrowser.ServerApplication.Native
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
{
|
{
|
||||||
public class LnkShortcutHandler : IShortcutHandler
|
public class LnkShortcutHandler :IShortcutHandler
|
||||||
{
|
{
|
||||||
public string Extension
|
public string Extension
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user