| 
									
										
										
										
											2011-10-22 22:26:43 -07:00
										 |  |  | using System; | 
					
						
							| 
									
										
										
										
											2011-11-13 19:09:34 -08:00
										 |  |  | using System.IO; | 
					
						
							| 
									
										
										
										
											2011-10-22 22:26:43 -07:00
										 |  |  | using System.Linq; | 
					
						
							| 
									
										
										
										
											2011-11-13 12:31:02 -08:00
										 |  |  | using NLog; | 
					
						
							| 
									
										
										
										
											2011-11-13 22:01:51 -08:00
										 |  |  | using NLog.Config; | 
					
						
							|  |  |  | using NLog.Targets; | 
					
						
							| 
									
										
										
										
											2011-11-20 18:59:42 -08:00
										 |  |  | using Ninject; | 
					
						
							| 
									
										
										
										
											2011-11-13 12:31:02 -08:00
										 |  |  | using NzbDrone.Common; | 
					
						
							|  |  |  | using NzbDrone.Update.Providers; | 
					
						
							| 
									
										
										
										
											2011-10-22 22:26:43 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace NzbDrone.Update | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-11-13 12:31:02 -08:00
										 |  |  |     public class Program | 
					
						
							| 
									
										
										
										
											2011-10-22 22:26:43 -07:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2011-11-13 12:31:02 -08:00
										 |  |  |         private readonly UpdateProvider _updateProvider; | 
					
						
							|  |  |  |         private readonly ProcessProvider _processProvider; | 
					
						
							| 
									
										
										
										
											2011-11-20 18:59:42 -08:00
										 |  |  |         private static StandardKernel _kernel; | 
					
						
							| 
									
										
										
										
											2011-11-13 12:31:02 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         private static readonly Logger logger = LogManager.GetCurrentClassLogger(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         public Program(UpdateProvider updateProvider, ProcessProvider processProvider) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             _updateProvider = updateProvider; | 
					
						
							|  |  |  |             _processProvider = processProvider; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         public static void Main(string[] args) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             try | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 Console.WriteLine("Starting NzbDrone Update Client"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-13 22:01:51 -08:00
										 |  |  |                 InitLoggers(); | 
					
						
							| 
									
										
										
										
											2011-11-20 18:59:42 -08:00
										 |  |  |                 _kernel = new StandardKernel(); | 
					
						
							| 
									
										
										
										
											2011-11-20 19:42:45 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 logger.Info("Updating NzbDrone to version {0}", _kernel.Get<EnviromentProvider>().Version); | 
					
						
							| 
									
										
										
										
											2011-11-20 18:59:42 -08:00
										 |  |  |                 _kernel.Get<Program>().Start(args); | 
					
						
							| 
									
										
										
										
											2011-11-13 12:31:02 -08:00
										 |  |  |             } | 
					
						
							|  |  |  |             catch (Exception e) | 
					
						
							|  |  |  |             { | 
					
						
							| 
									
										
										
										
											2011-11-13 12:42:12 -08:00
										 |  |  |                 logger.FatalException("An error has occurred while applying update package.", e); | 
					
						
							| 
									
										
										
										
											2011-11-13 12:31:02 -08:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2011-11-20 18:13:10 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |             TransferUpdateLogs(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         private static void TransferUpdateLogs() | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             try | 
					
						
							|  |  |  |             { | 
					
						
							| 
									
										
										
										
											2011-11-20 18:59:42 -08:00
										 |  |  |                 var enviromentProvider = _kernel.Get<EnviromentProvider>(); | 
					
						
							|  |  |  |                 var diskProvider = _kernel.Get<DiskProvider>(); | 
					
						
							| 
									
										
										
										
											2011-11-22 17:28:53 -08:00
										 |  |  |                 logger.Info("Copying log files to application directory."); | 
					
						
							| 
									
										
										
										
											2011-11-20 18:13:10 -08:00
										 |  |  |                 diskProvider.CopyDirectory(enviromentProvider.GetSandboxLogFolder(), enviromentProvider.GetUpdateLogFolder()); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             catch (Exception e) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 logger.FatalException("Can't copy upgrade log files to target folder", e); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2011-11-13 12:31:02 -08:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-13 22:01:51 -08:00
										 |  |  |         private static void InitLoggers() | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             LogConfiguration.RegisterConsoleLogger(LogLevel.Trace); | 
					
						
							|  |  |  |             LogConfiguration.RegisterUdpLogger(); | 
					
						
							| 
									
										
										
										
											2011-11-20 18:59:42 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-20 17:30:59 -08:00
										 |  |  |             var lastUpgradeLog = new FileTarget(); | 
					
						
							|  |  |  |             lastUpgradeLog.AutoFlush = true; | 
					
						
							|  |  |  |             lastUpgradeLog.ConcurrentWrites = false; | 
					
						
							| 
									
										
										
										
											2011-11-20 20:18:40 -08:00
										 |  |  |             lastUpgradeLog.FileName = Path.Combine(new EnviromentProvider().GetSandboxLogFolder(), DateTime.Now.ToString("yyyy.MM.dd-H-mm") + ".txt"); | 
					
						
							| 
									
										
										
										
											2011-11-20 17:30:59 -08:00
										 |  |  |             lastUpgradeLog.KeepFileOpen = false; | 
					
						
							| 
									
										
										
										
											2011-11-20 18:59:42 -08:00
										 |  |  |             lastUpgradeLog.Layout = "${longdate} - ${logger}: ${message} ${exception:format=ToString}"; | 
					
						
							| 
									
										
										
										
											2011-11-20 17:30:59 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |             LogManager.Configuration.AddTarget(lastUpgradeLog.GetType().Name, lastUpgradeLog); | 
					
						
							|  |  |  |             LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, lastUpgradeLog)); | 
					
						
							| 
									
										
										
										
											2011-11-20 17:13:58 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-20 18:59:42 -08:00
										 |  |  |             LogConfiguration.RegisterExceptioneer(); | 
					
						
							| 
									
										
										
										
											2011-11-13 22:01:51 -08:00
										 |  |  |             LogConfiguration.Reload(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-13 12:31:02 -08:00
										 |  |  |         public void Start(string[] args) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             VerfityArguments(args); | 
					
						
							|  |  |  |             int processId = ParseProcessId(args); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-13 19:09:34 -08:00
										 |  |  |             FileInfo exeFileInfo = new FileInfo(_processProvider.GetProcessById(processId).StartPath); | 
					
						
							|  |  |  |             string appPath = exeFileInfo.Directory.FullName; | 
					
						
							| 
									
										
										
										
											2011-11-13 12:31:02 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |             logger.Info("Starting update process"); | 
					
						
							|  |  |  |             _updateProvider.Start(appPath); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         private int ParseProcessId(string[] args) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             int id = 0; | 
					
						
							|  |  |  |             if (!Int32.TryParse(args[0], out id) || id <= 0) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 throw new ArgumentOutOfRangeException("Invalid process id: " + args[0]); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return id; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         private void VerfityArguments(string[] args) | 
					
						
							| 
									
										
										
										
											2011-10-22 22:26:43 -07:00
										 |  |  |         { | 
					
						
							| 
									
										
										
										
											2011-11-13 12:31:02 -08:00
										 |  |  |             if (args == null || args.Length != 2) | 
					
						
							|  |  |  |                 throw new ArgumentException("Wrong number of parameters were passed in."); | 
					
						
							| 
									
										
										
										
											2011-10-22 22:26:43 -07:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |