Преглед на файлове

isolated DotNetZip dependancy

LukePulverenti преди 12 години
родител
ревизия
acf5b0b6ed

+ 6 - 0
MediaBrowser.Common/Kernel/BaseManager.cs

@@ -26,8 +26,14 @@ namespace MediaBrowser.Common.Kernel
         /// Initializes a new instance of the <see cref="BaseManager" /> class.
         /// </summary>
         /// <param name="kernel">The kernel.</param>
+        /// <exception cref="System.ArgumentNullException">kernel</exception>
         protected BaseManager(TKernelType kernel)
         {
+            if (kernel == null)
+            {
+                throw new ArgumentNullException("kernel");
+            }
+            
             Kernel = kernel;
 
             Logger = LogManager.GetLogger(GetType().Name);

+ 11 - 3
MediaBrowser.Controller/Kernel.cs

@@ -15,6 +15,7 @@ using MediaBrowser.Controller.ScheduledTasks;
 using MediaBrowser.Controller.Updates;
 using MediaBrowser.Controller.Weather;
 using MediaBrowser.Model.Configuration;
+using MediaBrowser.Model.IO;
 using MediaBrowser.Model.System;
 using System;
 using System.Collections.Generic;
@@ -297,13 +298,20 @@ namespace MediaBrowser.Controller
             get { return 7359; }
         }
 
+        /// <summary>
+        /// Gets or sets the zip client.
+        /// </summary>
+        /// <value>The zip client.</value>
+        private IZipClient ZipClient { get; set; }
+
         /// <summary>
         /// Creates a kernel based on a Data path, which is akin to our current programdata path
         /// </summary>
-        public Kernel(IIsoManager isoManager)
+        public Kernel(IIsoManager isoManager, IZipClient zipClient)
             : base(isoManager)
         {
             Instance = this;
+            ZipClient = zipClient;
         }
 
         /// <summary>
@@ -319,10 +327,10 @@ namespace MediaBrowser.Controller
             RootFolder = null;
 
             ReloadResourcePools();
-            InstallationManager = new InstallationManager(this);
+            InstallationManager = new InstallationManager(this, ZipClient);
             LibraryManager = new LibraryManager(this);
             UserManager = new UserManager(this);
-            FFMpegManager = new FFMpegManager(this);
+            FFMpegManager = new FFMpegManager(this, ZipClient);
             ImageManager = new ImageManager(this);
             ProviderManager = new ProviderManager(this);
             UserDataManager = new UserDataManager(this);

+ 0 - 3
MediaBrowser.Controller/MediaBrowser.Controller.csproj

@@ -53,9 +53,6 @@
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Ionic.Zip">
-      <HintPath>..\packages\DotNetZip.1.9.1.8\lib\net20\Ionic.Zip.dll</HintPath>
-    </Reference>
     <Reference Include="Mediabrowser.PluginSecurity">
       <HintPath>Plugins\Mediabrowser.PluginSecurity.dll</HintPath>
     </Reference>

+ 22 - 10
MediaBrowser.Controller/MediaInfo/FFMpegManager.cs

@@ -1,5 +1,4 @@
-using Ionic.Zip;
-using MediaBrowser.Common.Extensions;
+using MediaBrowser.Common.Extensions;
 using MediaBrowser.Common.IO;
 using MediaBrowser.Common.Kernel;
 using MediaBrowser.Common.Serialization;
@@ -7,6 +6,7 @@ using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.IO;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -58,14 +58,29 @@ namespace MediaBrowser.Controller.MediaInfo
         /// </summary>
         /// <value>The subtitle cache.</value>
         internal FileSystemRepository SubtitleCache { get; set; }
-        
+
+        /// <summary>
+        /// Gets or sets the zip client.
+        /// </summary>
+        /// <value>The zip client.</value>
+        private IZipClient ZipClient { get; set; }
+
         /// <summary>
         /// Initializes a new instance of the <see cref="FFMpegManager" /> class.
         /// </summary>
         /// <param name="kernel">The kernel.</param>
