You've already forked Sonarr
							
							
				mirror of
				https://github.com/Sonarr/Sonarr.git
				synced 2025-10-31 00:07:55 +02:00 
			
		
		
		
	Update fixes.
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -41,4 +41,5 @@ NzbDrone.Web/NzbDrone.Web.Publish.xml | ||||
| _rawPackage/ | ||||
| NzbDrone.zip | ||||
| NzbDrone.sln.DotSettings.user* | ||||
| config.xml | ||||
| config.xml | ||||
| UpdateLogs/ | ||||
| @@ -40,6 +40,7 @@ | ||||
|     <Reference Include="Moq"> | ||||
|       <HintPath>..\packages\Moq.4.0.10827\lib\NET40\Moq.dll</HintPath> | ||||
|     </Reference> | ||||
|     <Reference Include="Ninject, Version=2.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL" /> | ||||
|     <Reference Include="NLog"> | ||||
|       <HintPath>..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll</HintPath> | ||||
|     </Reference> | ||||
|   | ||||
| @@ -1,20 +1,21 @@ | ||||
| using System; | ||||
| using System.Linq; | ||||
| using System; | ||||
| using System.Diagnostics; | ||||
| using System.IO; | ||||
| using FluentAssertions; | ||||
| using Moq; | ||||
| using NUnit.Framework; | ||||
| using Ninject.Activation.Strategies; | ||||
| using NzbDrone.Common; | ||||
| using NzbDrone.Core.Model; | ||||
| using NzbDrone.Core.Providers; | ||||
| using NzbDrone.Core.Providers.Core; | ||||
| using NzbDrone.Core.Providers.Jobs; | ||||
| using NzbDrone.Core.Test.Framework; | ||||
| 
 | ||||
| namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests | ||||
| namespace NzbDrone.Core.Test.JobTests | ||||
| { | ||||
|     [TestFixture] | ||||
|     internal class StartUpdateFixture : CoreTest | ||||
|     internal class AppUpdateJobFixture : CoreTest | ||||
|     { | ||||
|         private const string SANDBOX_FOLDER = @"C:\Temp\nzbdrone_update\"; | ||||
| 
 | ||||
| @@ -32,6 +33,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests | ||||
|         { | ||||
|             Mocker.GetMock<EnviromentProvider>().SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\"); | ||||
|             Mocker.GetMock<ConfigFileProvider>().SetupGet(c => c.Guid).Returns(_clientGuid); | ||||
|             Mocker.GetMock<UpdateProvider>().Setup(c => c.GetAvilableUpdate()).Returns(updatePackage); | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
| @@ -41,7 +43,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests | ||||
|             Mocker.GetMock<DiskProvider>().Setup(c => c.FolderExists(SANDBOX_FOLDER)).Returns(true); | ||||
| 
 | ||||
|             //Act | ||||
|             Mocker.Resolve<UpdateProvider>().StartUpdate(updatePackage); | ||||
|             StartUpdate(); | ||||
| 
 | ||||
|             //Assert | ||||
|             Mocker.GetMock<DiskProvider>().Verify(c => c.DeleteFolder(SANDBOX_FOLDER, true)); | ||||
| @@ -53,7 +55,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests | ||||
|             Mocker.GetMock<DiskProvider>().Setup(c => c.FolderExists(SANDBOX_FOLDER)).Returns(false); | ||||
| 
 | ||||
|             //Act | ||||
|             Mocker.Resolve<UpdateProvider>().StartUpdate(updatePackage); | ||||
|             StartUpdate(); | ||||
| 
 | ||||
|             //Assert | ||||
|             Mocker.GetMock<DiskProvider>().Verify(c => c.DeleteFolder(SANDBOX_FOLDER, true), Times.Never()); | ||||
| @@ -65,7 +67,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests | ||||
|             var updateArchive = Path.Combine(SANDBOX_FOLDER, updatePackage.FileName); | ||||
| 
 | ||||
|             //Act | ||||
|             Mocker.Resolve<UpdateProvider>().StartUpdate(updatePackage); | ||||
|             StartUpdate(); | ||||
| 
 | ||||
|             //Assert | ||||
|             Mocker.GetMock<HttpProvider>().Verify( | ||||
| @@ -78,7 +80,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests | ||||
|             var updateArchive = Path.Combine(SANDBOX_FOLDER, updatePackage.FileName); | ||||
| 
 | ||||
|             //Act | ||||
|             Mocker.Resolve<UpdateProvider>().StartUpdate(updatePackage); | ||||
|             StartUpdate(); | ||||
| 
 | ||||
|             //Assert | ||||
|             Mocker.GetMock<ArchiveProvider>().Verify( | ||||
| @@ -91,7 +93,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests | ||||
|             var updateClientFolder = Mocker.GetMock<EnviromentProvider>().Object.GetUpdateClientFolder(); | ||||
| 
 | ||||
|             //Act | ||||
|             Mocker.Resolve<UpdateProvider>().StartUpdate(updatePackage); | ||||
|             StartUpdate(); | ||||
| 
 | ||||
|             //Assert | ||||
|             Mocker.GetMock<DiskProvider>().Verify( | ||||
| @@ -108,7 +110,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests | ||||
|                 .SetupGet(c => c.NzbDroneProcessIdFromEnviroment).Returns(12); | ||||
| 
 | ||||
|             //Act | ||||
|             Mocker.Resolve<UpdateProvider>().StartUpdate(updatePackage); | ||||
|             StartUpdate(); | ||||
| 
 | ||||
|             //Assert | ||||
|             Mocker.GetMock<ProcessProvider>().Verify( | ||||
| @@ -134,7 +136,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests | ||||
|             Mocker.Resolve<HttpProvider>(); | ||||
|             Mocker.Resolve<DiskProvider>(); | ||||
|             Mocker.Resolve<ArchiveProvider>(); | ||||
|             Mocker.Resolve<UpdateProvider>().StartUpdate(updatePackage); | ||||
|             StartUpdate(); | ||||
|             updateSubFolder.Refresh(); | ||||
|             //Assert | ||||
| 
 | ||||
| @@ -143,5 +145,10 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests | ||||
|             updateSubFolder.GetDirectories().Should().HaveCount(1); | ||||
|             updateSubFolder.GetFiles().Should().HaveCount(1); | ||||
|         } | ||||
| 
 | ||||
|         private void StartUpdate() | ||||
|         { | ||||
|             Mocker.Resolve<AppUpdateJob>().Start(MockNotification, 0, 0); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -95,7 +95,7 @@ | ||||
|     <Compile Include="JobTests\SearchJobTest.cs" /> | ||||
|     <Compile Include="ProviderTests\PostDownloadProviderTests\ProcessDownloadFixture.cs" /> | ||||
|     <Compile Include="ProviderTests\JobProviderTests\TestJobs.cs" /> | ||||
|     <Compile Include="ProviderTests\UpdateProviderTests\StartUpdateFixture.cs" /> | ||||
|     <Compile Include="JobTests\AppUpdateJobFixture.cs" /> | ||||
|     <Compile Include="ProviderTests\UpdateProviderTests\GetAvilableUpdateFixture.cs" /> | ||||
|     <Compile Include="SortHelperTest.cs" /> | ||||
|     <Compile Include="ProviderTests\EpisodeProviderTest_DeleteInvalidEpisodes.cs" /> | ||||
|   | ||||
| @@ -1,14 +1,35 @@ | ||||
| using NzbDrone.Core.Model.Notification; | ||||
| using System.Diagnostics; | ||||
| using System.IO; | ||||
| using NLog; | ||||
| using NzbDrone.Common; | ||||
| using NzbDrone.Core.Model.Notification; | ||||
| using NzbDrone.Core.Providers.Core; | ||||
|  | ||||
| namespace NzbDrone.Core.Providers.Jobs | ||||
| { | ||||
|     public class AppUpdateJob : IJob | ||||
|     { | ||||
|         private readonly UpdateProvider _updateProvider; | ||||
|         private readonly EnviromentProvider _enviromentProvider; | ||||
|         private readonly DiskProvider _diskProvider; | ||||
|         private readonly HttpProvider _httpProvider; | ||||
|         private readonly ProcessProvider _processProvider; | ||||
|         private readonly ArchiveProvider _archiveProvider; | ||||
|         private readonly ConfigFileProvider _configFileProvider; | ||||
|  | ||||
|         public AppUpdateJob(UpdateProvider updateProvider) | ||||
|         private static readonly Logger logger = LogManager.GetCurrentClassLogger(); | ||||
|  | ||||
|  | ||||
|         public AppUpdateJob(UpdateProvider updateProvider, EnviromentProvider enviromentProvider, DiskProvider diskProvider, | ||||
|             HttpProvider httpProvider, ProcessProvider processProvider, ArchiveProvider archiveProvider, ConfigFileProvider configFileProvider) | ||||
|         { | ||||
|             _updateProvider = updateProvider; | ||||
|             _enviromentProvider = enviromentProvider; | ||||
|             _diskProvider = diskProvider; | ||||
|             _httpProvider = httpProvider; | ||||
|             _processProvider = processProvider; | ||||
|             _archiveProvider = archiveProvider; | ||||
|             _configFileProvider = configFileProvider; | ||||
|         } | ||||
|  | ||||
|         public string Name | ||||
| @@ -27,7 +48,38 @@ namespace NzbDrone.Core.Providers.Jobs | ||||
|  | ||||
|             var updatePackage = _updateProvider.GetAvilableUpdate(); | ||||
|  | ||||
|             _updateProvider.StartUpdate(updatePackage); | ||||
|             var packageDestination = Path.Combine(_enviromentProvider.GetUpdateSandboxFolder(), updatePackage.FileName); | ||||
|  | ||||
|             if (_diskProvider.FolderExists(_enviromentProvider.GetUpdateSandboxFolder())) | ||||
|             { | ||||
|                 logger.Info("Deleting old update files"); | ||||
|                 _diskProvider.DeleteFolder(_enviromentProvider.GetUpdateSandboxFolder(), true); | ||||
|             } | ||||
|  | ||||
|             logger.Info("Downloading update package from [{0}] to [{1}]", updatePackage.Url, packageDestination); | ||||
|             notification.CurrentMessage = "Downloading Update " + updatePackage.Version; | ||||
|             _httpProvider.DownloadFile(updatePackage.Url, packageDestination); | ||||
|             logger.Info("Download completed for update package from [{0}]", updatePackage.FileName); | ||||
|  | ||||
|             logger.Info("Extracting Update package"); | ||||
|             notification.CurrentMessage = "Extracting Update"; | ||||
|             _archiveProvider.ExtractArchive(packageDestination, _enviromentProvider.GetUpdateSandboxFolder()); | ||||
|             logger.Info("Update package extracted successfully"); | ||||
|  | ||||
|             logger.Info("Preparing client"); | ||||
|             notification.CurrentMessage = "Preparing to start Update"; | ||||
|             _diskProvider.CopyDirectory(_enviromentProvider.GetUpdateClientFolder(), _enviromentProvider.GetUpdateSandboxFolder()); | ||||
|  | ||||
|  | ||||
|             logger.Info("Starting update client"); | ||||
|             var startInfo = new ProcessStartInfo() | ||||
|             { | ||||
|                 FileName = _enviromentProvider.GetUpdateClientExePath(), | ||||
|                 Arguments = string.Format("{0} {1}", _enviromentProvider.NzbDroneProcessIdFromEnviroment, _configFileProvider.Guid) | ||||
|             }; | ||||
|  | ||||
|             var updateProcess = _processProvider.Start(startInfo); | ||||
|             logger.Info("Update in progress. NzbDrone will restart shortly."); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -77,39 +77,5 @@ namespace NzbDrone.Core.Providers | ||||
|             logger.Trace("No updates available"); | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         public virtual void StartUpdate(UpdatePackage updatePackage) | ||||
|         { | ||||
|             var packageDestination = Path.Combine(_enviromentProvider.GetUpdateSandboxFolder(), updatePackage.FileName); | ||||
|  | ||||
|             if (_diskProvider.FolderExists(_enviromentProvider.GetUpdateSandboxFolder())) | ||||
|             { | ||||
|                 logger.Info("Deleting old update files"); | ||||
|                 _diskProvider.DeleteFolder(_enviromentProvider.GetUpdateSandboxFolder(), true); | ||||
|             } | ||||
|  | ||||
|             logger.Info("Downloading update package from [{0}] to [{1}]", updatePackage.Url, packageDestination); | ||||
|             _httpProvider.DownloadFile(updatePackage.Url, packageDestination); | ||||
|             logger.Info("Download completed for update package from [{0}]", updatePackage.FileName); | ||||
|  | ||||
|             logger.Info("Extracting Update package"); | ||||
|             _archiveProvider.ExtractArchive(packageDestination, _enviromentProvider.GetUpdateSandboxFolder()); | ||||
|             logger.Info("Update package extracted successfully"); | ||||
|  | ||||
|             logger.Info("Preparing client"); | ||||
|             _diskProvider.CopyDirectory(_enviromentProvider.GetUpdateClientFolder(), _enviromentProvider.GetUpdateSandboxFolder()); | ||||
|  | ||||
|  | ||||
|             logger.Info("Starting update client"); | ||||
|             var startInfo = new ProcessStartInfo() | ||||
|             { | ||||
|                 FileName = _enviromentProvider.GetUpdateClientExePath(), | ||||
|                 Arguments = string.Format("{0} {1}", _enviromentProvider.NzbDroneProcessIdFromEnviroment, _configFileProvider.Guid) | ||||
|             }; | ||||
|  | ||||
|             _processProvider.Start(startInfo); | ||||
|  | ||||
|         } | ||||
|  | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -35,6 +35,7 @@ | ||||
|     <WarningLevel>4</WarningLevel> | ||||
|   </PropertyGroup> | ||||
|   <ItemGroup> | ||||
|     <Reference Include="Ninject, Version=2.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL" /> | ||||
|     <Reference Include="NLog"> | ||||
|       <HintPath>..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll</HintPath> | ||||
|     </Reference> | ||||
|   | ||||
| @@ -4,6 +4,7 @@ using System.Linq; | ||||
| using NLog; | ||||
| using NLog.Config; | ||||
| using NLog.Targets; | ||||
| using Ninject; | ||||
| using NzbDrone.Common; | ||||
| using NzbDrone.Update.Providers; | ||||
|  | ||||
| @@ -13,6 +14,7 @@ namespace NzbDrone.Update | ||||
|     { | ||||
|         private readonly UpdateProvider _updateProvider; | ||||
|         private readonly ProcessProvider _processProvider; | ||||
|         private static StandardKernel _kernel; | ||||
|  | ||||
|         private static readonly Logger logger = LogManager.GetCurrentClassLogger(); | ||||
|  | ||||
| @@ -29,18 +31,10 @@ namespace NzbDrone.Update | ||||
|                 Console.WriteLine("Starting NzbDrone Update Client"); | ||||
|  | ||||
|                 InitLoggers(); | ||||
|  | ||||
|                 logger.Info("Initializing update application"); | ||||
|  | ||||
|                 var enviromentProvider = new EnviromentProvider(); | ||||
|                 var processProvider = new ProcessProvider(); | ||||
|                 var serviceProvider = new ServiceProvider(); | ||||
|                 var diskProvider = new DiskProvider(); | ||||
|                 var iisProvider = new IISProvider(); | ||||
|  | ||||
|                 var updateProvider = new UpdateProvider(diskProvider, serviceProvider, processProvider, enviromentProvider, iisProvider); | ||||
|  | ||||
|                 new Program(updateProvider, processProvider).Start(args); | ||||
|                 _kernel = new StandardKernel(); | ||||
|                 _kernel.Get<Program>().Start(args); | ||||
|             } | ||||
|             catch (Exception e) | ||||
|             { | ||||
| @@ -55,8 +49,8 @@ namespace NzbDrone.Update | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 var enviromentProvider = new EnviromentProvider(); | ||||
|                 var diskProvider = new DiskProvider(); | ||||
|                 var enviromentProvider = _kernel.Get<EnviromentProvider>(); | ||||
|                 var diskProvider = _kernel.Get<DiskProvider>(); | ||||
|                 logger.Info("Copying log tiles to application directory."); | ||||
|                 diskProvider.CopyDirectory(enviromentProvider.GetSandboxLogFolder(), enviromentProvider.GetUpdateLogFolder()); | ||||
|             } | ||||
| @@ -70,18 +64,19 @@ namespace NzbDrone.Update | ||||
|         { | ||||
|             LogConfiguration.RegisterConsoleLogger(LogLevel.Trace); | ||||
|             LogConfiguration.RegisterUdpLogger(); | ||||
|             LogConfiguration.RegisterExceptioneer(); | ||||
|  | ||||
|  | ||||
|             var lastUpgradeLog = new FileTarget(); | ||||
|             lastUpgradeLog.AutoFlush = true; | ||||
|             lastUpgradeLog.ConcurrentWrites = false; | ||||
|             lastUpgradeLog.FileName = Path.Combine(PathExtentions.UPDATE_LOG_FOLDER_NAME, DateTime.Now.ToString("yyyy.MM.dd-H-mm") + ".txt"); | ||||
|             lastUpgradeLog.KeepFileOpen = false; | ||||
|             lastUpgradeLog.Layout = "${longdate} - ${logger}: ${message} ${exception}"; | ||||
|             lastUpgradeLog.Layout = "${longdate} - ${logger}: ${message} ${exception:format=ToString}"; | ||||
|  | ||||
|             LogManager.Configuration.AddTarget(lastUpgradeLog.GetType().Name, lastUpgradeLog); | ||||
|             LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, lastUpgradeLog)); | ||||
|  | ||||
|             LogConfiguration.RegisterExceptioneer(); | ||||
|             LogConfiguration.Reload(); | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -1,6 +0,0 @@ | ||||
| <?xml version="1.0" encoding="utf-8" standalone="yes"?> | ||||
| <Config> | ||||
|   <Port>8989</Port> | ||||
|   <AuthenticationType>0</AuthenticationType> | ||||
|   <LaunchBrowser>true</LaunchBrowser> | ||||
| </Config> | ||||
		Reference in New Issue
	
	Block a user