diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-08-09 21:40:52 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-08-09 21:40:52 -0400 |
| commit | 058f9c11ff4e56c8359c4fae697616ddc54ec4c9 (patch) | |
| tree | afe9cbda78cc68e9c77bab45cd2215fc29ada3a9 | |
| parent | e0c387446b2562ac6b153d36d357a71e70fa736b (diff) | |
update to re-worked iso manager
5 files changed, 91 insertions, 6 deletions
diff --git a/MediaBrowser.Common.Implementations/IO/IsoManager.cs b/MediaBrowser.Common.Implementations/IO/IsoManager.cs new file mode 100644 index 000000000..de88ddada --- /dev/null +++ b/MediaBrowser.Common.Implementations/IO/IsoManager.cs @@ -0,0 +1,75 @@ +using MediaBrowser.Model.IO; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Common.Implementations.IO +{ + /// <summary> + /// Class IsoManager + /// </summary> + public class IsoManager : IIsoManager + { + /// <summary> + /// The _mounters + /// </summary> + private readonly List<IIsoMounter> _mounters = new List<IIsoMounter>(); + + /// <summary> + /// Mounts the specified iso path. + /// </summary> + /// <param name="isoPath">The iso path.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>IsoMount.</returns> + /// <exception cref="System.ArgumentNullException">isoPath</exception> + /// <exception cref="System.ArgumentException"></exception> + public Task<IIsoMount> Mount(string isoPath, CancellationToken cancellationToken) + { + if (string.IsNullOrEmpty(isoPath)) + { + throw new ArgumentNullException("isoPath"); + } + + var mounter = _mounters.FirstOrDefault(i => i.CanMount(isoPath)); + + if (mounter == null) + { + throw new ArgumentException(string.Format("No mounters are able to mount {0}", isoPath)); + } + + return mounter.Mount(isoPath, cancellationToken); + } + + /// <summary> + /// Determines whether this instance can mount the specified path. + /// </summary> + /// <param name="path">The path.</param> + /// <returns><c>true</c> if this instance can mount the specified path; otherwise, <c>false</c>.</returns> + public bool CanMount(string path) + { + return _mounters.Any(i => i.CanMount(path)); + } + + /// <summary> + /// Adds the parts. + /// </summary> + /// <param name="mounters">The mounters.</param> + public void AddParts(IEnumerable<IIsoMounter> mounters) + { + _mounters.AddRange(mounters); + } + + /// <summary> + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// </summary> + public void Dispose() + { + foreach (var mounter in _mounters) + { + mounter.Dispose(); + } + } + } +} diff --git a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj index 07e7869c7..1e45c1869 100644 --- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj +++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj @@ -66,6 +66,7 @@ <Compile Include="Configuration\BaseConfigurationManager.cs" /> <Compile Include="HttpClientManager\HttpClientInfo.cs" /> <Compile Include="HttpClientManager\HttpClientManager.cs" /> + <Compile Include="IO\IsoManager.cs" /> <Compile Include="Logging\LogHelper.cs" /> <Compile Include="Logging\NLogger.cs" /> <Compile Include="Logging\NlogManager.cs" /> diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 1ef3adb13..3d640190c 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -4,6 +4,7 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Constants; using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Implementations; +using MediaBrowser.Common.Implementations.IO; using MediaBrowser.Common.Implementations.ScheduledTasks; using MediaBrowser.Common.Implementations.Updates; using MediaBrowser.Common.IO; @@ -161,6 +162,8 @@ namespace MediaBrowser.ServerApplication /// <value>The media encoder.</value> private IMediaEncoder MediaEncoder { get; set; } + private IIsoManager IsoManager { get; set; } + private ILocalizationManager LocalizationManager { get; set; } /// <summary> @@ -238,7 +241,9 @@ namespace MediaBrowser.ServerApplication RegisterSingleInstance<IWebSocketServer>(() => new AlchemyServer(Logger)); - //RegisterSingleInstance<IIsoManager>(() => new PismoIsoManager(Logger)); + IsoManager = new IsoManager(); + RegisterSingleInstance(IsoManager); + RegisterSingleInstance<IBlurayExaminer>(() => new BdInfoExaminer()); ZipClient = new DotNetZipClient(); @@ -442,6 +447,8 @@ namespace MediaBrowser.ServerApplication GetExports<IMetadataSaver>()); ProviderManager.AddParts(GetExports<BaseMetadataProvider>().ToArray()); + + IsoManager.AddParts(GetExports<IIsoMounter>().ToArray()); } /// <summary> diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj index e3b5677f9..04d20cb3d 100644 --- a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj +++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj @@ -126,8 +126,9 @@ <Reference Include="MahApps.Metro"> <HintPath>..\packages\MahApps.Metro.0.11.0.17-ALPHA\lib\net45\MahApps.Metro.dll</HintPath> </Reference> - <Reference Include="MediaBrowser.IsoMounter"> - <HintPath>..\packages\MediaBrowser.IsoMounting.3.0.55\lib\net45\MediaBrowser.IsoMounter.dll</HintPath> + <Reference Include="MediaBrowser.IsoMounter, Version=1.0.4969.36586, Culture=neutral, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\MediaBrowser.IsoMounting.3.0.56\lib\net45\MediaBrowser.IsoMounter.dll</HintPath> </Reference> <Reference Include="MoreLinq, Version=1.0.16006.0, Culture=neutral, PublicKeyToken=384d532d7e88985d, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> @@ -137,8 +138,9 @@ <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\NLog.2.0.1.2\lib\net45\NLog.dll</HintPath> </Reference> - <Reference Include="pfmclrapi"> - <HintPath>..\packages\MediaBrowser.IsoMounting.3.0.55\lib\net45\pfmclrapi.dll</HintPath> + <Reference Include="pfmclrapi, Version=0.0.0.0, Culture=neutral, processorArchitecture=x86"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\MediaBrowser.IsoMounting.3.0.56\lib\net45\pfmclrapi.dll</HintPath> </Reference> <Reference Include="ServiceStack, Version=3.9.56.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> diff --git a/MediaBrowser.ServerApplication/packages.config b/MediaBrowser.ServerApplication/packages.config index 82f63c52c..80c84d311 100644 --- a/MediaBrowser.ServerApplication/packages.config +++ b/MediaBrowser.ServerApplication/packages.config @@ -3,7 +3,7 @@ <package id="DotNetZip" version="1.9.1.8" targetFramework="net45" /> <package id="Hardcodet.Wpf.TaskbarNotification" version="1.0.4.0" targetFramework="net45" /> <package id="MahApps.Metro" version="0.11.0.17-ALPHA" targetFramework="net45" /> - <package id="MediaBrowser.IsoMounting" version="3.0.55" targetFramework="net45" /> + <package id="MediaBrowser.IsoMounting" version="3.0.56" targetFramework="net45" /> <package id="morelinq" version="1.0.16006" targetFramework="net45" /> <package id="NLog" version="2.0.1.2" targetFramework="net45" /> <package id="ServiceStack" version="3.9.56" targetFramework="net45" /> |