-        public FFMpegManager(Kernel kernel)
+        /// <param name="zipClient">The zip client.</param>
+        /// <exception cref="System.ArgumentNullException">zipClient</exception>
+        public FFMpegManager(Kernel kernel, IZipClient zipClient)
             : base(kernel)
         {
+            if (zipClient == null)
+            {
+                throw new ArgumentNullException("zipClient");
+            }
+
+            ZipClient = zipClient;
+
             // Not crazy about this but it's the only way to suppress ffmpeg crash dialog boxes
             SetErrorMode(ErrorModes.SEM_FAILCRITICALERRORS | ErrorModes.SEM_NOALIGNMENTFAULTEXCEPT | ErrorModes.SEM_NOGPFAULTERRORBOX | ErrorModes.SEM_NOOPENFILEERRORBOX);
 
@@ -352,10 +367,7 @@ namespace MediaBrowser.Controller.MediaInfo
         {
             using (var resourceStream = assembly.GetManifestResourceStream(zipFileResourcePath))
             {
-                using (var zipFile = ZipFile.Read(resourceStream))
-                {
-                    zipFile.ExtractAll(targetPath, ExtractExistingFileAction.DoNotOverwrite);
-                }
+                ZipClient.ExtractAll(resourceStream, targetPath, false);
             }
         }
 
@@ -383,7 +395,7 @@ namespace MediaBrowser.Controller.MediaInfo
             {
                 return "-probesize 1G -analyzeduration 200M";
             }
-            
+
             return string.Empty;
         }
 
@@ -818,7 +830,7 @@ namespace MediaBrowser.Controller.MediaInfo
             {
                 throw new ArgumentException("The given MediaStream is not an external subtitle stream");
             }
-            
+
             var process = new Process
             {
                 StartInfo = new ProcessStartInfo

+ 16 - 7
MediaBrowser.Controller/Updates/InstallationManager.cs

@@ -1,11 +1,11 @@
 using System.Security.Cryptography;
-using Ionic.Zip;
 using MediaBrowser.Common.Events;
 using MediaBrowser.Common.Kernel;
 using MediaBrowser.Common.Net;
 using MediaBrowser.Common.Plugins;
 using MediaBrowser.Common.Progress;
 using MediaBrowser.Common.Serialization;
+using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Updates;
 using System;
 using System.Collections.Concurrent;
@@ -91,14 +91,27 @@ namespace MediaBrowser.Controller.Updates
         }
         #endregion
 
+        /// <summary>
+        /// Gets or sets the zip client.
+        /// </summary>
+        /// <value>The zip client.</value>
+        private IZipClient ZipClient { get; set; }
+
         /// <summary>
         /// Initializes a new instance of the <see cref="InstallationManager" /> class.
         /// </summary>
         /// <param name="kernel">The kernel.</param>
-        public InstallationManager(Kernel kernel)
+        /// <param name="zipClient">The zip client.</param>
+        /// <exception cref="System.ArgumentNullException">zipClient</exception>
+        public InstallationManager(Kernel kernel, IZipClient zipClient)
             : base(kernel)
         {
+            if (zipClient == null)
+            {
+                throw new ArgumentNullException("zipClient");
+            }
 
+            ZipClient = zipClient;
         }
 
         /// <summary>
