mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-27 12:34:56 +01:00
move common dependencies
This commit is contained in:
@@ -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
|
||||
/// </summary>
|
||||
/// <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
|
||||
{
|
||||
/// <summary>
|
||||
@@ -84,11 +82,6 @@ namespace MediaBrowser.Common.Implementations
|
||||
/// <value>The application paths.</value>
|
||||
protected TApplicationPathsType ApplicationPaths { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// The container
|
||||
/// </summary>
|
||||
protected readonly Container Container = new Container();
|
||||
|
||||
/// <summary>
|
||||
/// The json serializer
|
||||
/// </summary>
|
||||
@@ -223,15 +216,6 @@ namespace MediaBrowser.Common.Implementations
|
||||
/// <returns>Task.</returns>
|
||||
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);
|
||||
|
||||
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
|
||||
/// </summary>
|
||||
protected virtual void FindParts()
|
||||
{
|
||||
RegisterModules();
|
||||
|
||||
ConfigurationManager.AddParts(GetExports<IConfigurationFactory>());
|
||||
Plugins = GetExports<IPlugin>().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<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>
|
||||
/// 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
|
||||
/// </summary>
|
||||
/// <param name="type">The type.</param>
|
||||
/// <returns>System.Object.</returns>
|
||||
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);
|
||||
|
||||
/// <summary>
|
||||
/// Creates the instance safe.
|
||||
/// </summary>
|
||||
/// <param name="type">The type.</param>
|
||||
/// <returns>System.Object.</returns>
|
||||
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>(T obj, bool manageLifetime)
|
||||
{
|
||||
RegisterSingleInstance(obj, manageLifetime);
|
||||
}
|
||||
protected abstract object CreateInstanceSafe(Type type);
|
||||
|
||||
/// <summary>
|
||||
/// Registers the specified obj.
|
||||
@@ -628,68 +559,30 @@ namespace MediaBrowser.Common.Implementations
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="obj">The obj.</param>
|
||||
/// <param name="manageLifetime">if set to <c>true</c> [manage lifetime].</param>
|
||||
protected void RegisterSingleInstance<T>(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<T>(Func<T> func)
|
||||
{
|
||||
RegisterSingleInstance(func);
|
||||
}
|
||||
protected abstract void RegisterSingleInstance<T>(T obj, bool manageLifetime = true)
|
||||
where T : class;
|
||||
|
||||
/// <summary>
|
||||
/// Registers the single instance.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="func">The func.</param>
|
||||
protected void RegisterSingleInstance<T>(Func<T> func)
|
||||
where T : class
|
||||
{
|
||||
Container.RegisterSingleton(func);
|
||||
}
|
||||
|
||||
void IDependencyContainer.Register(Type typeInterface, Type typeImplementation)
|
||||
{
|
||||
Container.Register(typeInterface, typeImplementation);
|
||||
}
|
||||
protected abstract void RegisterSingleInstance<T>(Func<T> func)
|
||||
where T : class;
|
||||
|
||||
/// <summary>
|
||||
/// Resolves this instance.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns>``0.</returns>
|
||||
public T Resolve<T>()
|
||||
{
|
||||
return (T)Container.GetRegistration(typeof(T), true).GetInstance();
|
||||
}
|
||||
public abstract T Resolve<T>();
|
||||
|
||||
/// <summary>
|
||||
/// Resolves this instance.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns>``0.</returns>
|
||||
public T TryResolve<T>()
|
||||
{
|
||||
var result = Container.GetRegistration(typeof(T), false);
|
||||
|
||||
if (result == null)
|
||||
{
|
||||
return default(T);
|
||||
}
|
||||
return (T)result.GetInstance();
|
||||
}
|
||||
public abstract T TryResolve<T>();
|
||||
|
||||
/// <summary>
|
||||
/// Loads the assembly.
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Model.IO;
|
||||
using Patterns.Logging;
|
||||
using MediaBrowser.Model.Logging;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.IO
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.Logging
|
||||
{
|
||||
/// <summary>
|
||||
/// Class LogHelper
|
||||
/// </summary>
|
||||
public static class LogHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the log message.
|
||||
/// </summary>
|
||||
/// <param name="exception">The exception.</param>
|
||||
/// <returns>StringBuilder.</returns>
|
||||
public static StringBuilder GetLogMessage(Exception exception)
|
||||
{
|
||||
if (exception == null)
|
||||
{
|
||||
throw new ArgumentNullException("exception");
|
||||
}
|
||||
|
||||
var messageText = new StringBuilder();
|
||||
|
||||
messageText.AppendLine(exception.Message);
|
||||
|
||||
messageText.AppendLine(exception.GetType().FullName);
|
||||
|
||||
LogExceptionData(messageText, exception);
|
||||
|
||||
messageText.AppendLine(exception.StackTrace ?? "No Stack Trace Available");
|
||||
|
||||
// Log the InnerExceptions, if any
|
||||
AppendInnerExceptions(messageText, exception);
|
||||
|
||||
messageText.AppendLine(string.Empty);
|
||||
|
||||
return messageText;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Appends the inner exceptions.
|
||||
/// </summary>
|
||||
/// <param name="messageText">The message text.</param>
|
||||
/// <param name="e">The e.</param>
|
||||
private static void AppendInnerExceptions(StringBuilder messageText, Exception e)
|
||||
{
|
||||
var aggregate = e as AggregateException;
|
||||
|
||||
if (aggregate != null && aggregate.InnerExceptions != null)
|
||||
{
|
||||
foreach (var ex in aggregate.InnerExceptions)
|
||||
{
|
||||
AppendInnerException(messageText, ex);
|
||||
AppendInnerExceptions(messageText, ex);
|
||||
}
|
||||
}
|
||||
|
||||
else if (e.InnerException != null)
|
||||
{
|
||||
AppendInnerException(messageText, e.InnerException);
|
||||
AppendInnerExceptions(messageText, e.InnerException);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Appends the inner exception.
|
||||
/// </summary>
|
||||
/// <param name="messageText">The message text.</param>
|
||||
/// <param name="e">The e.</param>
|
||||
private static void AppendInnerException(StringBuilder messageText, Exception e)
|
||||
{
|
||||
messageText.AppendLine("InnerException: " + e.GetType().FullName);
|
||||
messageText.AppendLine(e.Message);
|
||||
|
||||
LogExceptionData(messageText, e);
|
||||
|
||||
if (e.StackTrace != null)
|
||||
{
|
||||
messageText.AppendLine(e.StackTrace);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Logs the exception data.
|
||||
/// </summary>
|
||||
/// <param name="messageText">The message text.</param>
|
||||
/// <param name="e">The e.</param>
|
||||
private static void LogExceptionData(StringBuilder messageText, Exception e)
|
||||
{
|
||||
foreach (var key in e.Data.Keys)
|
||||
{
|
||||
messageText.AppendLine(key + ": " + e.Data[key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,224 +0,0 @@
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.Logging
|
||||
{
|
||||
/// <summary>
|
||||
/// Class NLogger
|
||||
/// </summary>
|
||||
public class NLogger : ILogger
|
||||
{
|
||||
/// <summary>
|
||||
/// The _logger
|
||||
/// </summary>
|
||||
private readonly NLog.Logger _logger;
|
||||
|
||||
private readonly ILogManager _logManager;
|
||||
|
||||
/// <summary>
|
||||
/// The _lock object
|
||||
/// </summary>
|
||||
private static readonly object LockObject = new object();
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="NLogger" /> class.
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="logManager">The log manager.</param>
|
||||
public NLogger(string name, ILogManager logManager)
|
||||
{
|
||||
_logManager = logManager;
|
||||
lock (LockObject)
|
||||
{
|
||||
_logger = NLog.LogManager.GetLogger(name);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Infoes the specified message.
|
||||
/// </summary>
|
||||
/// <param name="message">The message.</param>
|
||||
/// <param name="paramList">The param list.</param>
|
||||
public void Info(string message, params object[] paramList)
|
||||
{
|
||||
_logger.Info(message, paramList);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Errors the specified message.
|
||||
/// </summary>
|
||||
/// <param name="message">The message.</param>
|
||||
/// <param name="paramList">The param list.</param>
|
||||
public void Error(string message, params object[] paramList)
|
||||
{
|
||||
_logger.Error(message, paramList);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Warns the specified message.
|
||||
/// </summary>
|
||||
/// <param name="message">The message.</param>
|
||||
/// <param name="paramList">The param list.</param>
|
||||
public void Warn(string message, params object[] paramList)
|
||||
{
|
||||
_logger.Warn(message, paramList);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Debugs the specified message.
|
||||
/// </summary>
|
||||
/// <param name="message">The message.</param>
|
||||
/// <param name="paramList">The param list.</param>
|
||||
public void Debug(string message, params object[] paramList)
|
||||
{
|
||||
if (_logManager.LogSeverity == LogSeverity.Info)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_logger.Debug(message, paramList);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Logs the exception.
|
||||
/// </summary>
|
||||
/// <param name="message">The message.</param>
|
||||
/// <param name="exception">The exception.</param>
|
||||
/// <param name="paramList">The param list.</param>
|
||||
/// <exception cref="System.NotImplementedException"></exception>
|
||||
public void ErrorException(string message, Exception exception, params object[] paramList)
|
||||
{
|
||||
LogException(LogSeverity.Error, message, exception, paramList);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Logs the exception.
|
||||
/// </summary>
|
||||
/// <param name="level">The level.</param>
|
||||
/// <param name="message">The message.</param>
|
||||
/// <param name="exception">The exception.</param>
|
||||
/// <param name="paramList">The param list.</param>
|
||||
private void LogException(LogSeverity level, string message, Exception exception, params object[] paramList)
|
||||
{
|
||||
message = FormatMessage(message, paramList).Replace(Environment.NewLine, ". ");
|
||||
|
||||
var messageText = LogHelper.GetLogMessage(exception);
|
||||
|
||||
var prefix = _logManager.ExceptionMessagePrefix;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(prefix))
|
||||
{
|
||||
messageText.Insert(0, prefix);
|
||||
}
|
||||
|
||||
LogMultiline(message, level, messageText);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Formats the message.
|
||||
/// </summary>
|
||||
/// <param name="message">The message.</param>
|
||||
/// <param name="paramList">The param list.</param>
|
||||
/// <returns>System.String.</returns>
|
||||
private static string FormatMessage(string message, params object[] paramList)
|
||||
{
|
||||
if (paramList != null)
|
||||
{
|
||||
for (var i = 0; i < paramList.Length; i++)
|
||||
{
|
||||
var obj = paramList[i];
|
||||
|
||||
message = message.Replace("{" + i + "}", (obj == null ? "null" : obj.ToString()));
|
||||
}
|
||||
}
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Logs the multiline.
|
||||
/// </summary>
|
||||
/// <param name="message">The message.</param>
|
||||
/// <param name="severity">The severity.</param>
|
||||
/// <param name="additionalContent">Content of the additional.</param>
|
||||
public void LogMultiline(string message, LogSeverity severity, StringBuilder additionalContent)
|
||||
{
|
||||
if (severity == LogSeverity.Debug && _logManager.LogSeverity == LogSeverity.Info)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
additionalContent.Insert(0, message + Environment.NewLine);
|
||||
|
||||
const char tabChar = '\t';
|
||||
|
||||
var text = additionalContent.ToString()
|
||||
.Replace(Environment.NewLine, Environment.NewLine + tabChar)
|
||||
.TrimEnd(tabChar);
|
||||
|
||||
if (text.EndsWith(Environment.NewLine))
|
||||
{
|
||||
text = text.Substring(0, text.LastIndexOf(Environment.NewLine, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
_logger.Log(GetLogLevel(severity), text);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the log level.
|
||||
/// </summary>
|
||||
/// <param name="severity">The severity.</param>
|
||||
/// <returns>NLog.LogLevel.</returns>
|
||||
private NLog.LogLevel GetLogLevel(LogSeverity severity)
|
||||
{
|
||||
switch (severity)
|
||||
{
|
||||
case LogSeverity.Debug:
|
||||
return NLog.LogLevel.Debug;
|
||||
case LogSeverity.Error:
|
||||
return NLog.LogLevel.Error;
|
||||
case LogSeverity.Warn:
|
||||
return NLog.LogLevel.Warn;
|
||||
case LogSeverity.Fatal:
|
||||
return NLog.LogLevel.Fatal;
|
||||
case LogSeverity.Info:
|
||||
return NLog.LogLevel.Info;
|
||||
default:
|
||||
throw new ArgumentException("Unknown LogSeverity: " + severity.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Logs the specified severity.
|
||||
/// </summary>
|
||||
/// <param name="severity">The severity.</param>
|
||||
/// <param name="message">The message.</param>
|
||||
/// <param name="paramList">The param list.</param>
|
||||
public void Log(LogSeverity severity, string message, params object[] paramList)
|
||||
{
|
||||
_logger.Log(GetLogLevel(severity), message, paramList);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fatals the specified message.
|
||||
/// </summary>
|
||||
/// <param name="message">The message.</param>
|
||||
/// <param name="paramList">The param list.</param>
|
||||
public void Fatal(string message, params object[] paramList)
|
||||
{
|
||||
_logger.Fatal(message, paramList);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fatals the exception.
|
||||
/// </summary>
|
||||
/// <param name="message">The message.</param>
|
||||
/// <param name="exception">The exception.</param>
|
||||
/// <param name="paramList">The param list.</param>
|
||||
public void FatalException(string message, Exception exception, params object[] paramList)
|
||||
{
|
||||
LogException(LogSeverity.Fatal, message, exception, paramList);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,264 +0,0 @@
|
||||
using MediaBrowser.Model.Logging;
|
||||
using NLog;
|
||||
using NLog.Config;
|
||||
using NLog.Targets;
|
||||
using NLog.Targets.Wrappers;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.Logging
|
||||
{
|
||||
/// <summary>
|
||||
/// Class NlogManager
|
||||
/// </summary>
|
||||
public class NlogManager : ILogManager
|
||||
{
|
||||
/// <summary>
|
||||
/// Occurs when [logger loaded].
|
||||
/// </summary>
|
||||
public event EventHandler LoggerLoaded;
|
||||
/// <summary>
|
||||
/// Gets or sets the log directory.
|
||||
/// </summary>
|
||||
/// <value>The log directory.</value>
|
||||
private string LogDirectory { get; set; }
|
||||
/// <summary>
|
||||
/// Gets or sets the log file prefix.
|
||||
/// </summary>
|
||||
/// <value>The log file prefix.</value>
|
||||
private string LogFilePrefix { get; set; }
|
||||
/// <summary>
|
||||
/// Gets the log file path.
|
||||
/// </summary>
|
||||
/// <value>The log file path.</value>
|
||||
public string LogFilePath { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the exception message prefix.
|
||||
/// </summary>
|
||||
/// <value>The exception message prefix.</value>
|
||||
public string ExceptionMessagePrefix { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="NlogManager" /> class.
|
||||
/// </summary>
|
||||
/// <param name="logDirectory">The log directory.</param>
|
||||
/// <param name="logFileNamePrefix">The log file name prefix.</param>
|
||||
public NlogManager(string logDirectory, string logFileNamePrefix)
|
||||
{
|
||||
LogDirectory = logDirectory;
|
||||
LogFilePrefix = logFileNamePrefix;
|
||||
|
||||
LogManager.Configuration = new LoggingConfiguration ();
|
||||
}
|
||||
|
||||
private LogSeverity _severity = LogSeverity.Debug;
|
||||
public LogSeverity LogSeverity
|
||||
{
|
||||
get
|
||||
{
|
||||
return _severity;
|
||||
}
|
||||
set
|
||||
{
|
||||
var changed = _severity != value;
|
||||
|
||||
_severity = value;
|
||||
|
||||
if (changed)
|
||||
{
|
||||
UpdateLogLevel(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateLogLevel(LogSeverity newLevel)
|
||||
{
|
||||
var level = GetLogLevel(newLevel);
|
||||
|
||||
var rules = LogManager.Configuration.LoggingRules;
|
||||
|
||||
foreach (var rule in rules)
|
||||
{
|
||||
if (!rule.IsLoggingEnabledForLevel(level))
|
||||
{
|
||||
rule.EnableLoggingForLevel(level);
|
||||
}
|
||||
foreach (var lev in rule.Levels.ToArray())
|
||||
{
|
||||
if (lev < level)
|
||||
{
|
||||
rule.DisableLoggingForLevel(lev);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds the file target.
|
||||
/// </summary>
|
||||
/// <param name="path">The path.</param>
|
||||
/// <param name="level">The level.</param>
|
||||
private void AddFileTarget(string path, LogSeverity level)
|
||||
{
|
||||
RemoveTarget("ApplicationLogFileWrapper");
|
||||
|
||||
var wrapper = new AsyncTargetWrapper ();
|
||||
wrapper.Name = "ApplicationLogFileWrapper";
|
||||
|
||||
var logFile = new FileTarget
|
||||
{
|
||||
FileName = path,
|
||||
Layout = "${longdate} ${level} ${logger}: ${message}"
|
||||
};
|
||||
|
||||
logFile.Name = "ApplicationLogFile";
|
||||
|
||||
wrapper.WrappedTarget = logFile;
|
||||
|
||||
AddLogTarget(wrapper, level);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds the log target.
|
||||
/// </summary>
|
||||
/// <param name="target">The target.</param>
|
||||
/// <param name="level">The level.</param>
|
||||
public void AddLogTarget(Target target, LogSeverity level)
|
||||
{
|
||||
var config = LogManager.Configuration;
|
||||
config.AddTarget(target.Name, target);
|
||||
|
||||
var rule = new LoggingRule("*", GetLogLevel(level), target);
|
||||
config.LoggingRules.Add(rule);
|
||||
|
||||
LogManager.Configuration = config;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes the target.
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
public void RemoveTarget(string name)
|
||||
{
|
||||
var config = LogManager.Configuration;
|
||||
|
||||
var target = config.FindTargetByName(name);
|
||||
|
||||
if (target != null)
|
||||
{
|
||||
foreach (var rule in config.LoggingRules.ToList())
|
||||
{
|
||||
var contains = rule.Targets.Contains(target);
|
||||
|
||||
rule.Targets.Remove(target);
|
||||
|
||||
if (contains)
|
||||
{
|
||||
config.LoggingRules.Remove(rule);
|
||||
}
|
||||
}
|
||||
|
||||
config.RemoveTarget(name);
|
||||
LogManager.Configuration = config;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the logger.
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <returns>ILogger.</returns>
|
||||
public Model.Logging.ILogger GetLogger(string name)
|
||||
{
|
||||
return new NLogger(name, this);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the log level.
|
||||
/// </summary>
|
||||
/// <param name="severity">The severity.</param>
|
||||
/// <returns>LogLevel.</returns>
|
||||
/// <exception cref="System.ArgumentException">Unrecognized LogSeverity</exception>
|
||||
private LogLevel GetLogLevel(LogSeverity severity)
|
||||
{
|
||||
switch (severity)
|
||||
{
|
||||
case LogSeverity.Debug:
|
||||
return LogLevel.Debug;
|
||||
case LogSeverity.Error:
|
||||
return LogLevel.Error;
|
||||
case LogSeverity.Fatal:
|
||||
return LogLevel.Fatal;
|
||||
case LogSeverity.Info:
|
||||
return LogLevel.Info;
|
||||
case LogSeverity.Warn:
|
||||
return LogLevel.Warn;
|
||||
default:
|
||||
throw new ArgumentException("Unrecognized LogSeverity");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reloads the logger.
|
||||
/// </summary>
|
||||
/// <param name="level">The level.</param>
|
||||
public void ReloadLogger(LogSeverity level)
|
||||
{
|
||||
LogFilePath = Path.Combine(LogDirectory, LogFilePrefix + "-" + decimal.Round(DateTime.Now.Ticks / 10000000) + ".txt");
|
||||
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(LogFilePath));
|
||||
|
||||
AddFileTarget(LogFilePath, level);
|
||||
|
||||
LogSeverity = level;
|
||||
|
||||
if (LoggerLoaded != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
LoggerLoaded(this, EventArgs.Empty);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
GetLogger("Logger").ErrorException("Error in LoggerLoaded event", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Flushes this instance.
|
||||
/// </summary>
|
||||
public void Flush()
|
||||
{
|
||||
LogManager.Flush();
|
||||
}
|
||||
|
||||
|
||||
public void AddConsoleOutput()
|
||||
{
|
||||
RemoveTarget("ConsoleTargetWrapper");
|
||||
|
||||
var wrapper = new AsyncTargetWrapper ();
|
||||
wrapper.Name = "ConsoleTargetWrapper";
|
||||
|
||||
var target = new ConsoleTarget()
|
||||
{
|
||||
Layout = "${level}, ${logger}, ${message}",
|
||||
Error = false
|
||||
};
|
||||
|
||||
target.Name = "ConsoleTarget";
|
||||
|
||||
wrapper.WrappedTarget = target;
|
||||
|
||||
AddLogTarget(wrapper, LogSeverity);
|
||||
}
|
||||
|
||||
public void RemoveConsoleOutput()
|
||||
{
|
||||
RemoveTarget("ConsoleTargetWrapper");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -45,26 +45,12 @@
|
||||
<RunPostBuildEvent>Always</RunPostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<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.Configuration" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Net" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="ServiceStack.Text">
|
||||
<HintPath>..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\SharedVersion.cs">
|
||||
@@ -79,12 +65,8 @@
|
||||
<Compile Include="HttpClientManager\HttpClientInfo.cs" />
|
||||
<Compile Include="HttpClientManager\HttpClientManager.cs" />
|
||||
<Compile Include="IO\IsoManager.cs" />
|
||||
<Compile Include="IO\LnkShortcutHandler.cs" />
|
||||
<Compile Include="IO\ManagedFileSystem.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="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="ScheduledTasks\DailyTrigger.cs" />
|
||||
@@ -102,7 +84,6 @@
|
||||
<Compile Include="Security\PluginSecurityManager.cs" />
|
||||
<Compile Include="Security\RegRecord.cs" />
|
||||
<Compile Include="Security\SuppporterInfoResponse.cs" />
|
||||
<Compile Include="Serialization\JsonSerializer.cs" />
|
||||
<Compile Include="Serialization\XmlSerializer.cs" />
|
||||
<Compile Include="Updates\GithubUpdater.cs" />
|
||||
<Compile Include="Updates\InstallationManager.cs" />
|
||||
@@ -117,9 +98,6 @@
|
||||
<Name>MediaBrowser.Model</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
|
||||
@@ -1,228 +0,0 @@
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using System;
|
||||
using System.IO;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Model.IO;
|
||||
using MediaBrowser.Model.Logging;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.Serialization
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides a wrapper around third party json serialization.
|
||||
/// </summary>
|
||||
public class JsonSerializer : IJsonSerializer
|
||||
{
|
||||
private readonly IFileSystem _fileSystem;
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public JsonSerializer(IFileSystem fileSystem, ILogger logger)
|
||||
{
|
||||
_fileSystem = fileSystem;
|
||||
_logger = logger;
|
||||
Configure();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serializes to stream.
|
||||
/// </summary>
|
||||
/// <param name="obj">The obj.</param>
|
||||
/// <param name="stream">The stream.</param>
|
||||
/// <exception cref="System.ArgumentNullException">obj</exception>
|
||||
public void SerializeToStream(object obj, Stream stream)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
throw new ArgumentNullException("obj");
|
||||
}
|
||||
|
||||
if (stream == null)
|
||||
{
|
||||
throw new ArgumentNullException("stream");
|
||||
}
|
||||
|
||||
ServiceStack.Text.JsonSerializer.SerializeToStream(obj, obj.GetType(), stream);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serializes to file.
|
||||
/// </summary>
|
||||
/// <param name="obj">The obj.</param>
|
||||
/// <param name="file">The file.</param>
|
||||
/// <exception cref="System.ArgumentNullException">obj</exception>
|
||||
public void SerializeToFile(object obj, string file)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
throw new ArgumentNullException("obj");
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(file))
|
||||
{
|
||||
throw new ArgumentNullException("file");
|
||||
}
|
||||
|
||||
using (Stream stream = _fileSystem.GetFileStream(file, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))
|
||||
{
|
||||
SerializeToStream(obj, stream);
|
||||
}
|
||||
}
|
||||
|
||||
private Stream OpenFile(string path)
|
||||
{
|
||||
_logger.Debug("Deserializing file {0}", path);
|
||||
return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 131072);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deserializes from file.
|
||||
/// </summary>
|
||||
/// <param name="type">The type.</param>
|
||||
/// <param name="file">The file.</param>
|
||||
/// <returns>System.Object.</returns>
|
||||
/// <exception cref="System.ArgumentNullException">type</exception>
|
||||
public object DeserializeFromFile(Type type, string file)
|
||||
{
|
||||
if (type == null)
|
||||
{
|
||||
throw new ArgumentNullException("type");
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(file))
|
||||
{
|
||||
throw new ArgumentNullException("file");
|
||||
}
|
||||
|
||||
using (Stream stream = OpenFile(file))
|
||||
{
|
||||
return DeserializeFromStream(stream, type);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deserializes from file.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="file">The file.</param>
|
||||
/// <returns>``0.</returns>
|
||||
/// <exception cref="System.ArgumentNullException">file</exception>
|
||||
public T DeserializeFromFile<T>(string file)
|
||||
where T : class
|
||||
{
|
||||
if (string.IsNullOrEmpty(file))
|
||||
{
|
||||
throw new ArgumentNullException("file");
|
||||
}
|
||||
|
||||
using (Stream stream = OpenFile(file))
|
||||
{
|
||||
return DeserializeFromStream<T>(stream);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deserializes from stream.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="stream">The stream.</param>
|
||||
/// <returns>``0.</returns>
|
||||
/// <exception cref="System.ArgumentNullException">stream</exception>
|
||||
public T DeserializeFromStream<T>(Stream stream)
|
||||
{
|
||||
if (stream == null)
|
||||
{
|
||||
throw new ArgumentNullException("stream");
|
||||
}
|
||||
|
||||
return ServiceStack.Text.JsonSerializer.DeserializeFromStream<T>(stream);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deserializes from string.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="text">The text.</param>
|
||||
/// <returns>``0.</returns>
|
||||
/// <exception cref="System.ArgumentNullException">text</exception>
|
||||
public T DeserializeFromString<T>(string text)
|
||||
{
|
||||
if (string.IsNullOrEmpty(text))
|
||||
{
|
||||
throw new ArgumentNullException("text");
|
||||
}
|
||||
|
||||
return ServiceStack.Text.JsonSerializer.DeserializeFromString<T>(text);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deserializes from stream.
|
||||
/// </summary>
|
||||
/// <param name="stream">The stream.</param>
|
||||
/// <param name="type">The type.</param>
|
||||
/// <returns>System.Object.</returns>
|
||||
/// <exception cref="System.ArgumentNullException">stream</exception>
|
||||
public object DeserializeFromStream(Stream stream, Type type)
|
||||
{
|
||||
if (stream == null)
|
||||
{
|
||||
throw new ArgumentNullException("stream");
|
||||
}
|
||||
|
||||
if (type == null)
|
||||
{
|
||||
throw new ArgumentNullException("type");
|
||||
}
|
||||
|
||||
return ServiceStack.Text.JsonSerializer.DeserializeFromStream(type, stream);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Configures this instance.
|
||||
/// </summary>
|
||||
private void Configure()
|
||||
{
|
||||
ServiceStack.Text.JsConfig.DateHandler = ServiceStack.Text.DateHandler.ISO8601;
|
||||
ServiceStack.Text.JsConfig.ExcludeTypeInfo = true;
|
||||
ServiceStack.Text.JsConfig.IncludeNullValues = false;
|
||||
ServiceStack.Text.JsConfig.AlwaysUseUtc = true;
|
||||
ServiceStack.Text.JsConfig.AssumeUtc = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deserializes from string.
|
||||
/// </summary>
|
||||
/// <param name="json">The json.</param>
|
||||
/// <param name="type">The type.</param>
|
||||
/// <returns>System.Object.</returns>
|
||||
/// <exception cref="System.ArgumentNullException">json</exception>
|
||||
public object DeserializeFromString(string json, Type type)
|
||||
{
|
||||
if (string.IsNullOrEmpty(json))
|
||||
{
|
||||
throw new ArgumentNullException("json");
|
||||
}
|
||||
|
||||
if (type == null)
|
||||
{
|
||||
throw new ArgumentNullException("type");
|
||||
}
|
||||
|
||||
return ServiceStack.Text.JsonSerializer.DeserializeFromString(json, type);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serializes to string.
|
||||
/// </summary>
|
||||
/// <param name="obj">The obj.</param>
|
||||
/// <returns>System.String.</returns>
|
||||
/// <exception cref="System.ArgumentNullException">obj</exception>
|
||||
public string SerializeToString(object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
throw new ArgumentNullException("obj");
|
||||
}
|
||||
|
||||
return ServiceStack.Text.JsonSerializer.SerializeToString(obj, obj.GetType());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user