Esempio n. 1
0
        private List <int> GetOtherNzbDroneProcessIds()
        {
            try
            {
                var currentId = _processProvider.GetCurrentProcess().Id;

                var otherProcesses = _processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_CONSOLE_PROCESS_NAME)
                                     .Union(_processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_PROCESS_NAME))
                                     .Select(c => c.Id)
                                     .Except(new[] { currentId })
                                     .ToList();

                if (otherProcesses.Any())
                {
                    _logger.Info("{0} instance(s) of Sonarr are running", otherProcesses.Count);
                }

                return(otherProcesses);
            }
            catch (Exception ex)
            {
                _logger.Warn(ex, "Failed to check for multiple instances of Sonarr.");
                return(new List <int>());
            }
        }
Esempio n. 2
0
        public List <ProcessInfo> FindNzbDroneProcesses()
        {
            var consoleProcesses = _processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_CONSOLE_PROCESS_NAME);
            var winformProcesses = _processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_PROCESS_NAME);

            return(consoleProcesses.Concat(winformProcesses).ToList());
        }
Esempio n. 3
0
        private List <int> GetOtherNzbDroneProcessIds()
        {
            var currentId      = _processProvider.GetCurrentProcess().Id;
            var otherProcesses = _processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_CONSOLE_PROCESS_NAME)
                                 .Union(_processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_PROCESS_NAME))
                                 .Select(c => c.Id)
                                 .Except(new[] { currentId })
                                 .ToList();

            if (otherProcesses.Any())
            {
                _logger.Info("{0} instance(s) of NzbDrone are running", otherProcesses.Count);
            }

            return(otherProcesses);
        }
Esempio n. 4
0
        public List <ProcessInfo> FindNzbDroneProcesses()
        {
            var monoProcesses = _processProvider.FindProcessByName("mono");

            return(monoProcesses.Where(c =>
            {
                try
                {
                    var processArgs = _processProvider.StartAndCapture("ps", String.Format("-p {0} -o args=", c.Id));

                    return processArgs.Standard.Any(p => p.Contains(ProcessProvider.NZB_DRONE_PROCESS_NAME + ".exe") ||
                                                    p.Contains(ProcessProvider.NZB_DRONE_CONSOLE_PROCESS_NAME + ".exe"));
                }
                catch (InvalidOperationException ex)
                {
                    _logger.WarnException("Error getting process arguments", ex);
                    return false;
                }
            }).ToList());
        }
Esempio n. 5
0
        public void Start(string installationFolder, int processId)
        {
            _logger.Info("Installation Folder: {0}", installationFolder);
            _logger.Info("Updating Gamearr from version {0} to version {1}", _detectExistingVersion.GetExistingVersion(installationFolder), BuildInfo.Version);

            Verify(installationFolder, processId);

            var appType = _detectApplicationType.GetAppType();

            _processProvider.FindProcessByName(ProcessProvider.GAMEARR_CONSOLE_PROCESS_NAME);
            _processProvider.FindProcessByName(ProcessProvider.GAMEARR_PROCESS_NAME);

            if (OsInfo.IsWindows)
            {
                _terminateNzbDrone.Terminate(processId);
            }

            try
            {
                _backupAndRestore.Backup(installationFolder);
                _backupAppData.Backup();

                if (OsInfo.IsWindows)
                {
                    if (_processProvider.Exists(ProcessProvider.GAMEARR_CONSOLE_PROCESS_NAME) || _processProvider.Exists(ProcessProvider.GAMEARR_PROCESS_NAME))
                    {
                        _logger.Error("Gamearr was restarted prematurely by external process.");
                        return;
                    }
                }

                try
                {
                    _logger.Info("Copying new files to target folder");
                    _diskTransferService.MirrorFolder(_appFolderInfo.GetUpdatePackageFolder(), installationFolder);

                    // Set executable flag on Gamearr app
                    if (OsInfo.IsOsx)
                    {
                        _diskProvider.SetPermissions(Path.Combine(installationFolder, "Gamearr"), "0755", null, null);
                    }
                }
                catch (Exception e)
                {
                    _logger.Error(e, "Failed to copy upgrade package to target folder.");
                    _backupAndRestore.Restore(installationFolder);
                    throw;
                }
            }
            finally
            {
                if (OsInfo.IsWindows)
                {
                    _startNzbDrone.Start(appType, installationFolder);
                }
                else
                {
                    _terminateNzbDrone.Terminate(processId);

                    _logger.Info("Waiting for external auto-restart.");
                    for (int i = 0; i < 5; i++)
                    {
                        System.Threading.Thread.Sleep(1000);

                        if (_processProvider.Exists(ProcessProvider.GAMEARR_PROCESS_NAME))
                        {
                            _logger.Info("Gamearr was restarted by external process.");
                            break;
                        }
                    }

                    if (!_processProvider.Exists(ProcessProvider.GAMEARR_PROCESS_NAME))
                    {
                        _startNzbDrone.Start(appType, installationFolder);
                    }
                }
            }
        }