@@ -391,11 +404,7 @@ namespace MediaBrowser.Controller.Updates
             {
                 try
                 {
-                    // Extract to target in full - overwriting
-                    using (var zipFile = ZipFile.Read(tempFile))
-                    {
-                        zipFile.ExtractAll(target, ExtractExistingFileAction.OverwriteSilently);
-                    }
+                    ZipClient.ExtractAll(tempFile, target, true);
                 }
                 catch (IOException e)
                 {

+ 0 - 1
MediaBrowser.Controller/packages.config

@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
-  <package id="DotNetZip" version="1.9.1.8" targetFramework="net45" />
   <package id="morelinq" version="1.0.15631-beta" targetFramework="net45" />
   <package id="protobuf-net" version="2.0.0.621" targetFramework="net45" />
 </packages>

+ 26 - 0
MediaBrowser.Model/IO/IZipClient.cs

@@ -0,0 +1,26 @@
+using System.IO;
+
+namespace MediaBrowser.Model.IO
+{
+    /// <summary>
+    /// Interface IZipClient
+    /// </summary>
+    public interface IZipClient
+    {
+        /// <summary>
+        /// Extracts all.
+        /// </summary>
+        /// <param name="sourceFile">The source file.</param>
+        /// <param name="targetPath">The target path.</param>
+        /// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
+        void ExtractAll(string sourceFile, string targetPath, bool overwriteExistingFiles);
+
+        /// <summary>
+        /// Extracts all.
+        /// </summary>
+        /// <param name="source">The source.</param>
+        /// <param name="targetPath">The target path.</param>
+        /// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
+        void ExtractAll(Stream source, string targetPath, bool overwriteExistingFiles);
+    }
+}

+ 1 - 0
MediaBrowser.Model/MediaBrowser.Model.csproj

@@ -64,6 +64,7 @@
     <Compile Include="Entities\IHasMediaStreams.cs" />
     <Compile Include="Entities\VideoFormat.cs" />
     <Compile Include="Extensions\ModelExtensions.cs" />
+    <Compile Include="IO\IZipClient.cs" />
     <Compile Include="Logging\ILogger.cs" />
     <Compile Include="Logging\LogSeverity.cs" />
     <Compile Include="Net\HttpException.cs" />

+ 3 - 4
MediaBrowser.ServerApplication/App.xaml.cs

@@ -1,13 +1,12 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Common.Kernel;
+using MediaBrowser.Common.Kernel;
 using MediaBrowser.Common.UI;
 using MediaBrowser.Controller;
 using MediaBrowser.IsoMounter;
 using MediaBrowser.Server.Uninstall;
+using MediaBrowser.ServerApplication.Implementations;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.IO;
 using System.Linq;
 using System.Windows;
 
@@ -170,7 +169,7 @@ namespace MediaBrowser.ServerApplication
         /// <returns>IKernel.</returns>
         protected override IKernel InstantiateKernel()
         {
-            return new Kernel(new PismoIsoManager());
+            return new Kernel(new PismoIsoManager(), new DotNetZipClient());
         }
 
         /// <summary>

+ 43 - 0
MediaBrowser.ServerApplication/Implementations/DotNetZipClient.cs

@@ -0,0 +1,43 @@
+using Ionic.Zip;
+using MediaBrowser.Model.IO;
+using System.IO;
+
+namespace MediaBrowser.ServerApplication.Implementations
+{
+    /// <summary>
+    /// Class DotNetZipClient
+    /// </summary>
+    public class DotNetZipClient : IZipClient
+    {
+        /// <summary>
+        /// Extracts all.
+        /// </summary>
+        /// <param name="sourceFile">The source file.</param>
+        /// <param name="targetPath">The target path.</param>
+        /// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
+        public void ExtractAll(string sourceFile, string targetPath, bool overwriteExistingFiles)
+        {
+            using (var fileStream = File.OpenRead(sourceFile))
+            {
+                using (var zipFile = ZipFile.Read(fileStream))
+                {
+                    zipFile.ExtractAll(targetPath, overwriteExistingFiles ? ExtractExistingFileAction.OverwriteSilently : ExtractExistingFileAction.DoNotOverwrite);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Extracts all.
+        /// </summary>
+        /// <param name="source">The source.</param>
+        /// <param name="targetPath">The target path.</param>
+        /// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
+        public void ExtractAll(Stream source, string targetPath, bool overwriteExistingFiles)
+        {
+            using (var zipFile = ZipFile.Read(source))
+            {
+                zipFile.ExtractAll(targetPath, overwriteExistingFiles ? ExtractExistingFileAction.OverwriteSilently : ExtractExistingFileAction.DoNotOverwrite);
+            }
+        }
+    }
+}

+ 5 - 0
MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj

@@ -115,6 +115,10 @@
     <Reference Include="Hardcodet.Wpf.TaskbarNotification">
       <HintPath>..\packages\Hardcodet.Wpf.TaskbarNotification.1.0.4.0\lib\net40\Hardcodet.Wpf.TaskbarNotification.dll</HintPath>
     </Reference>
+    <Reference Include="Ionic.Zip, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\packages\DotNetZip.1.9.1.8\lib\net20\Ionic.Zip.dll</HintPath>
+    </Reference>
     <Reference Include="Platinum.Managed, Version=1.0.4794.22684, Culture=neutral, processorArchitecture=x86">
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\ThirdParty\UPnP\Libs\Platinum.Managed.dll</HintPath>
@@ -175,6 +179,7 @@
     <Compile Include="Controls\MultiItemUpdateNotification.xaml.cs">
       <DependentUpon>MultiItemUpdateNotification.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Implementations\DotNetZipClient.cs" />
     <Compile Include="LibraryExplorer.xaml.cs">
       <DependentUpon>LibraryExplorer.xaml</DependentUpon>
     </Compile>

+ 1 - 0
MediaBrowser.ServerApplication/packages.config

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
+  <package id="DotNetZip" version="1.9.1.8" targetFramework="net45" />
   <package id="Hardcodet.Wpf.TaskbarNotification" version="1.0.4.0" targetFramework="net45" />
   <package id="System.Data.SQLite" version="1.0.84.0" targetFramework="net45" />
 </packages>