aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--BDInfo/BDInfo.csproj11
-rw-r--r--BDInfo/BdInfoExaminer.cs (renamed from MediaBrowser.ServerApplication/Implementations/BdInfoExaminer.cs)5
-rw-r--r--MediaBrowser.Api/EnvironmentService.cs29
-rw-r--r--MediaBrowser.Api/MediaBrowser.Api.csproj2
-rw-r--r--MediaBrowser.ApiInteraction.Javascript/MediaBrowser.ApiInteraction.Javascript.csproj12
-rw-r--r--MediaBrowser.ClickOnce/MediaBrowser.ClickOnce.csproj4
-rw-r--r--MediaBrowser.Common/Extensions/BaseExtensions.cs19
-rw-r--r--MediaBrowser.Common/Kernel/BaseKernel.cs3
-rw-r--r--MediaBrowser.Common/Kernel/IApplicationHost.cs7
-rw-r--r--MediaBrowser.Common/Kernel/TcpManager.cs78
-rw-r--r--MediaBrowser.Common/MediaBrowser.Common.csproj10
-rw-r--r--MediaBrowser.Common/Net/HttpManager.cs33
-rw-r--r--MediaBrowser.Common/Net/INetworkManager.cs72
-rw-r--r--MediaBrowser.Controller/BaseManager.cs (renamed from MediaBrowser.Common/Kernel/BaseManager.cs)5
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs2
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs3
-rw-r--r--MediaBrowser.Controller/Entities/Movies/Movie.cs2
-rw-r--r--MediaBrowser.Controller/Entities/TV/Season.cs2
-rw-r--r--MediaBrowser.Controller/Entities/TV/Series.cs2
-rw-r--r--MediaBrowser.Controller/IO/FileData.cs4
-rw-r--r--MediaBrowser.Controller/IO/FileSystem.cs3
-rw-r--r--MediaBrowser.Controller/IO/NativeMethods.cs (renamed from MediaBrowser.Common/Win32/NativeMethods.cs)2
-rw-r--r--MediaBrowser.Controller/Library/ItemResolveArgs.cs4
-rw-r--r--MediaBrowser.Controller/Library/LibraryManager.cs4
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj3
-rw-r--r--MediaBrowser.Controller/MediaInfo/FFMpegManager.cs23
-rw-r--r--MediaBrowser.Controller/Plugins/PluginSecurityManager.cs1
-rw-r--r--MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs4
-rw-r--r--MediaBrowser.Controller/Providers/ImagesByNameProvider.cs3
-rw-r--r--MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs4
-rw-r--r--MediaBrowser.Controller/Resolvers/TV/TVUtils.cs2
-rw-r--r--MediaBrowser.Controller/Updates/InstallationManager.cs19
-rw-r--r--MediaBrowser.Model/MediaBrowser.Model.csproj2
-rw-r--r--MediaBrowser.Model/Net/NetworkShare.cs31
-rw-r--r--MediaBrowser.Model/Net/NetworkShareType.cs30
-rw-r--r--MediaBrowser.Networking/Management/NativeMethods.cs72
-rw-r--r--MediaBrowser.Networking/Management/NetworkManager.cs (renamed from MediaBrowser.Common/Net/NetUtils.cs)96
-rw-r--r--MediaBrowser.Networking/Management/NetworkShares.cs (renamed from MediaBrowser.Controller/IO/NetworkShares.cs)24
-rw-r--r--MediaBrowser.Networking/MediaBrowser.Networking.csproj14
-rw-r--r--MediaBrowser.Server.Sqlite/MediaBrowser.Server.Sqlite.csproj3
-rw-r--r--MediaBrowser.Server.WorldWeatherOnline/MediaBrowser.Server.WorldWeatherOnline.csproj4
-rw-r--r--MediaBrowser.ServerApplication/App.xaml.cs18
-rw-r--r--MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj5
43 files changed, 501 insertions, 175 deletions
diff --git a/BDInfo/BDInfo.csproj b/BDInfo/BDInfo.csproj
index 4e57d9e08..234050ed3 100644
--- a/BDInfo/BDInfo.csproj
+++ b/BDInfo/BDInfo.csproj
@@ -32,13 +32,10 @@
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
+ <Compile Include="BdInfoExaminer.cs" />
<Compile Include="BDInfoSettings.cs" />
<Compile Include="BDROM.cs" />
<Compile Include="LanguageCodes.cs" />
@@ -63,6 +60,12 @@
<ItemGroup>
<Content Include="ReadMe.txt" />
</ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj">
+ <Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
+ <Name>MediaBrowser.Model</Name>
+ </ProjectReference>
+ </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
diff --git a/MediaBrowser.ServerApplication/Implementations/BdInfoExaminer.cs b/BDInfo/BdInfoExaminer.cs
index dbde630be..cfa9a946b 100644
--- a/MediaBrowser.ServerApplication/Implementations/BdInfoExaminer.cs
+++ b/BDInfo/BdInfoExaminer.cs
@@ -1,11 +1,10 @@
-using BDInfo;
-using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Entities;
using MediaBrowser.Model.MediaInfo;
using System;
using System.Collections.Generic;
using System.Linq;
-namespace MediaBrowser.ServerApplication.Implementations
+namespace BDInfo
{
/// <summary>
/// Class BdInfoExaminer
diff --git a/MediaBrowser.Api/EnvironmentService.cs b/MediaBrowser.Api/EnvironmentService.cs
index 83678c3f2..618eeae5d 100644
--- a/MediaBrowser.Api/EnvironmentService.cs
+++ b/MediaBrowser.Api/EnvironmentService.cs
@@ -1,6 +1,7 @@
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Net;
using ServiceStack.ServiceHost;
using System;
using System.Collections.Generic;
@@ -60,6 +61,26 @@ namespace MediaBrowser.Api
public class EnvironmentService : BaseRestService
{
/// <summary>
+ /// The _network manager
+ /// </summary>
+ private readonly INetworkManager _networkManager;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="EnvironmentService" /> class.
+ /// </summary>
+ /// <param name="networkManager">The network manager.</param>
+ /// <exception cref="System.ArgumentNullException">networkManager</exception>
+ public EnvironmentService(INetworkManager networkManager)
+ {
+ if (networkManager == null)
+ {
+ throw new ArgumentNullException("networkManager");
+ }
+
+ _networkManager = networkManager;
+ }
+
+ /// <summary>
/// Gets the specified request.
/// </summary>
/// <param name="request">The request.</param>
@@ -131,7 +152,7 @@ namespace MediaBrowser.Api
/// <returns>IEnumerable{FileSystemEntryInfo}.</returns>
private IEnumerable<FileSystemEntryInfo> GetNetworkComputers()
{
- return NetUtils.GetNetworkComputers().Select(c => new FileSystemEntryInfo
+ return _networkManager.GetNetworkDevices().Select(c => new FileSystemEntryInfo
{
Name = c,
Path = NetworkPrefix + c,
@@ -156,10 +177,10 @@ namespace MediaBrowser.Api
/// <returns>IEnumerable{FileSystemEntryInfo}.</returns>
private IEnumerable<FileSystemEntryInfo> GetNetworkShares(string path)
{
- return new ShareCollection(path).OfType<Share>().Where(s => s.ShareType == ShareType.Disk).Select(c => new FileSystemEntryInfo
+ return _networkManager.GetNetworkShares(path).Where(s => s.ShareType == NetworkShareType.Disk).Select(c => new FileSystemEntryInfo
{
- Name = c.NetName,
- Path = Path.Combine(path, c.NetName),
+ Name = c.Name,
+ Path = Path.Combine(path, c.Name),
Type = FileSystemEntryType.NetworkShare
});
}
diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj
index f6045ddd1..9bdcdb650 100644
--- a/MediaBrowser.Api/MediaBrowser.Api.csproj
+++ b/MediaBrowser.Api/MediaBrowser.Api.csproj
@@ -65,8 +65,6 @@
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
- <Reference Include="System.Drawing" />
- <Reference Include="System.Runtime.Serialization" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.XML" />
diff --git a/MediaBrowser.ApiInteraction.Javascript/MediaBrowser.ApiInteraction.Javascript.csproj b/MediaBrowser.ApiInteraction.Javascript/MediaBrowser.ApiInteraction.Javascript.csproj
index 3e8ed6c38..68e8c880d 100644
--- a/MediaBrowser.ApiInteraction.Javascript/MediaBrowser.ApiInteraction.Javascript.csproj
+++ b/MediaBrowser.ApiInteraction.Javascript/MediaBrowser.ApiInteraction.Javascript.csproj
@@ -69,11 +69,7 @@
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\SharedVersion.cs">
@@ -87,14 +83,6 @@
<Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project>
<Name>MediaBrowser.Common</Name>
</ProjectReference>
- <ProjectReference Include="..\MediaBrowser.Controller\MediaBrowser.Controller.csproj">
- <Project>{17e1f4e6-8abd-4fe5-9ecf-43d4b6087ba2}</Project>
- <Name>MediaBrowser.Controller</Name>
- </ProjectReference>
- <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj">
- <Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
- <Name>MediaBrowser.Model</Name>
- </ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="ApiClient.js" />
diff --git a/MediaBrowser.ClickOnce/MediaBrowser.ClickOnce.csproj b/MediaBrowser.ClickOnce/MediaBrowser.ClickOnce.csproj
index 49c69b0d4..9d8c207dc 100644
--- a/MediaBrowser.ClickOnce/MediaBrowser.ClickOnce.csproj
+++ b/MediaBrowser.ClickOnce/MediaBrowser.ClickOnce.csproj
@@ -33,11 +33,7 @@
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Deployment" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\SharedVersion.cs">
diff --git a/MediaBrowser.Common/Extensions/BaseExtensions.cs b/MediaBrowser.Common/Extensions/BaseExtensions.cs
index 6abe6d4e0..5342cff4b 100644
--- a/MediaBrowser.Common/Extensions/BaseExtensions.cs
+++ b/MediaBrowser.Common/Extensions/BaseExtensions.cs
@@ -1,10 +1,8 @@
using System;
using System.Collections.Generic;
-using System.Diagnostics;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
-using System.Threading.Tasks;
namespace MediaBrowser.Common.Extensions
{
@@ -46,23 +44,6 @@ namespace MediaBrowser.Common.Extensions
}
/// <summary>
- /// Provides a non-blocking method to start a process and wait asynchronously for it to exit
- /// </summary>
- /// <param name="process">The process.</param>
- /// <returns>Task{System.Boolean}.</returns>
- public static Task<bool> RunAsync(this Process process)
- {
- var tcs = new TaskCompletionSource<bool>();
-
- process.EnableRaisingEvents = true;
- process.Exited += (sender, args) => tcs.SetResult(true);
-
- process.Start();
-
- return tcs.Task;
- }
-
- /// <summary>
/// Shuffles an IEnumerable
/// </summary>
/// <typeparam name="T"></typeparam>
diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs
index 2b9550496..08e8c3e75 100644
--- a/MediaBrowser.Common/Kernel/BaseKernel.cs
+++ b/MediaBrowser.Common/Kernel/BaseKernel.cs
@@ -1,5 +1,4 @@
using MediaBrowser.Common.Events;
-using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Common.Plugins;
using MediaBrowser.Common.ScheduledTasks;
@@ -396,7 +395,7 @@ namespace MediaBrowser.Common.Kernel
await ReloadComposableParts().ConfigureAwait(false);
DisposeTcpManager();
- TcpManager = new TcpManager(ApplicationHost, this, Logger);
+ TcpManager = new TcpManager(ApplicationHost, this, ApplicationHost.Resolve<INetworkManager>(), Logger);
}
/// <summary>
diff --git a/MediaBrowser.Common/Kernel/IApplicationHost.cs b/MediaBrowser.Common/Kernel/IApplicationHost.cs
index ae2e71667..dccb65b2a 100644
--- a/MediaBrowser.Common/Kernel/IApplicationHost.cs
+++ b/MediaBrowser.Common/Kernel/IApplicationHost.cs
@@ -59,6 +59,13 @@ namespace MediaBrowser.Common.Kernel
void Register<T>(T obj) where T : class;
/// <summary>
+ /// Registers the specified service type.
+ /// </summary>
+ /// <param name="serviceType">Type of the service.</param>
+ /// <param name="implementation">Type of the implementation.</param>
+ void Register(Type serviceType, Type implementation);
+
+ /// <summary>
/// Resolves this instance.
/// </summary>
/// <typeparam name="T"></typeparam>
diff --git a/MediaBrowser.Common/Kernel/TcpManager.cs b/MediaBrowser.Common/Kernel/TcpManager.cs
index 086815cbf..0b171c492 100644
--- a/MediaBrowser.Common/Kernel/TcpManager.cs
+++ b/MediaBrowser.Common/Kernel/TcpManager.cs
@@ -22,7 +22,7 @@ namespace MediaBrowser.Common.Kernel
/// <summary>
/// Manages the Http Server, Udp Server and WebSocket connections
/// </summary>
- public class TcpManager : BaseManager<IKernel>
+ public class TcpManager : IDisposable
{
/// <summary>
/// This is the udp server used for server discovery by clients
@@ -66,6 +66,11 @@ namespace MediaBrowser.Common.Kernel
private readonly ILogger _logger;
/// <summary>
+ /// The _network manager
+ /// </summary>
+ private readonly INetworkManager _networkManager;
+
+ /// <summary>
/// The _application host
/// </summary>
private readonly IApplicationHost _applicationHost;
@@ -76,6 +81,11 @@ namespace MediaBrowser.Common.Kernel
private bool? _supportsNativeWebSocket;
/// <summary>
+ /// The _kernel
+ /// </summary>
+ private readonly IKernel _kernel;
+
+ /// <summary>
/// Gets a value indicating whether [supports web socket].
/// </summary>
/// <value><c>true</c> if [supports web socket]; otherwise, <c>false</c>.</value>
@@ -107,7 +117,7 @@ namespace MediaBrowser.Common.Kernel
/// <value>The web socket port number.</value>
public int WebSocketPortNumber
{
- get { return SupportsNativeWebSocket ? Kernel.Configuration.HttpServerPortNumber : Kernel.Configuration.LegacyWebSocketPortNumber; }
+ get { return SupportsNativeWebSocket ? _kernel.Configuration.HttpServerPortNumber : _kernel.Configuration.LegacyWebSocketPortNumber; }
}
/// <summary>
@@ -115,12 +125,31 @@ namespace MediaBrowser.Common.Kernel
/// </summary>
/// <param name="applicationHost">The application host.</param>
/// <param name="kernel">The kernel.</param>
+ /// <param name="networkManager">The network manager.</param>
/// <param name="logger">The logger.</param>
- public TcpManager(IApplicationHost applicationHost, IKernel kernel, ILogger logger)
- : base(kernel)
+ public TcpManager(IApplicationHost applicationHost, IKernel kernel, INetworkManager networkManager, ILogger logger)
{
+ if (applicationHost == null)
+ {
+ throw new ArgumentNullException("applicationHost");
+ }
+ if (kernel == null)
+ {
+ throw new ArgumentNullException("kernel");
+ }
+ if (networkManager == null)
+ {
+ throw new ArgumentNullException("networkManager");
+ }
+ if (logger == null)
+ {
+ throw new ArgumentNullException("logger");
+ }
+
_logger = logger;
+ _kernel = kernel;
_applicationHost = applicationHost;
+ _networkManager = networkManager;
if (kernel.IsFirstRun)
{
@@ -142,14 +171,14 @@ namespace MediaBrowser.Common.Kernel
private void ReloadExternalWebSocketServer()
{
// Avoid windows firewall prompts in the ui
- if (Kernel.KernelContext != KernelContext.Server)
+ if (_kernel.KernelContext != KernelContext.Server)
{
return;
}
DisposeExternalWebSocketServer();
- ExternalWebSocketServer = new WebSocketServer(Kernel.Configuration.LegacyWebSocketPortNumber, IPAddress.Any)
+ ExternalWebSocketServer = new WebSocketServer(_kernel.Configuration.LegacyWebSocketPortNumber, IPAddress.Any)
{
OnConnected = OnAlchemyWebSocketClientConnected,
TimeOut = TimeSpan.FromMinutes(60)
@@ -178,7 +207,7 @@ namespace MediaBrowser.Common.Kernel
public void ReloadHttpServer(bool registerServerOnFailure = true)
{
// Only reload if the port has changed, so that we don't disconnect any active users
- if (HttpServer != null && HttpServer.UrlPrefix.Equals(Kernel.HttpServerUrlPrefix, StringComparison.OrdinalIgnoreCase))
+ if (HttpServer != null && HttpServer.UrlPrefix.Equals(_kernel.HttpServerUrlPrefix, StringComparison.OrdinalIgnoreCase))
{
return;
}
@@ -189,7 +218,7 @@ namespace MediaBrowser.Common.Kernel
try
{
- HttpServer = new HttpServer(Kernel.HttpServerUrlPrefix, "Media Browser", _applicationHost, Kernel, _logger);
+ HttpServer = new HttpServer(_kernel.HttpServerUrlPrefix, "Media Browser", _applicationHost, _kernel, _logger);
}
catch (HttpListenerException ex)
{
@@ -229,7 +258,7 @@ namespace MediaBrowser.Common.Kernel
/// <param name="result">The result.</param>
private async void ProcessWebSocketMessageReceived(WebSocketMessageInfo result)
{
- var tasks = Kernel.WebSocketListeners.Select(i => Task.Run(async () =>
+ var tasks = _kernel.WebSocketListeners.Select(i => Task.Run(async () =>
{
try
{
@@ -256,7 +285,7 @@ namespace MediaBrowser.Common.Kernel
}
// Avoid windows firewall prompts in the ui
- if (Kernel.KernelContext != KernelContext.Server)
+ if (_kernel.KernelContext != KernelContext.Server)
{
return;
}
@@ -266,7 +295,7 @@ namespace MediaBrowser.Common.Kernel
try
{
// The port number can't be in configuration because we don't want it to ever change
- UdpServer = new UdpServer(new IPEndPoint(IPAddress.Any, Kernel.UdpServerPortNumber));
+ UdpServer = new UdpServer(new IPEndPoint(IPAddress.Any, _kernel.UdpServerPortNumber));
}
catch (SocketException ex)
{
@@ -276,7 +305,7 @@ namespace MediaBrowser.Common.Kernel
UdpListener = UdpServer.Subscribe(async res =>
{
- var expectedMessage = String.Format("who is MediaBrowser{0}?", Kernel.KernelContext);
+ var expectedMessage = String.Format("who is MediaBrowser{0}?", _kernel.KernelContext);
var expectedMessageBytes = Encoding.UTF8.GetBytes(expectedMessage);
if (expectedMessageBytes.SequenceEqual(res.Buffer))
@@ -284,7 +313,7 @@ namespace MediaBrowser.Common.Kernel
_logger.Info("Received UDP server request from " + res.RemoteEndPoint.ToString());
// Send a response back with our ip address and port
- var response = String.Format("MediaBrowser{0}|{1}:{2}", Kernel.KernelContext, NetUtils.GetLocalIpAddress(), Kernel.UdpServerPortNumber);
+ var response = String.Format("MediaBrowser{0}|{1}:{2}", _kernel.KernelContext, _networkManager.GetLocalIpAddress(), _kernel.UdpServerPortNumber);
await UdpServer.SendAsync(response, res.RemoteEndPoint);
}
@@ -422,7 +451,7 @@ namespace MediaBrowser.Common.Kernel
private void RegisterServerWithAdministratorAccess()
{
// Create a temp file path to extract the bat file to
- var tmpFile = Path.Combine(Kernel.ApplicationPaths.TempDirectory, Guid.NewGuid() + ".bat");
+ var tmpFile = Path.Combine(_kernel.ApplicationPaths.TempDirectory, Guid.NewGuid() + ".bat");
// Extract the bat file
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MediaBrowser.Common.Kernel.RegisterServer.bat"))
@@ -437,10 +466,10 @@ namespace MediaBrowser.Common.Kernel
{
FileName = tmpFile,
- Arguments = string.Format("{0} {1} {2} {3}", Kernel.Configuration.HttpServerPortNumber,
- Kernel.HttpServerUrlPrefix,
- Kernel.UdpServerPortNumber,
- Kernel.Configuration.LegacyWebSocketPortNumber),
+ Arguments = string.Format("{0} {1} {2} {3}", _kernel.Configuration.HttpServerPortNumber,
+ _kernel.HttpServerUrlPrefix,
+ _kernel.UdpServerPortNumber,
+ _kernel.Configuration.LegacyWebSocketPortNumber),
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
@@ -455,18 +484,25 @@ namespace MediaBrowser.Common.Kernel
}
/// <summary>
+ /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+ /// </summary>
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ /// <summary>
/// Releases unmanaged and - optionally - managed resources.
/// </summary>
/// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
- protected override void Dispose(bool dispose)
+ protected virtual void Dispose(bool dispose)
{
if (dispose)
{
DisposeUdpServer();
DisposeHttpServer();
}
-
- base.Dispose(dispose);
}
/// <summary>
diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj
index 6542ab81d..57b30eedc 100644
--- a/MediaBrowser.Common/MediaBrowser.Common.csproj
+++ b/MediaBrowser.Common/MediaBrowser.Common.csproj
@@ -45,7 +45,6 @@
<HintPath>..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
- <Reference Include="PresentationFramework" />
<Reference Include="protobuf-net, Version=2.0.0.621, Culture=neutral, PublicKeyToken=257b51d87d2e4d67, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll</HintPath>
@@ -91,7 +90,6 @@
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
- <Reference Include="System.Management" />
<Reference Include="System.Net" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.WebRequest" />
@@ -107,12 +105,8 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Rx-Linq.2.0.21114\lib\Net45\System.Reactive.Linq.dll</HintPath>
</Reference>
- <Reference Include="System.Runtime.Remoting" />
- <Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Web" />
- <Reference Include="System.Xml.Linq" />
<Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
@@ -130,7 +124,6 @@
<Compile Include="IO\ProgressStream.cs" />
<Compile Include="IO\StreamDefaults.cs" />
<Compile Include="Kernel\BaseApplicationPaths.cs" />
- <Compile Include="Kernel\BaseManager.cs" />
<Compile Include="Kernel\BasePeriodicWebSocketListener.cs" />
<Compile Include="Kernel\IWebSocketListener.cs" />
<Compile Include="Kernel\IApplicationHost.cs" />
@@ -142,12 +135,12 @@
<Compile Include="Net\Handlers\IHttpServerHandler.cs" />
<Compile Include="Net\Handlers\StaticFileHandler.cs" />
<Compile Include="Net\HttpManager.cs" />
+ <Compile Include="Net\INetworkManager.cs" />
<Compile Include="Net\IRestfulService.cs" />
<Compile Include="Net\IUdpServer.cs" />
<Compile Include="Net\IWebSocket.cs" />
<Compile Include="Net\MimeTypes.cs" />
<Compile Include="Net\NativeWebSocket.cs" />
- <Compile Include="Net\NetUtils.cs" />
<Compile Include="Net\UdpServer.cs" />
<Compile Include="Net\WebSocketConnection.cs" />
<Compile Include="Plugins\BaseUiPlugin.cs" />
@@ -184,7 +177,6 @@
<Compile Include="ScheduledTasks\IntervalTrigger.cs" />
<Compile Include="ScheduledTasks\IScheduledTask.cs" />
<Compile Include="ScheduledTasks\WeeklyTrigger.cs" />
- <Compile Include="Win32\NativeMethods.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
diff --git a/MediaBrowser.Common/Net/HttpManager.cs b/MediaBrowser.Common/Net/HttpManager.cs
index 1deffba69..180843e0f 100644
--- a/MediaBrowser.Common/Net/HttpManager.cs
+++ b/MediaBrowser.Common/Net/HttpManager.cs
@@ -19,7 +19,7 @@ namespace MediaBrowser.Common.Net
/// <summary>
/// Class HttpManager
/// </summary>
- public class HttpManager : BaseManager<IKernel>
+ public class HttpManager : IDisposable
{
/// <summary>
/// The _logger
@@ -27,14 +27,28 @@ namespace MediaBrowser.Common.Net
private readonly ILogger _logger;
/// <summary>
+ /// The _kernel
+ /// </summary>
+ private readonly IKernel _kernel;
+
+ /// <summary>
/// Initializes a new instance of the <see cref="HttpManager" /> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="logger">The logger.</param>
public HttpManager(IKernel kernel, ILogger logger)
- : base(kernel)
{
+ if (kernel == null)
+ {
+ throw new ArgumentNullException("kernel");
+ }
+ if (logger == null)
+ {
+ throw new ArgumentNullException("logger");
+ }
+
_logger = logger;
+ _kernel = kernel;
}
/// <summary>
@@ -196,7 +210,7 @@ namespace MediaBrowser.Common.Net
cancellationToken.ThrowIfCancellationRequested();
- var tempFile = Path.Combine(Kernel.ApplicationPaths.TempDirectory, Guid.NewGuid() + ".tmp");
+ var tempFile = Path.Combine(_kernel.ApplicationPaths.TempDirectory, Guid.NewGuid() + ".tmp");
var message = new HttpRequestMessage(HttpMethod.Get, url);
@@ -403,10 +417,19 @@ namespace MediaBrowser.Common.Net
}
/// <summary>
+ /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+ /// </summary>
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ /// <summary>
/// Releases unmanaged and - optionally - managed resources.
/// </summary>
/// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
- protected override void Dispose(bool dispose)
+ protected virtual void Dispose(bool dispose)
{
if (dispose)
{
@@ -417,8 +440,6 @@ namespace MediaBrowser.Common.Net
_httpClients.Clear();
}
-
- base.Dispose(dispose);
}
/// <summary>
diff --git a/MediaBrowser.Common/Net/INetworkManager.cs b/MediaBrowser.Common/Net/INetworkManager.cs
new file mode 100644
index 000000000..7f6bfe152
--- /dev/null
+++ b/MediaBrowser.Common/Net/INetworkManager.cs
@@ -0,0 +1,72 @@
+using System.Collections.Generic;
+using MediaBrowser.Model.Net;
+
+namespace MediaBrowser.Common.Net
+{
+ public interface INetworkManager
+ {
+ /// <summary>
+ /// Gets the machine's local ip address
+ /// </summary>
+ /// <returns>IPAddress.</returns>
+ string GetLocalIpAddress();
+
+ /// <summary>
+ /// Gets a random port number that is currently available
+ /// </summary>
+ /// <returns>System.Int32.</returns>
+ int GetRandomUnusedPort();
+
+ /// <summary>
+ /// Creates the netsh URL registration.
+ /// </summary>
+ void AuthorizeHttpListening(string url);
+
+ /// <summary>
+ /// Adds the windows firewall rule.
+ /// </summary>
+ /// <param name="port">The port.</param>
+ /// <param name="protocol">The protocol.</param>
+ void AddSystemFirewallRule(int port, NetworkProtocol protocol);
+
+ /// <summary>
+ /// Removes the windows firewall rule.
+ /// </summary>
+ /// <param name="port">The port.</param>
+ /// <param name="protocol">The protocol.</param>
+ void RemoveSystemFirewallRule(int port, NetworkProtocol protocol);
+
+ /// <summary>
+ /// Returns MAC Address from first Network Card in Computer
+ /// </summary>
+ /// <returns>[string] MAC Address</returns>
+ string GetMacAddress();
+
+ /// <summary>
+ /// Gets available devices within the domain
+ /// </summary>
+ /// <returns>PC's in the Domain</returns>
+ IEnumerable<string> GetNetworkDevices();
+
+ /// <summary>
+ /// Gets the network shares.
+ /// </summary>
+ /// <param name="path">The path.</param>
+ /// <returns>IEnumerable{NetworkShare}.</returns>
+ IEnumerable<NetworkShare> GetNetworkShares(string path);
+ }
+ /// <summary>
+ /// Enum NetworkProtocol
+ /// </summary>
+ public enum NetworkProtocol
+ {
+ /// <summary>
+ /// The TCP
+ /// </summary>
+ Tcp,
+ /// <summary>
+ /// The UDP
+ /// </summary>
+ Udp
+ }
+} \ No newline at end of file
diff --git a/MediaBrowser.Common/Kernel/BaseManager.cs b/MediaBrowser.Controller/BaseManager.cs
index 3d830caef..99395a50e 100644
--- a/MediaBrowser.Common/Kernel/BaseManager.cs
+++ b/MediaBrowser.Controller/BaseManager.cs
@@ -1,6 +1,7 @@
-using System;
+using MediaBrowser.Common.Kernel;
+using System;
-namespace MediaBrowser.Common.Kernel
+namespace MediaBrowser.Controller
{
/// <summary>
/// Class BaseManager
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 023a79ee9..8535f85c2 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -1,6 +1,4 @@
using MediaBrowser.Common.Extensions;
-using MediaBrowser.Common.IO;
-using MediaBrowser.Common.Win32;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Localization;
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index bcb0b26be..b2be96b71 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -1,11 +1,10 @@
using MediaBrowser.Common.Extensions;
-using MediaBrowser.Common.Win32;
+using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Resolvers;
using MediaBrowser.Controller.Sorting;
using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Tasks;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs
index 5b7661dcf..92177f916 100644
--- a/MediaBrowser.Controller/Entities/Movies/Movie.cs
+++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs
@@ -1,6 +1,4 @@
using MediaBrowser.Common.Extensions;
-using MediaBrowser.Common.IO;
-using MediaBrowser.Common.Win32;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.Entities;
using System;
diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs
index c80c59eaf..09b1cec0f 100644
--- a/MediaBrowser.Controller/Entities/TV/Season.cs
+++ b/MediaBrowser.Controller/Entities/TV/Season.cs
@@ -1,7 +1,5 @@
using System.Collections.Generic;
using MediaBrowser.Common.Extensions;
-using MediaBrowser.Common.IO;
-using MediaBrowser.Common.Win32;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Localization;
diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs
index 152dcbac8..8a56e45cd 100644
--- a/MediaBrowser.Controller/Entities/TV/Series.cs
+++ b/MediaBrowser.Controller/Entities/TV/Series.cs
@@ -1,5 +1,5 @@
using MediaBrowser.Common.Extensions;
-using MediaBrowser.Common.Win32;
+using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Localization;
using MediaBrowser.Model.Entities;
diff --git a/MediaBrowser.Controller/IO/FileData.cs b/MediaBrowser.Controller/IO/FileData.cs
index 130f08625..7cefcd71a 100644
--- a/MediaBrowser.Controller/IO/FileData.cs
+++ b/MediaBrowser.Controller/IO/FileData.cs
@@ -1,6 +1,4 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Common.Win32;
-using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Logging;
using System;
using System.Collections.Generic;
diff --git a/MediaBrowser.Controller/IO/FileSystem.cs b/MediaBrowser.Controller/IO/FileSystem.cs
index c7b7c660b..28deca100 100644
--- a/MediaBrowser.Controller/IO/FileSystem.cs
+++ b/MediaBrowser.Controller/IO/FileSystem.cs
@@ -1,5 +1,4 @@
-using MediaBrowser.Common.Win32;
-using System;
+using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
diff --git a/MediaBrowser.Common/Win32/NativeMethods.cs b/MediaBrowser.Controller/IO/NativeMethods.cs
index a0462fb46..632ef0216 100644
--- a/MediaBrowser.Common/Win32/NativeMethods.cs
+++ b/MediaBrowser.Controller/IO/NativeMethods.cs
@@ -4,7 +4,7 @@ using System.Runtime.InteropServices;
using System.Security;
using System.Text;
-namespace MediaBrowser.Common.Win32
+namespace MediaBrowser.Controller.IO
{
/// <summary>
/// Class NativeMethods
diff --git a/MediaBrowser.Controller/Library/ItemResolveArgs.cs b/MediaBrowser.Controller/Library/ItemResolveArgs.cs
index 4d58af437..0979c6845 100644
--- a/MediaBrowser.Controller/Library/ItemResolveArgs.cs
+++ b/MediaBrowser.Controller/Library/ItemResolveArgs.cs
@@ -1,6 +1,4 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Common.Win32;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
using System;
using System.Collections.Generic;
using System.IO;
diff --git a/MediaBrowser.Controller/Library/LibraryManager.cs b/MediaBrowser.Controller/Library/LibraryManager.cs
index dfaef12cb..c0c1fe1d6 100644
--- a/MediaBrowser.Controller/Library/LibraryManager.cs
+++ b/MediaBrowser.Controller/Library/LibraryManager.cs
@@ -1,14 +1,10 @@
using MediaBrowser.Common.Events;
using MediaBrowser.Common.Extensions;
-using MediaBrowser.Common.IO;
-using MediaBrowser.Common.Kernel;
-using MediaBrowser.Common.Win32;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Resolvers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
-using MediaBrowser.Model.Tasks;
using MoreLinq;
using System;
using System.Collections.Concurrent;
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
index 213c30bac..070120563 100644
--- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj
+++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
@@ -77,6 +77,7 @@
<Compile Include="..\SharedVersion.cs">
<Link>Properties\SharedVersion.cs</Link>
</Compile>
+ <Compile Include="BaseManager.cs" />
<Compile Include="Drawing\ImageExtensions.cs" />
<Compile Include="Drawing\ImageHeader.cs" />
<Compile Include="Drawing\ImageManager.cs" />
@@ -109,7 +110,7 @@
<Compile Include="Extensions\XmlExtensions.cs" />
<Compile Include="IO\FileSystem.cs" />
<Compile Include="IO\FileSystemManager.cs" />
- <Compile Include="IO\NetworkShares.cs" />
+ <Compile Include="IO\NativeMethods.cs" />
<Compile Include="Library\ChildrenChangedEventArgs.cs" />
<Compile Include="Library\DtoBuilder.cs" />
<Compile Include="Library\Profiler.cs" />
diff --git a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs
index 7ef70ea42..9c9b0e9f2 100644
--- a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs
+++ b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs
@@ -634,7 +634,7 @@ namespace MediaBrowser.Controller.MediaInfo
await AudioImageResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
- await process.RunAsync().ConfigureAwait(false);
+ await RunAsync(process).ConfigureAwait(false);
AudioImageResourcePool.Release();
@@ -713,7 +713,7 @@ namespace MediaBrowser.Controller.MediaInfo
await AudioImageResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
- await process.RunAsync().ConfigureAwait(false);
+ await RunAsync(process).ConfigureAwait(false);
AudioImageResourcePool.Release();
@@ -768,7 +768,7 @@ namespace MediaBrowser.Controller.MediaInfo
await AudioImageResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
- await process.RunAsync().ConfigureAwait(false);
+ await RunAsync(process).ConfigureAwait(false);
AudioImageResourcePool.Release();
@@ -972,6 +972,23 @@ namespace MediaBrowser.Controller.MediaInfo
}
/// <summary>
+ /// Provides a non-blocking method to start a process and wait asynchronously for it to exit
+ /// </summary>
+ /// <param name="process">The process.</param>
+ /// <returns>Task{System.Boolean}.</returns>
+ private static Task<bool> RunAsync(Process process)
+ {
+ var tcs = new TaskCompletionSource<bool>();
+
+ process.EnableRaisingEvents = true;
+ process.Exited += (sender, args) => tcs.SetResult(true);
+
+ process.Start();
+
+ return tcs.Task;
+ }
+
+ /// <summary>
/// Sets the error mode.
/// </summary>
/// <param name="uMode">The u mode.</param>
diff --git a/MediaBrowser.Controller/Plugins/PluginSecurityManager.cs b/MediaBrowser.Controller/Plugins/PluginSecurityManager.cs
index 5dbd6cbc6..f559d1fd0 100644
--- a/MediaBrowser.Controller/Plugins/PluginSecurityManager.cs
+++ b/MediaBrowser.Controller/Plugins/PluginSecurityManager.cs
@@ -1,6 +1,5 @@
using Mediabrowser.Model.Entities;
using Mediabrowser.PluginSecurity;
-using MediaBrowser.Common.Kernel;
using System.Threading;
using System.Threading.Tasks;
diff --git a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs
index 4c3250ff4..b992c35d9 100644
--- a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs
+++ b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs
@@ -1,5 +1,5 @@
-using MediaBrowser.Common.Win32;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.IO;
using MediaBrowser.Model.Entities;
using System;
using System.Collections.Generic;
diff --git a/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs b/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs
index fcc31a75e..fa1fb2a9c 100644
--- a/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs
+++ b/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs
@@ -1,5 +1,4 @@
-using MediaBrowser.Common.Win32;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.IO;
using System;
using System.Globalization;
diff --git a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs
index f406cb185..6488d5ef8 100644
--- a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs
+++ b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs
@@ -1,6 +1,4 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Common.Win32;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library;
using System;
diff --git a/MediaBrowser.Controller/Resolvers/TV/TVUtils.cs b/MediaBrowser.Controller/Resolvers/TV/TVUtils.cs
index cfb402456..dddccaff9 100644
--- a/MediaBrowser.Controller/Resolvers/TV/TVUtils.cs
+++ b/MediaBrowser.Controller/Resolvers/TV/TVUtils.cs
@@ -1,4 +1,4 @@
-using MediaBrowser.Common.Win32;
+using MediaBrowser.Controller.IO;
using System;
using System.Collections.Generic;
using System.Linq;
diff --git a/MediaBrowser.Controller/Updates/InstallationManager.cs b/MediaBrowser.Controller/Updates/InstallationManager.cs
index 71a5f487b..bef5a6472 100644
--- a/MediaBrowser.Controller/Updates/InstallationManager.cs
+++ b/MediaBrowser.Controller/Updates/InstallationManager.cs
@@ -104,20 +104,35 @@ namespace MediaBrowser.Controller.Updates
private readonly ILogger _logger;
/// <summary>
+ /// The _network manager
+ /// </summary>
+ private readonly INetworkManager _networkManager;
+
+ /// <summary>
/// Initializes a new instance of the <see cref="InstallationManager" /> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="zipClient">The zip client.</param>
+ /// <param name="networkManager">The network manager.</param>
/// <param name="logger">The logger.</param>
/// <exception cref="System.ArgumentNullException">zipClient</exception>
- public InstallationManager(Kernel kernel, IZipClient zipClient, ILogger logger)
+ public InstallationManager(Kernel kernel, IZipClient zipClient, INetworkManager networkManager, ILogger logger)
: base(kernel)
{
if (zipClient == null)
{
throw new ArgumentNullException("zipClient");
}
+ if (networkManager == null)
+ {
+ throw new ArgumentNullException("networkManager");
+ }
+ if (logger == null)
+ {
+ throw new ArgumentNullException("logger");
+ }
+ _networkManager = networkManager;
_logger = logger;
ZipClient = zipClient;
}
@@ -133,7 +148,7 @@ namespace MediaBrowser.Controller.Updates
PackageType? packageType = null,
Version applicationVersion = null)
{
- var data = new Dictionary<string, string> { { "key", Kernel.PluginSecurityManager.SupporterKey }, { "mac", NetUtils.GetMacAddress() } };
+ var data = new Dictionary<string, string> { { "key", Kernel.PluginSecurityManager.SupporterKey }, { "mac", _networkManager.GetMacAddress() } };
using (var json = await Kernel.HttpManager.Post(Controller.Kernel.MBAdminUrl + "service/package/retrieveall", data, Kernel.ResourcePools.Mb, cancellationToken).ConfigureAwait(false))
{
diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj
index c4010e1d9..372aefdc6 100644
--- a/MediaBrowser.Model/MediaBrowser.Model.csproj
+++ b/MediaBrowser.Model/MediaBrowser.Model.csproj
@@ -73,6 +73,8 @@
<Compile Include="Logging\LogSeverity.cs" />
<Compile Include="MediaInfo\IBlurayExaminer.cs" />
<Compile Include="Net\HttpException.cs" />
+ <Compile Include="Net\NetworkShare.cs" />
+ <Compile Include="Net\NetworkShareType.cs" />
<Compile Include="Updates\CheckForUpdateResult.cs" />
<Compile Include="Updates\InstallationInfo.cs" />
<Compile Include="Updates\PackageType.cs" />
diff --git a/MediaBrowser.Model/Net/NetworkShare.cs b/MediaBrowser.Model/Net/NetworkShare.cs
new file mode 100644
index 000000000..5ce84eeed
--- /dev/null
+++ b/MediaBrowser.Model/Net/NetworkShare.cs
@@ -0,0 +1,31 @@
+
+namespace MediaBrowser.Model.Net
+{
+ public class NetworkShare
+ {
+ /// <summary>
+ /// The name of the computer that this share belongs to
+ /// </summary>
+ public string Server { get; set; }
+
+ /// <summary>
+ /// Share name
+ /// </summary>
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Local path
+ /// </summary>
+ public string Path { get; set; }
+
+ /// <summary>
+ /// Share type
+ /// </summary>
+ public NetworkShareType ShareType { get; set; }
+
+ /// <summary>
+ /// Comment
+ /// </summary>
+ public string Remark { get; set; }
+ }
+}
diff --git a/MediaBrowser.Model/Net/NetworkShareType.cs b/MediaBrowser.Model/Net/NetworkShareType.cs
new file mode 100644
index 000000000..41dc9003e
--- /dev/null
+++ b/MediaBrowser.Model/Net/NetworkShareType.cs
@@ -0,0 +1,30 @@
+
+namespace MediaBrowser.Model.Net
+{
+ /// <summary>
+ /// Enum NetworkShareType
+ /// </summary>
+ public enum NetworkShareType
+ {
+ /// <summary>
+ /// Disk share
+ /// </summary>
+ Disk,
+ /// <summary>
+ /// Printer share
+ /// </summary>
+ Printer,
+ /// <summary>
+ /// Device share
+ /// </summary>
+ Device,
+ /// <summary>
+ /// IPC share
+ /// </summary>
+ Ipc,
+ /// <summary>
+ /// Special share
+ /// </summary>
+ Special
+ }
+}
diff --git a/MediaBrowser.Networking/Management/NativeMethods.cs b/MediaBrowser.Networking/Management/NativeMethods.cs
new file mode 100644
index 000000000..9a888fab2
--- /dev/null
+++ b/MediaBrowser.Networking/Management/NativeMethods.cs
@@ -0,0 +1,72 @@
+using System;
+using System.Runtime.InteropServices;
+using System.Security;
+
+namespace MediaBrowser.Networking.Management
+{
+ /// <summary>
+ /// Class NativeMethods
+ /// </summary>
+ [SuppressUnmanagedCodeSecurity]
+ public static class NativeMethods
+ {
+ //declare the Netapi32 : NetServerEnum method import
+ /// <summary>
+ /// Nets the server enum.
+ /// </summary>
+ /// <param name="ServerName">Name of the server.</param>
+ /// <param name="dwLevel">The dw level.</param>
+ /// <param name="pBuf">The p buf.</param>
+ /// <param name="dwPrefMaxLen">The dw pref max len.</param>
+ /// <param name="dwEntriesRead">The dw entries read.</param>
+ /// <param name="dwTotalEntries">The dw total entries.</param>
+ /// <param name="dwServerType">Type of the dw server.</param>
+ /// <param name="domain">The domain.</param>
+ /// <param name="dwResumeHandle">The dw resume handle.</param>
+ /// <returns>System.Int32.</returns>
+ [DllImport("Netapi32", CharSet = CharSet.Auto, SetLastError = true),
+ SuppressUnmanagedCodeSecurityAttribute]
+
+ public static extern int NetServerEnum(
+ string ServerName, // must be null
+ int dwLevel,
+ ref IntPtr pBuf,
+ int dwPrefMaxLen,
+ out int dwEntriesRead,
+ out int dwTotalEntries,
+ int dwServerType,
+ string domain, // null for login domain
+ out int dwResumeHandle
+ );
+
+ //declare the Netapi32 : NetApiBufferFree method import
+ /// <summary>
+ /// Nets the API buffer free.
+ /// </summary>
+ /// <param name="pBuf">The p buf.</param>
+ /// <returns>System.Int32.</returns>
+ [DllImport("Netapi32", SetLastError = true),
+ SuppressUnmanagedCodeSecurityAttribute]
+
+ public static extern int NetApiBufferFree(
+ IntPtr pBuf);
+ }
+
+ //create a _SERVER_INFO_100 STRUCTURE
+ /// <summary>
+ /// Struct _SERVER_INFO_100
+ /// </summary>
+ [StructLayout(LayoutKind.Sequential)]
+ public struct _SERVER_INFO_100
+ {
+ /// <summary>
+ /// The sv100_platform_id
+ /// </summary>
+ internal int sv100_platform_id;
+ /// <summary>
+ /// The sv100_name
+ /// </summary>
+ [MarshalAs(UnmanagedType.LPWStr)]
+ internal string sv100_name;
+ }
+}
diff --git a/MediaBrowser.Common/Net/NetUtils.cs b/MediaBrowser.Networking/Management/NetworkManager.cs
index eb50a879d..fcead43d3 100644
--- a/MediaBrowser.Common/Net/NetUtils.cs
+++ b/MediaBrowser.Networking/Management/NetworkManager.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Common.Win32;
+using MediaBrowser.Common.Net;
+using MediaBrowser.Model.Net;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -8,29 +9,36 @@ using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
-namespace MediaBrowser.Common.Net
+namespace MediaBrowser.Networking.Management
{
/// <summary>
/// Class NetUtils
/// </summary>
- public static class NetUtils
+ public class NetworkManager : INetworkManager
{
/// <summary>
/// Gets the machine's local ip address
/// </summary>
/// <returns>IPAddress.</returns>
- public static IPAddress GetLocalIpAddress()
+ public string GetLocalIpAddress()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
- return host.AddressList.FirstOrDefault(i => i.AddressFamily == AddressFamily.InterNetwork);
+ var ip = host.AddressList.FirstOrDefault(i => i.AddressFamily == AddressFamily.InterNetwork);
+
+ if (ip == null)
+ {
+ return null;
+ }
+
+ return ip.ToString();
}
/// <summary>
/// Gets a random port number that is currently available
/// </summary>
/// <returns>System.Int32.</returns>
- public static int GetRandomUnusedPort()
+ public int GetRandomUnusedPort()
{
var listener = new TcpListener(IPAddress.Any, 0);
listener.Start();
@@ -42,13 +50,12 @@ namespace MediaBrowser.Common.Net
/// <summary>
/// Creates the netsh URL registration.
/// </summary>
- /// <param name="urlPrefix">The URL prefix.</param>
- public static void CreateNetshUrlRegistration(string urlPrefix)
+ public void AuthorizeHttpListening(string url)
{
var startInfo = new ProcessStartInfo
{
FileName = "netsh",
- Arguments = string.Format("http add urlacl url={0} user=\"NT AUTHORITY\\Authenticated Users\"", urlPrefix),
+ Arguments = string.Format("http add urlacl url={0} user=\"NT AUTHORITY\\Authenticated Users\"", url),
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
Verb = "runas",
@@ -66,10 +73,10 @@ namespace MediaBrowser.Common.Net
/// </summary>
/// <param name="port">The port.</param>
/// <param name="protocol">The protocol.</param>
- public static void AddWindowsFirewallRule(int port, NetworkProtocol protocol)
+ public void AddSystemFirewallRule(int port, NetworkProtocol protocol)
{
// First try to remove it so we don't end up creating duplicates
- RemoveWindowsFirewallRule(port, protocol);
+ RemoveSystemFirewallRule(port, protocol);
var args = string.Format("advfirewall firewall add rule name=\"Port {0}\" dir=in action=allow protocol={1} localport={0}", port, protocol);
@@ -81,7 +88,7 @@ namespace MediaBrowser.Common.Net
/// </summary>
/// <param name="port">The port.</param>
/// <param name="protocol">The protocol.</param>
- public static void RemoveWindowsFirewallRule(int port, NetworkProtocol protocol)
+ public void RemoveSystemFirewallRule(int port, NetworkProtocol protocol)
{
var args = string.Format("advfirewall firewall delete rule name=\"Port {0}\" protocol={1} localport={0}", port, protocol);
@@ -92,7 +99,7 @@ namespace MediaBrowser.Common.Net
/// Runs the netsh.
/// </summary>
/// <param name="args">The args.</param>
- private static void RunNetsh(string args)
+ private void RunNetsh(string args)
{
var startInfo = new ProcessStartInfo
{
@@ -115,7 +122,7 @@ namespace MediaBrowser.Common.Net
/// Returns MAC Address from first Network Card in Computer
/// </summary>
/// <returns>[string] MAC Address</returns>
- public static string GetMacAddress()
+ public string GetMacAddress()
{
var mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
var moc = mc.GetInstances();
@@ -148,7 +155,7 @@ namespace MediaBrowser.Common.Net
/// </summary>
/// <returns>Arraylist that represents all the SV_TYPE_WORKSTATION and SV_TYPE_SERVER
/// PC's in the Domain</returns>
- public static IEnumerable<string> GetNetworkComputers()
+ public IEnumerable<string> GetNetworkDevices()
{
//local fields
const int MAX_PREFERRED_LENGTH = -1;
@@ -200,20 +207,59 @@ namespace MediaBrowser.Common.Net
NativeMethods.NetApiBufferFree(buffer);
}
}
- }
- /// <summary>
- /// Enum NetworkProtocol
- /// </summary>
- public enum NetworkProtocol
- {
+
+ /// <summary>
+ /// Gets the network shares.
+ /// </summary>
+ /// <param name="path">The path.</param>
+ /// <returns>IEnumerable{NetworkShare}.</returns>
+ public IEnumerable<NetworkShare> GetNetworkShares(string path)
+ {
+ return new ShareCollection(path).OfType<Share>().Select(ToNetworkShare);
+ }
+
/// <summary>
- /// The TCP
+ /// To the network share.
/// </summary>
- Tcp,
+ /// <param name="share">The share.</param>
+ /// <returns>NetworkShare.</returns>
+ private NetworkShare ToNetworkShare(Share share)
+ {
+ return new NetworkShare
+ {
+ Name = share.NetName,
+ Path = share.Path,
+ Remark = share.Remark,
+ Server = share.Server,
+ ShareType = ToNetworkShareType(share.ShareType)
+ };
+ }
+
/// <summary>
- /// The UDP
+ /// To the type of the network share.
/// </summary>
- Udp
+ /// <param name="shareType">Type of the share.</param>
+ /// <returns>NetworkShareType.</returns>
+ /// <exception cref="System.ArgumentException">Unknown share type</exception>
+ private NetworkShareType ToNetworkShareType(ShareType shareType)
+ {
+ switch (shareType)
+ {
+ case ShareType.Device:
+ return NetworkShareType.Device;
+ case ShareType.Disk :
+ return NetworkShareType.Disk;
+ case ShareType.IPC :
+ return NetworkShareType.Ipc;
+ case ShareType.Printer :
+ return NetworkShareType.Printer;
+ case ShareType.Special:
+ return NetworkShareType.Special;
+ default:
+ throw new ArgumentException("Unknown share type");
+ }
+ }
}
+
}
diff --git a/MediaBrowser.Controller/IO/NetworkShares.cs b/MediaBrowser.Networking/Management/NetworkShares.cs
index 93edc6447..0239ddead 100644
--- a/MediaBrowser.Controller/IO/NetworkShares.cs
+++ b/MediaBrowser.Networking/Management/NetworkShares.cs
@@ -3,7 +3,7 @@ using System.IO;
using System.Collections;
using System.Runtime.InteropServices;
-namespace MediaBrowser.Controller.IO
+namespace MediaBrowser.Networking.Management
{
/// <summary>
/// Type of share
@@ -123,10 +123,7 @@ namespace MediaBrowser.Controller.IO
if (0 == (_shareType & ShareType.Special)) return true;
// Special disk share (e.g. C$)
- if (ShareType.Special == _shareType && null != _netName && 0 != _netName.Length)
- return true;
- else
- return false;
+ return ShareType.Special == _shareType && !string.IsNullOrEmpty(_netName);
}
}
@@ -139,16 +136,14 @@ namespace MediaBrowser.Controller.IO
{
if (IsFileSystem)
{
- if (null == _server || 0 == _server.Length)
- if (null == _path || 0 == _path.Length)
+ if (string.IsNullOrEmpty(_server))
+ if (string.IsNullOrEmpty(_path))
return new DirectoryInfo(ToString());
else
return new DirectoryInfo(_path);
- else
- return new DirectoryInfo(ToString());
+ return new DirectoryInfo(ToString());
}
- else
- return null;
+ return null;
}
}
@@ -160,12 +155,11 @@ namespace MediaBrowser.Controller.IO
/// <returns></returns>
public override string ToString()
{
- if (null == _server || 0 == _server.Length)
+ if (string.IsNullOrEmpty(_server))
{
return string.Format(@"\\{0}\{1}", Environment.MachineName, _netName);
}
- else
- return string.Format(@"\\{0}\{1}", _server, _netName);
+ return string.Format(@"\\{0}\{1}", _server, _netName);
}
/// <summary>
@@ -176,7 +170,7 @@ namespace MediaBrowser.Controller.IO
public bool MatchesPath(string path)
{
if (!IsFileSystem) return false;
- if (null == path || 0 == path.Length) return true;
+ if (string.IsNullOrEmpty(path)) return true;
return path.ToLower().StartsWith(_path.ToLower());
}
diff --git a/MediaBrowser.Networking/MediaBrowser.Networking.csproj b/MediaBrowser.Networking/MediaBrowser.Networking.csproj
index 40ec81db3..194f9e400 100644
--- a/MediaBrowser.Networking/MediaBrowser.Networking.csproj
+++ b/MediaBrowser.Networking/MediaBrowser.Networking.csproj
@@ -32,6 +32,7 @@
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
+ <Reference Include="System.Management" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
@@ -42,8 +43,21 @@
<Compile Include="..\SharedVersion.cs">
<Link>Properties\SharedVersion.cs</Link>
</Compile>
+ <Compile Include="Management\NativeMethods.cs" />
+ <Compile Include="Management\NetworkManager.cs" />
+ <Compile Include="Management\NetworkShares.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj">
+ <Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project>
+ <Name>MediaBrowser.Common</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj">
+ <Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
+ <Name>MediaBrowser.Model</Name>
+ </ProjectReference>
+ </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)\Nuget\dlls\" /y /d /r /i</PostBuildEvent>
diff --git a/MediaBrowser.Server.Sqlite/MediaBrowser.Server.Sqlite.csproj b/MediaBrowser.Server.Sqlite/MediaBrowser.Server.Sqlite.csproj
index 22e552f8a..78ea39dd8 100644
--- a/MediaBrowser.Server.Sqlite/MediaBrowser.Server.Sqlite.csproj
+++ b/MediaBrowser.Server.Sqlite/MediaBrowser.Server.Sqlite.csproj
@@ -43,11 +43,8 @@
<Reference Include="System.Data.SQLite.Linq">
<HintPath>..\packages\System.Data.SQLite.1.0.84.0\lib\net45\System.Data.SQLite.Linq.dll</HintPath>
</Reference>
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
- <Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\SharedVersion.cs">
diff --git a/MediaBrowser.Server.WorldWeatherOnline/MediaBrowser.Server.WorldWeatherOnline.csproj b/MediaBrowser.Server.WorldWeatherOnline/MediaBrowser.Server.WorldWeatherOnline.csproj
index 0d47febed..1e97a482e 100644
--- a/MediaBrowser.Server.WorldWeatherOnline/MediaBrowser.Server.WorldWeatherOnline.csproj
+++ b/MediaBrowser.Server.WorldWeatherOnline/MediaBrowser.Server.WorldWeatherOnline.csproj
@@ -35,11 +35,7 @@
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\SharedVersion.cs">
diff --git a/MediaBrowser.ServerApplication/App.xaml.cs b/MediaBrowser.ServerApplication/App.xaml.cs
index 492fef242..4aa3cdbb4 100644
--- a/MediaBrowser.ServerApplication/App.xaml.cs
+++ b/MediaBrowser.ServerApplication/App.xaml.cs
@@ -1,6 +1,8 @@
-using MediaBrowser.ClickOnce;
+using BDInfo;
+using MediaBrowser.ClickOnce;
using MediaBrowser.Common.IO;
using MediaBrowser.Common.Kernel;
+using MediaBrowser.Common.Net;
using MediaBrowser.Controller;
using MediaBrowser.IsoMounter;
using MediaBrowser.Logging.Nlog;
@@ -8,6 +10,7 @@ using MediaBrowser.Model.IO;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.MediaInfo;
using MediaBrowser.Model.Updates;
+using MediaBrowser.Networking.Management;
using MediaBrowser.Server.Uninstall;
using MediaBrowser.ServerApplication.Implementations;
using Microsoft.Win32;
@@ -513,9 +516,10 @@ namespace MediaBrowser.ServerApplication
IsoManager = new PismoIsoManager(Logger);
- Register<IIsoManager>(IsoManager);
+ Register(IsoManager);
Register<IBlurayExaminer>(new BdInfoExaminer());
Register<IZipClient>(new DotNetZipClient());
+ Register(typeof (INetworkManager), typeof (NetworkManager));
}
/// <summary>
@@ -573,5 +577,15 @@ namespace MediaBrowser.ServerApplication
}
return (T)result.GetInstance();
}
+
+ /// <summary>
+ /// Registers the specified service type.
+ /// </summary>
+ /// <param name="serviceType">Type of the service.</param>
+ /// <param name="implementation">Type of the concrete.</param>
+ public void Register(Type serviceType, Type implementation)
+ {
+ _container.Register(serviceType, implementation);
+ }
}
}
diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj
index 9f9b87b05..9b27351a1 100644
--- a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj
+++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj
@@ -196,7 +196,6 @@
<Compile Include="Controls\MultiItemUpdateNotification.xaml.cs">
<DependentUpon>MultiItemUpdateNotification.xaml</DependentUpon>
</Compile>
- <Compile Include="Implementations\BdInfoExaminer.cs" />
<Compile Include="Implementations\DotNetZipClient.cs" />
<Compile Include="LibraryExplorer.xaml.cs">
<DependentUpon>LibraryExplorer.xaml</DependentUpon>
@@ -270,6 +269,10 @@
<Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
<Name>MediaBrowser.Model</Name>
</ProjectReference>
+ <ProjectReference Include="..\MediaBrowser.Networking\MediaBrowser.Networking.csproj">
+ <Project>{7c11010e-179a-49b7-bfb2-f1656f5e71ad}</Project>
+ <Name>MediaBrowser.Networking</Name>
+ </ProjectReference>
<ProjectReference Include="..\MediaBrowser.Server.Uninstall\MediaBrowser.Server.Uninstall.csproj">
<Project>{5443422f-9548-417a-90dd-2fc91f2b5999}</Project>
<Name>MediaBrowser.Server.Uninstall</Name>