mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-05-31 04:05:50 -04:00
add environment info
This commit is contained in:
parent
72aaecb279
commit
67ad1db6b7
@ -29,6 +29,7 @@ using MediaBrowser.Common.Extensions;
|
|||||||
using Emby.Common.Implementations.Cryptography;
|
using Emby.Common.Implementations.Cryptography;
|
||||||
using Emby.Common.Implementations.Diagnostics;
|
using Emby.Common.Implementations.Diagnostics;
|
||||||
using Emby.Common.Implementations.Net;
|
using Emby.Common.Implementations.Net;
|
||||||
|
using Emby.Common.Implementations.EnvironmentInfo;
|
||||||
using Emby.Common.Implementations.Threading;
|
using Emby.Common.Implementations.Threading;
|
||||||
using MediaBrowser.Common;
|
using MediaBrowser.Common;
|
||||||
using MediaBrowser.Common.IO;
|
using MediaBrowser.Common.IO;
|
||||||
@ -171,6 +172,8 @@ namespace Emby.Common.Implementations
|
|||||||
|
|
||||||
protected ICryptographyProvider CryptographyProvider = new CryptographyProvider();
|
protected ICryptographyProvider CryptographyProvider = new CryptographyProvider();
|
||||||
|
|
||||||
|
protected IEnvironmentInfo EnvironmentInfo = new Emby.Common.Implementations.EnvironmentInfo.EnvironmentInfo();
|
||||||
|
|
||||||
private DeviceId _deviceId;
|
private DeviceId _deviceId;
|
||||||
public string SystemId
|
public string SystemId
|
||||||
{
|
{
|
||||||
@ -187,16 +190,7 @@ namespace Emby.Common.Implementations
|
|||||||
|
|
||||||
public virtual string OperatingSystemDisplayName
|
public virtual string OperatingSystemDisplayName
|
||||||
{
|
{
|
||||||
get
|
get { return EnvironmentInfo.OperatingSystemName; }
|
||||||
{
|
|
||||||
#if NET46
|
|
||||||
return Environment.OSVersion.VersionString;
|
|
||||||
#endif
|
|
||||||
#if NETSTANDARD1_6
|
|
||||||
return System.Runtime.InteropServices.RuntimeInformation.OSDescription;
|
|
||||||
#endif
|
|
||||||
return "Operating System";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IMemoryStreamProvider MemoryStreamProvider { get; set; }
|
public IMemoryStreamProvider MemoryStreamProvider { get; set; }
|
||||||
@ -216,7 +210,7 @@ namespace Emby.Common.Implementations
|
|||||||
// hack alert, until common can target .net core
|
// hack alert, until common can target .net core
|
||||||
BaseExtensions.CryptographyProvider = CryptographyProvider;
|
BaseExtensions.CryptographyProvider = CryptographyProvider;
|
||||||
|
|
||||||
XmlSerializer = new XmlSerializer(fileSystem, logManager.GetLogger("XmlSerializer"));
|
XmlSerializer = new MyXmlSerializer(fileSystem, logManager.GetLogger("XmlSerializer"));
|
||||||
FailedAssemblies = new List<string>();
|
FailedAssemblies = new List<string>();
|
||||||
|
|
||||||
ApplicationPaths = applicationPaths;
|
ApplicationPaths = applicationPaths;
|
||||||
@ -534,6 +528,7 @@ return null;
|
|||||||
RegisterSingleInstance(Logger);
|
RegisterSingleInstance(Logger);
|
||||||
|
|
||||||
RegisterSingleInstance(TaskManager);
|
RegisterSingleInstance(TaskManager);
|
||||||
|
RegisterSingleInstance(EnvironmentInfo);
|
||||||
|
|
||||||
RegisterSingleInstance(FileSystemManager);
|
RegisterSingleInstance(FileSystemManager);
|
||||||
|
|
||||||
|
@ -0,0 +1,70 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MediaBrowser.Model.System;
|
||||||
|
|
||||||
|
namespace Emby.Common.Implementations.EnvironmentInfo
|
||||||
|
{
|
||||||
|
public class EnvironmentInfo : IEnvironmentInfo
|
||||||
|
{
|
||||||
|
public MediaBrowser.Model.System.OperatingSystem OperatingSystem
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
#if NET46
|
||||||
|
switch (Environment.OSVersion.Platform)
|
||||||
|
{
|
||||||
|
case PlatformID.MacOSX:
|
||||||
|
return MediaBrowser.Model.System.OperatingSystem.OSX;
|
||||||
|
case PlatformID.Win32NT:
|
||||||
|
return MediaBrowser.Model.System.OperatingSystem.Windows;
|
||||||
|
case PlatformID.Unix:
|
||||||
|
return MediaBrowser.Model.System.OperatingSystem.Linux;
|
||||||
|
}
|
||||||
|
#elif NETSTANDARD1_6
|
||||||
|
if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
|
||||||
|
{
|
||||||
|
return OperatingSystem.OSX;
|
||||||
|
}
|
||||||
|
if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||||
|
{
|
||||||
|
return OperatingSystem.Windows;
|
||||||
|
}
|
||||||
|
if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
|
||||||
|
{
|
||||||
|
return OperatingSystem.Linux;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return MediaBrowser.Model.System.OperatingSystem.Windows;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string OperatingSystemName
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
#if NET46
|
||||||
|
return Environment.OSVersion.Platform.ToString();
|
||||||
|
#elif NETSTANDARD1_6
|
||||||
|
return System.Runtime.InteropServices.RuntimeInformation.OSDescription;
|
||||||
|
#endif
|
||||||
|
return "Operating System";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string OperatingSystemVersion
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
#if NET46
|
||||||
|
return Environment.OSVersion.Version.ToString() + " " + Environment.OSVersion.ServicePack.ToString();
|
||||||
|
#elif NETSTANDARD1_6
|
||||||
|
return System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription;
|
||||||
|
#endif
|
||||||
|
return "1.0";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -40,12 +40,11 @@ namespace Emby.Common.Implementations.Net
|
|||||||
/// Creates a new UDP socket and binds it to the specified local port.
|
/// Creates a new UDP socket and binds it to the specified local port.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="localPort">An integer specifying the local port to bind the socket to.</param>
|
/// <param name="localPort">An integer specifying the local port to bind the socket to.</param>
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "The purpose of this method is to create and returns a disposable result, it is up to the caller to dispose it when they are done with it.")]
|
|
||||||
public IUdpSocket CreateUdpSocket(int localPort)
|
public IUdpSocket CreateUdpSocket(int localPort)
|
||||||
{
|
{
|
||||||
if (localPort < 0) throw new ArgumentException("localPort cannot be less than zero.", "localPort");
|
if (localPort < 0) throw new ArgumentException("localPort cannot be less than zero.", "localPort");
|
||||||
|
|
||||||
var retVal = new Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Dgram, System.Net.Sockets.ProtocolType.Udp);
|
var retVal = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
retVal.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
|
retVal.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
|
||||||
@ -65,12 +64,11 @@ namespace Emby.Common.Implementations.Net
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="localPort">An integer specifying the local port to bind the socket to.</param>
|
/// <param name="localPort">An integer specifying the local port to bind the socket to.</param>
|
||||||
/// <returns>An implementation of the <see cref="IUdpSocket"/> interface used by RSSDP components to perform socket operations.</returns>
|
/// <returns>An implementation of the <see cref="IUdpSocket"/> interface used by RSSDP components to perform socket operations.</returns>
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "The purpose of this method is to create and returns a disposable result, it is up to the caller to dispose it when they are done with it.")]
|
|
||||||
public IUdpSocket CreateSsdpUdpSocket(int localPort)
|
public IUdpSocket CreateSsdpUdpSocket(int localPort)
|
||||||
{
|
{
|
||||||
if (localPort < 0) throw new ArgumentException("localPort cannot be less than zero.", "localPort");
|
if (localPort < 0) throw new ArgumentException("localPort cannot be less than zero.", "localPort");
|
||||||
|
|
||||||
var retVal = new Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Dgram, System.Net.Sockets.ProtocolType.Udp);
|
var retVal = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
retVal.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
|
retVal.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
|
||||||
@ -94,7 +92,6 @@ namespace Emby.Common.Implementations.Net
|
|||||||
/// <param name="multicastTimeToLive">The multicast time to live value for the socket.</param>
|
/// <param name="multicastTimeToLive">The multicast time to live value for the socket.</param>
|
||||||
/// <param name="localPort">The number of the local port to bind to.</param>
|
/// <param name="localPort">The number of the local port to bind to.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "ip"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "The purpose of this method is to create and returns a disposable result, it is up to the caller to dispose it when they are done with it.")]
|
|
||||||
public IUdpSocket CreateUdpMulticastSocket(string ipAddress, int multicastTimeToLive, int localPort)
|
public IUdpSocket CreateUdpMulticastSocket(string ipAddress, int multicastTimeToLive, int localPort)
|
||||||
{
|
{
|
||||||
if (ipAddress == null) throw new ArgumentNullException("ipAddress");
|
if (ipAddress == null) throw new ArgumentNullException("ipAddress");
|
||||||
|
@ -17,14 +17,14 @@ namespace Emby.Common.Implementations.Net
|
|||||||
|
|
||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
private System.Net.Sockets.Socket _Socket;
|
private Socket _Socket;
|
||||||
private int _LocalPort;
|
private int _LocalPort;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public UdpSocket(System.Net.Sockets.Socket socket, int localPort, IPAddress ip)
|
public UdpSocket(Socket socket, int localPort, IPAddress ip)
|
||||||
{
|
{
|
||||||
if (socket == null) throw new ArgumentNullException("socket");
|
if (socket == null) throw new ArgumentNullException("socket");
|
||||||
|
|
||||||
@ -46,12 +46,12 @@ namespace Emby.Common.Implementations.Net
|
|||||||
|
|
||||||
var tcs = new TaskCompletionSource<SocketReceiveResult>();
|
var tcs = new TaskCompletionSource<SocketReceiveResult>();
|
||||||
|
|
||||||
System.Net.EndPoint receivedFromEndPoint = new IPEndPoint(IPAddress.Any, 0);
|
EndPoint receivedFromEndPoint = new IPEndPoint(IPAddress.Any, 0);
|
||||||
var state = new AsyncReceiveState(_Socket, receivedFromEndPoint);
|
var state = new AsyncReceiveState(_Socket, receivedFromEndPoint);
|
||||||
state.TaskCompletionSource = tcs;
|
state.TaskCompletionSource = tcs;
|
||||||
|
|
||||||
#if NETSTANDARD1_6
|
#if NETSTANDARD1_6
|
||||||
_Socket.ReceiveFromAsync(new System.ArraySegment<Byte>(state.Buffer), System.Net.Sockets.SocketFlags.None, state.EndPoint)
|
_Socket.ReceiveFromAsync(new ArraySegment<Byte>(state.Buffer),SocketFlags.None, state.EndPoint)
|
||||||
.ContinueWith((task, asyncState) =>
|
.ContinueWith((task, asyncState) =>
|
||||||
{
|
{
|
||||||
if (task.Status != TaskStatus.Faulted)
|
if (task.Status != TaskStatus.Faulted)
|
||||||
@ -62,7 +62,7 @@ namespace Emby.Common.Implementations.Net
|
|||||||
}
|
}
|
||||||
}, state);
|
}, state);
|
||||||
#else
|
#else
|
||||||
_Socket.BeginReceiveFrom(state.Buffer, 0, state.Buffer.Length, System.Net.Sockets.SocketFlags.None, ref state.EndPoint, new AsyncCallback(this.ProcessResponse), state);
|
_Socket.BeginReceiveFrom(state.Buffer, 0, state.Buffer.Length, SocketFlags.None, ref state.EndPoint, new AsyncCallback(this.ProcessResponse), state);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return tcs.Task;
|
return tcs.Task;
|
||||||
@ -84,7 +84,7 @@ namespace Emby.Common.Implementations.Net
|
|||||||
buffer = copy;
|
buffer = copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
_Socket.SendTo(buffer, new System.Net.IPEndPoint(IPAddress.Parse(endPoint.IpAddress.ToString()), endPoint.Port));
|
_Socket.SendTo(buffer, new IPEndPoint(IPAddress.Parse(endPoint.IpAddress.ToString()), endPoint.Port));
|
||||||
return Task.FromResult(true);
|
return Task.FromResult(true);
|
||||||
#else
|
#else
|
||||||
var taskSource = new TaskCompletionSource<bool>();
|
var taskSource = new TaskCompletionSource<bool>();
|
||||||
@ -153,7 +153,6 @@ namespace Emby.Common.Implementations.Net
|
|||||||
|
|
||||||
#region Private Methods
|
#region Private Methods
|
||||||
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "Exceptions via task methods should be reported by task completion source, so this should be ok.")]
|
|
||||||
private static void ProcessResponse(AsyncReceiveState state, Func<int> receiveData)
|
private static void ProcessResponse(AsyncReceiveState state, Func<int> receiveData)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -206,7 +205,6 @@ namespace Emby.Common.Implementations.Net
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "Exceptions via task methods should be reported by task completion source, so this should be ok.")]
|
|
||||||
private void ProcessResponse(IAsyncResult asyncResult)
|
private void ProcessResponse(IAsyncResult asyncResult)
|
||||||
{
|
{
|
||||||
#if NET46
|
#if NET46
|
||||||
@ -249,7 +247,7 @@ namespace Emby.Common.Implementations.Net
|
|||||||
|
|
||||||
private class AsyncReceiveState
|
private class AsyncReceiveState
|
||||||
{
|
{
|
||||||
public AsyncReceiveState(System.Net.Sockets.Socket socket, EndPoint endPoint)
|
public AsyncReceiveState(Socket socket, EndPoint endPoint)
|
||||||
{
|
{
|
||||||
this.Socket = socket;
|
this.Socket = socket;
|
||||||
this.EndPoint = endPoint;
|
this.EndPoint = endPoint;
|
||||||
@ -258,7 +256,7 @@ namespace Emby.Common.Implementations.Net
|
|||||||
public EndPoint EndPoint;
|
public EndPoint EndPoint;
|
||||||
public byte[] Buffer = new byte[8192];
|
public byte[] Buffer = new byte[8192];
|
||||||
|
|
||||||
public System.Net.Sockets.Socket Socket { get; private set; }
|
public Socket Socket { get; private set; }
|
||||||
|
|
||||||
public TaskCompletionSource<SocketReceiveResult> TaskCompletionSource { get; set; }
|
public TaskCompletionSource<SocketReceiveResult> TaskCompletionSource { get; set; }
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ using System.Collections.Concurrent;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
|
using System.Xml.Serialization;
|
||||||
using MediaBrowser.Common.IO;
|
using MediaBrowser.Common.IO;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
@ -13,12 +14,12 @@ namespace Emby.Common.Implementations.Serialization
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Provides a wrapper around third party xml serialization.
|
/// Provides a wrapper around third party xml serialization.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class XmlSerializer : IXmlSerializer
|
public class MyXmlSerializer : IXmlSerializer
|
||||||
{
|
{
|
||||||
private readonly IFileSystem _fileSystem;
|
private readonly IFileSystem _fileSystem;
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
public XmlSerializer(IFileSystem fileSystem, ILogger logger)
|
public MyXmlSerializer(IFileSystem fileSystem, ILogger logger)
|
||||||
{
|
{
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
@ -26,18 +27,18 @@ namespace Emby.Common.Implementations.Serialization
|
|||||||
|
|
||||||
// Need to cache these
|
// Need to cache these
|
||||||
// http://dotnetcodebox.blogspot.com/2013/01/xmlserializer-class-may-result-in.html
|
// http://dotnetcodebox.blogspot.com/2013/01/xmlserializer-class-may-result-in.html
|
||||||
private readonly Dictionary<string, System.Xml.Serialization.XmlSerializer> _serializers =
|
private readonly Dictionary<string, XmlSerializer> _serializers =
|
||||||
new Dictionary<string, System.Xml.Serialization.XmlSerializer>();
|
new Dictionary<string, XmlSerializer>();
|
||||||
|
|
||||||
private System.Xml.Serialization.XmlSerializer GetSerializer(Type type)
|
private XmlSerializer GetSerializer(Type type)
|
||||||
{
|
{
|
||||||
var key = type.FullName;
|
var key = type.FullName;
|
||||||
lock (_serializers)
|
lock (_serializers)
|
||||||
{
|
{
|
||||||
System.Xml.Serialization.XmlSerializer serializer;
|
XmlSerializer serializer;
|
||||||
if (!_serializers.TryGetValue(key, out serializer))
|
if (!_serializers.TryGetValue(key, out serializer))
|
||||||
{
|
{
|
||||||
serializer = new System.Xml.Serialization.XmlSerializer(type);
|
serializer = new XmlSerializer(type);
|
||||||
_serializers[key] = serializer;
|
_serializers[key] = serializer;
|
||||||
}
|
}
|
||||||
return serializer;
|
return serializer;
|
||||||
@ -80,7 +81,7 @@ namespace Emby.Common.Implementations.Serialization
|
|||||||
#if NET46
|
#if NET46
|
||||||
using (var writer = new XmlTextWriter(stream, null))
|
using (var writer = new XmlTextWriter(stream, null))
|
||||||
{
|
{
|
||||||
writer.Formatting = System.Xml.Formatting.Indented;
|
writer.Formatting = Formatting.Indented;
|
||||||
SerializeToWriter(obj, writer);
|
SerializeToWriter(obj, writer);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -12,15 +12,14 @@
|
|||||||
"System.IO": "4.0.0.0",
|
"System.IO": "4.0.0.0",
|
||||||
"System.Net": "4.0.0.0",
|
"System.Net": "4.0.0.0",
|
||||||
"System.Net.Http": "4.0.0.0",
|
"System.Net.Http": "4.0.0.0",
|
||||||
"System.Net.Http.WebRequest": "4.0.0.0",
|
|
||||||
"System.Net.Primitives": "4.0.0.0",
|
"System.Net.Primitives": "4.0.0.0",
|
||||||
|
"System.Net.Http.WebRequest": "4.0.0.0",
|
||||||
"System.Runtime": "4.0.0.0",
|
"System.Runtime": "4.0.0.0",
|
||||||
"System.Runtime.Extensions": "4.0.0.0",
|
"System.Runtime.Extensions": "4.0.0.0",
|
||||||
"System.Text.Encoding": "4.0.0.0",
|
"System.Text.Encoding": "4.0.0.0",
|
||||||
"System.Threading": "4.0.0.0",
|
"System.Threading": "4.0.0.0",
|
||||||
"System.Threading.Tasks": "4.0.0.0",
|
"System.Threading.Tasks": "4.0.0.0",
|
||||||
"System.Xml": "4.0.0.0",
|
"System.Xml.ReaderWriter": "4.0.0"
|
||||||
"System.Xml.Serialization": "4.0.0.0"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"SimpleInjector": "3.2.4",
|
"SimpleInjector": "3.2.4",
|
||||||
@ -30,7 +29,8 @@
|
|||||||
},
|
},
|
||||||
"MediaBrowser.Common": {
|
"MediaBrowser.Common": {
|
||||||
"target": "project"
|
"target": "project"
|
||||||
} }
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"netstandard1.6": {
|
"netstandard1.6": {
|
||||||
"imports": "dnxcore50",
|
"imports": "dnxcore50",
|
||||||
@ -40,6 +40,7 @@
|
|||||||
"System.Diagnostics.Process": "4.1.0",
|
"System.Diagnostics.Process": "4.1.0",
|
||||||
"System.Threading.Timer": "4.0.1",
|
"System.Threading.Timer": "4.0.1",
|
||||||
"System.Net.Requests": "4.0.11",
|
"System.Net.Requests": "4.0.11",
|
||||||
|
"System.Xml.ReaderWriter": "4.0.11",
|
||||||
"System.Xml.XmlSerializer": "4.0.11",
|
"System.Xml.XmlSerializer": "4.0.11",
|
||||||
"System.Net.Http": "4.1.0",
|
"System.Net.Http": "4.1.0",
|
||||||
"System.Net.Primitives": "4.0.11",
|
"System.Net.Primitives": "4.0.11",
|
||||||
|
@ -20,6 +20,7 @@ using MediaBrowser.Controller.MediaEncoding;
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using MediaBrowser.Model.Globalization;
|
using MediaBrowser.Model.Globalization;
|
||||||
using MediaBrowser.Model.Net;
|
using MediaBrowser.Model.Net;
|
||||||
|
using MediaBrowser.Model.System;
|
||||||
using MediaBrowser.Model.Threading;
|
using MediaBrowser.Model.Threading;
|
||||||
using Rssdp;
|
using Rssdp;
|
||||||
using Rssdp.Infrastructure;
|
using Rssdp.Infrastructure;
|
||||||
@ -52,7 +53,7 @@ namespace Emby.Dlna.Main
|
|||||||
|
|
||||||
private readonly ITimerFactory _timerFactory;
|
private readonly ITimerFactory _timerFactory;
|
||||||
private readonly ISocketFactory _socketFactory;
|
private readonly ISocketFactory _socketFactory;
|
||||||
|
private readonly IEnvironmentInfo _environmentInfo;
|
||||||
|
|
||||||
public DlnaEntryPoint(IServerConfigurationManager config,
|
public DlnaEntryPoint(IServerConfigurationManager config,
|
||||||
ILogManager logManager,
|
ILogManager logManager,
|
||||||
@ -66,7 +67,7 @@ namespace Emby.Dlna.Main
|
|||||||
IUserDataManager userDataManager,
|
IUserDataManager userDataManager,
|
||||||
ILocalizationManager localization,
|
ILocalizationManager localization,
|
||||||
IMediaSourceManager mediaSourceManager,
|
IMediaSourceManager mediaSourceManager,
|
||||||
IDeviceDiscovery deviceDiscovery, IMediaEncoder mediaEncoder, ISocketFactory socketFactory, ITimerFactory timerFactory)
|
IDeviceDiscovery deviceDiscovery, IMediaEncoder mediaEncoder, ISocketFactory socketFactory, ITimerFactory timerFactory, IEnvironmentInfo environmentInfo)
|
||||||
{
|
{
|
||||||
_config = config;
|
_config = config;
|
||||||
_appHost = appHost;
|
_appHost = appHost;
|
||||||
@ -83,6 +84,7 @@ namespace Emby.Dlna.Main
|
|||||||
_mediaEncoder = mediaEncoder;
|
_mediaEncoder = mediaEncoder;
|
||||||
_socketFactory = socketFactory;
|
_socketFactory = socketFactory;
|
||||||
_timerFactory = timerFactory;
|
_timerFactory = timerFactory;
|
||||||
|
_environmentInfo = environmentInfo;
|
||||||
_logger = logManager.GetLogger("Dlna");
|
_logger = logManager.GetLogger("Dlna");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,7 +171,7 @@ namespace Emby.Dlna.Main
|
|||||||
private void StartPublishing()
|
private void StartPublishing()
|
||||||
{
|
{
|
||||||
SsdpDevicePublisherBase.LogFunction = LogMessage;
|
SsdpDevicePublisherBase.LogFunction = LogMessage;
|
||||||
_Publisher = new SsdpDevicePublisher(_socketFactory, _timerFactory, "Windows", "10");
|
_Publisher = new SsdpDevicePublisher(_socketFactory, _timerFactory, _environmentInfo.OperatingSystemName, _environmentInfo.OperatingSystemVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void StartDeviceDiscovery()
|
private void StartDeviceDiscovery()
|
||||||
|
@ -13,6 +13,7 @@ using MediaBrowser.Controller.IO;
|
|||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Model.Extensions;
|
using MediaBrowser.Model.Extensions;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
|
using MediaBrowser.Model.System;
|
||||||
using MediaBrowser.Model.Tasks;
|
using MediaBrowser.Model.Tasks;
|
||||||
using MediaBrowser.Model.Threading;
|
using MediaBrowser.Model.Threading;
|
||||||
|
|
||||||
@ -32,8 +33,9 @@ namespace Emby.Server.Implementations.IO
|
|||||||
public string Path { get; private set; }
|
public string Path { get; private set; }
|
||||||
|
|
||||||
public event EventHandler<EventArgs> Completed;
|
public event EventHandler<EventArgs> Completed;
|
||||||
|
private readonly IEnvironmentInfo _environmentInfo;
|
||||||
|
|
||||||
public FileRefresher(string path, IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, ITaskManager taskManager, ILogger logger, ITimerFactory timerFactory)
|
public FileRefresher(string path, IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, ITaskManager taskManager, ILogger logger, ITimerFactory timerFactory, IEnvironmentInfo environmentInfo)
|
||||||
{
|
{
|
||||||
logger.Debug("New file refresher created for {0}", path);
|
logger.Debug("New file refresher created for {0}", path);
|
||||||
Path = path;
|
Path = path;
|
||||||
@ -44,6 +46,7 @@ namespace Emby.Server.Implementations.IO
|
|||||||
TaskManager = taskManager;
|
TaskManager = taskManager;
|
||||||
Logger = logger;
|
Logger = logger;
|
||||||
_timerFactory = timerFactory;
|
_timerFactory = timerFactory;
|
||||||
|
_environmentInfo = environmentInfo;
|
||||||
AddPath(path);
|
AddPath(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,11 +229,11 @@ namespace Emby.Server.Implementations.IO
|
|||||||
|
|
||||||
private bool IsFileLocked(string path)
|
private bool IsFileLocked(string path)
|
||||||
{
|
{
|
||||||
//if (Environment.OSVersion.Platform != PlatformID.Win32NT)
|
if (_environmentInfo.OperatingSystem != OperatingSystem.Windows)
|
||||||
//{
|
{
|
||||||
// // Causing lockups on linux
|
// Causing lockups on linux
|
||||||
// return false;
|
return false;
|
||||||
//}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -141,6 +141,7 @@
|
|||||||
<Compile Include="Net\ISocketFactory.cs" />
|
<Compile Include="Net\ISocketFactory.cs" />
|
||||||
<Compile Include="Net\IUdpSocket.cs" />
|
<Compile Include="Net\IUdpSocket.cs" />
|
||||||
<Compile Include="Net\SocketReceiveResult.cs" />
|
<Compile Include="Net\SocketReceiveResult.cs" />
|
||||||
|
<Compile Include="System\IEnvironmentInfo.cs" />
|
||||||
<Compile Include="TextEncoding\IEncoding.cs" />
|
<Compile Include="TextEncoding\IEncoding.cs" />
|
||||||
<Compile Include="Extensions\LinqExtensions.cs" />
|
<Compile Include="Extensions\LinqExtensions.cs" />
|
||||||
<Compile Include="FileOrganization\SmartMatchInfo.cs" />
|
<Compile Include="FileOrganization\SmartMatchInfo.cs" />
|
||||||
|
22
MediaBrowser.Model/System/IEnvironmentInfo.cs
Normal file
22
MediaBrowser.Model/System/IEnvironmentInfo.cs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Model.System
|
||||||
|
{
|
||||||
|
public interface IEnvironmentInfo
|
||||||
|
{
|
||||||
|
MediaBrowser.Model.System.OperatingSystem OperatingSystem { get; }
|
||||||
|
string OperatingSystemName { get; }
|
||||||
|
string OperatingSystemVersion { get; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum OperatingSystem
|
||||||
|
{
|
||||||
|
Windows,
|
||||||
|
Linux,
|
||||||
|
OSX
|
||||||
|
}
|
||||||
|
}
|
@ -139,11 +139,12 @@ namespace MediaBrowser.Server.Implementations.IO
|
|||||||
|
|
||||||
private readonly IFileSystem _fileSystem;
|
private readonly IFileSystem _fileSystem;
|
||||||
private readonly ITimerFactory _timerFactory;
|
private readonly ITimerFactory _timerFactory;
|
||||||
|
private readonly IEnvironmentInfo _environmentInfo;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="LibraryMonitor" /> class.
|
/// Initializes a new instance of the <see cref="LibraryMonitor" /> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public LibraryMonitor(ILogManager logManager, ITaskManager taskManager, ILibraryManager libraryManager, IServerConfigurationManager configurationManager, IFileSystem fileSystem, ITimerFactory timerFactory, ISystemEvents systemEvents)
|
public LibraryMonitor(ILogManager logManager, ITaskManager taskManager, ILibraryManager libraryManager, IServerConfigurationManager configurationManager, IFileSystem fileSystem, ITimerFactory timerFactory, ISystemEvents systemEvents, IEnvironmentInfo environmentInfo)
|
||||||
{
|
{
|
||||||
if (taskManager == null)
|
if (taskManager == null)
|
||||||
{
|
{
|
||||||
@ -156,6 +157,7 @@ namespace MediaBrowser.Server.Implementations.IO
|
|||||||
ConfigurationManager = configurationManager;
|
ConfigurationManager = configurationManager;
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
_timerFactory = timerFactory;
|
_timerFactory = timerFactory;
|
||||||
|
_environmentInfo = environmentInfo;
|
||||||
|
|
||||||
systemEvents.Resume += _systemEvents_Resume;
|
systemEvents.Resume += _systemEvents_Resume;
|
||||||
}
|
}
|
||||||
@ -525,7 +527,7 @@ namespace MediaBrowser.Server.Implementations.IO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var newRefresher = new FileRefresher(path, _fileSystem, ConfigurationManager, LibraryManager, TaskManager, Logger, _timerFactory);
|
var newRefresher = new FileRefresher(path, _fileSystem, ConfigurationManager, LibraryManager, TaskManager, Logger, _timerFactory, _environmentInfo);
|
||||||
newRefresher.Completed += NewRefresher_Completed;
|
newRefresher.Completed += NewRefresher_Completed;
|
||||||
_activeRefreshers.Add(newRefresher);
|
_activeRefreshers.Add(newRefresher);
|
||||||
}
|
}
|
||||||
|
@ -592,7 +592,7 @@ namespace MediaBrowser.Server.Startup.Common
|
|||||||
var musicManager = new MusicManager(LibraryManager);
|
var musicManager = new MusicManager(LibraryManager);
|
||||||
RegisterSingleInstance<IMusicManager>(new MusicManager(LibraryManager));
|
RegisterSingleInstance<IMusicManager>(new MusicManager(LibraryManager));
|
||||||
|
|
||||||
LibraryMonitor = new LibraryMonitor(LogManager, TaskManager, LibraryManager, ServerConfigurationManager, FileSystemManager, TimerFactory, SystemEvents);
|
LibraryMonitor = new LibraryMonitor(LogManager, TaskManager, LibraryManager, ServerConfigurationManager, FileSystemManager, TimerFactory, SystemEvents, EnvironmentInfo);
|
||||||
RegisterSingleInstance(LibraryMonitor);
|
RegisterSingleInstance(LibraryMonitor);
|
||||||
|
|
||||||
ProviderManager = new ProviderManager(HttpClient, ServerConfigurationManager, LibraryMonitor, LogManager, FileSystemManager, ApplicationPaths, () => LibraryManager, JsonSerializer, MemoryStreamProvider);
|
ProviderManager = new ProviderManager(HttpClient, ServerConfigurationManager, LibraryMonitor, LogManager, FileSystemManager, ApplicationPaths, () => LibraryManager, JsonSerializer, MemoryStreamProvider);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user