Esempio n. 6
0
        public void Start(string installationFolder, int processId)
        {
            Verify(installationFolder, processId);

            var appType = _detectApplicationType.GetAppType();

            try
            {
                _processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_CONSOLE_PROCESS_NAME);
                _processProvider.FindProcessByName(ProcessProvider.NZB_DRONE_PROCESS_NAME);

                if (OsInfo.IsWindows)
                {
                    _terminateNzbDrone.Terminate(processId);
                }

                _backupAndRestore.Backup(installationFolder);
                _backupAppData.Backup();

                try
                {
                    _logger.Info("Emptying installation folder");
                    _diskProvider.EmptyFolder(installationFolder);

                    _logger.Info("Copying new files to target folder");
                    _diskTransferService.TransferFolder(_appFolderInfo.GetUpdatePackageFolder(), installationFolder, TransferMode.Copy, false);

                    // Set executable flag on Sonarr app
                    if (OsInfo.IsOsx)
                    {
                        _diskProvider.SetPermissions(Path.Combine(installationFolder, "Sonarr"), "0755", null, null);
                    }
                }
                catch (Exception e)
                {
                    _logger.FatalException("Failed to copy upgrade package to target folder.", e);
                    _backupAndRestore.Restore(installationFolder);
                }
            }
            finally
            {
                if (OsInfo.IsWindows)
                {
                    _startNzbDrone.Start(appType, installationFolder);
                }
                else
                {
                    _terminateNzbDrone.Terminate(processId);

                    _logger.Info("Waiting for external auto-restart.");
                    for (int i = 0; i < 5; i++)
                    {
                        System.Threading.Thread.Sleep(1000);

                        if (_processProvider.Exists(ProcessProvider.NZB_DRONE_PROCESS_NAME))
                        {
                            _logger.Info("Sonarr was restarted by external process.");
                            break;
                        }
                    }

                    if (!_processProvider.Exists(ProcessProvider.NZB_DRONE_PROCESS_NAME))
                    {
                        _startNzbDrone.Start(appType, installationFolder);
                    }
                }
            }
        }
        public void Start(string installationFolder, int processId)
        {
            _logger.Info("Installation Folder: {0}", installationFolder);
            _logger.Info("Updating Sonarr from version {0} to version {1}", _detectExistingVersion.GetExistingVersion(installationFolder), BuildInfo.Version);

            Verify(installationFolder, processId);

            if (installationFolder.EndsWith(@"\bin\Sonarr") || installationFolder.EndsWith(@"/bin/Sonarr"))
            {
                installationFolder = installationFolder.GetParentPath();
                _logger.Info("Fixed Installation Folder: {0}", installationFolder);
            }

            var appType = _detectApplicationType.GetAppType();

            _processProvider.FindProcessByName(ProcessProvider.SONARR_CONSOLE_PROCESS_NAME);
            _processProvider.FindProcessByName(ProcessProvider.SONARR_PROCESS_NAME);

            if (OsInfo.IsWindows)
            {
                _terminateNzbDrone.Terminate(processId);
            }

            try
            {
                _backupAndRestore.Backup(installationFolder);
                _backupAppData.Backup();

                if (OsInfo.IsWindows)
                {
                    if (_processProvider.Exists(ProcessProvider.SONARR_CONSOLE_PROCESS_NAME) || _processProvider.Exists(ProcessProvider.SONARR_PROCESS_NAME))
                    {
                        _logger.Error("Sonarr was restarted prematurely by external process.");
                        return;
                    }
                }

                try
                {
                    _logger.Info("Copying new files to target folder");
                    _diskTransferService.MirrorFolder(_appFolderInfo.GetUpdatePackageFolder(), installationFolder);

                    // Handle OSX package update and set executable flag on Sonarr app
                    if (OsInfo.IsOsx)
                    {
                        var shimPath     = Path.Combine(installationFolder, "Sonarr");
                        var realShimPath = Path.Combine(installationFolder, "../Sonarr");

                        if (installationFolder.EndsWith("/MacOS/bin") && _diskProvider.FileExists(realShimPath))
                        {
                            // New MacOS App stores Sonarr binaries in MacOS/bin and has a shim in MacOS
                            // Delete the shim in the downloaded update, we shouldn't update the shim unnecessarily
                            _diskProvider.DeleteFile(shimPath);
                        }
                        else
                        {
                            // Old MacOS App stores Sonarr binaries in MacOS together with shell script
                            // Make shim executable
                            _diskProvider.SetFilePermissions(shimPath, "755", null);
                        }
                    }
                }
                catch (Exception e)
                {
                    _logger.Error(e, "Failed to copy upgrade package to target folder.");
                    _backupAndRestore.Restore(installationFolder);
                    throw;
                }
            }
            finally
            {
                if (OsInfo.IsWindows)
                {
                    _startNzbDrone.Start(appType, installationFolder);
                }
                else
                {
                    _terminateNzbDrone.Terminate(processId);

                    _logger.Info("Waiting for external auto-restart.");
                    var theDakoLimit = 10;
                    for (int i = 0; i < theDakoLimit; i++)
                    {
                        System.Threading.Thread.Sleep(1000);

                        if (_processProvider.Exists(ProcessProvider.SONARR_PROCESS_NAME))
                        {
                            _logger.Info("Sonarr was restarted by external process.");
                            break;
                        }
                    }

                    if (!_processProvider.Exists(ProcessProvider.SONARR_PROCESS_NAME))
                    {
                        _startNzbDrone.Start(appType, installationFolder);
                    }
                }
            }
        }
Esempio n. 8
0
        public void Start(UpdateStartupContext ctx)
        {
            var dector = new DetectApplicationType();

            var processId = _processProvider.FindProcessByName(ProcessProvider.OmbiProcessName)?.FirstOrDefault()?.Id ?? -1;

            // Log if process is -1

            var dir = CreateTempPath();

            TempPath = Path.Combine(dir.FullName, "OmbiUpdate.zip");
            using (var client = new WebClient())
            {
                client.DownloadProgressChanged += (s, e) =>
                {
                    Console.WriteLine($"{e.ProgressPercentage}%");
                };
                client.DownloadFile(ctx.DownloadPath, TempPath);
            }

            var appType = dector.GetAppType();

            _processProvider.FindProcessByName(ProcessProvider.OmbiProcessName);
            var installationFolder = GetInstallationDirectory(ctx);
            var terminator         = new TerminateOmbi(new ServiceProvider(_processProvider), _processProvider);

            if (OsInfo.IsWindows)
            {
                terminator.Terminate(processId);
            }
            try
            {
                BackupCurrentVersion();
                EmptyInstallationFolder();

                using (var archive = ZipFile.OpenRead(TempPath))
                {
                    foreach (var entry in archive.Entries)
                    {
                        var fullname = string.Empty;
                        if (entry.FullName.Contains("Release/")) // Don't extract the release folder, we are already in there
                        {
                            fullname = entry.FullName.Replace("Release/", string.Empty);
                        }
                        if (entry.Name.Contains("UpdateService"))
                        {
                            fullname = entry.FullName.Replace("UpdateService", "UpdateService_New");
                        }

                        var fullPath = Path.Combine(PathUp(Path.GetDirectoryName(Application.ExecutablePath), 1), fullname);



                        if (string.IsNullOrEmpty(entry.Name))
                        {
                            Directory.CreateDirectory(fullPath);
                        }
                        else
                        {
                            if (entry.Name.Contains("Updater"))
                            {
                                continue;
                            }

                            entry.ExtractToFile(fullPath, true);
                            Console.WriteLine("Restored {0}", entry.FullName);
                        }
                    }
                }

                // Need to install here
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                RestoreBackup();
                throw;
            }
            finally
            {
                var startOmbi = new StartOmbi(new ServiceProvider(_processProvider), _processProvider);
                if (OsInfo.IsWindows)
                {
                    startOmbi.Start(appType, installationFolder);
                }
                else
                {
                    terminator.Terminate(processId);

                    Logger.Info("Waiting for external auto-restart.");
                    for (int i = 0; i < 5; i++)
                    {
                        System.Threading.Thread.Sleep(1000);

                        if (_processProvider.Exists(ProcessProvider.OmbiProcessName))
                        {
                            Logger.Info("Ombi was restarted by external process.");
                            break;
                        }
                    }

                    if (!_processProvider.Exists(ProcessProvider.OmbiProcessName))
                    {
                        startOmbi.Start(appType, installationFolder, ctx.StartupArgs);
                    }
                }
            }
        }