private void GetComponentStatus([NotNull] ServerComponentInfo serverComponent)
        {
            Debug.ArgumentNotNull(serverComponent, nameof(serverComponent));

            var plugin = GetInstalledPlugin(serverComponent.Name);

            if (plugin == null)
            {
                return;
            }

            System.Version pluginVersion;
            System.Version componentVersion;

            try
            {
                pluginVersion = new System.Version(plugin.Version);
            }
            catch
            {
                pluginVersion = new System.Version(0, 0, 0, 0);
            }

            try
            {
                componentVersion = new System.Version(serverComponent.Version);
            }
            catch
            {
                componentVersion = new System.Version(0, 0, 0, 0);
            }

            var update = new UpdateInfo
            {
                Name            = serverComponent.Name,
                Plugin          = plugin,
                ServerComponent = serverComponent,
                LocalVersion    = plugin.Version,
                RuntimeVersion  = plugin.RuntimeVersion.ToString(),
                ServerVersion   = serverComponent.Version
            };

            if (pluginVersion == componentVersion)
            {
                update.Action = Rocks.Resources.UpdateServerComponentsDialog_GetComponentStatus_None;
            }
            else if (pluginVersion > componentVersion)
            {
                update.Action    = Rocks.Resources.UpdateServerComponentsDialog_GetComponentStatus_Copy_to_Server;
                update.IsChecked = true;
            }
            else if (pluginVersion < componentVersion)
            {
                update.Action = Rocks.Resources.UpdateServerComponentsDialog_GetComponentStatus_None___Newer_Version_on_Server;
            }

            Updates.Add(update);
        }
        private void LoadComponents([NotNull] string response, [NotNull] ExecuteResult executeResult, bool firstTime, [CanBeNull] Action completed)
        {
            Debug.ArgumentNotNull(response, nameof(response));
            Debug.ArgumentNotNull(executeResult, nameof(executeResult));

            DataService.DisableLoginErrorMessage = false;

            if (executeResult.Error != null && executeResult.Error.Message == @"No Service")
            {
                RenderComponents();

                if (!firstTime)
                {
                    AppHost.MessageBox("Got a \"No Service\" error.\n\nPlease check that the connection is correct.", "Information", MessageBoxButton.OK, MessageBoxImage.Information);
                }

                if (completed != null)
                {
                    completed();
                }

                return;
            }

            if (!DataService.HandleExecute(response, executeResult, false))
            {
                RenderComponents();
                if (completed != null)
                {
                    completed();
                }

                return;
            }

            if (string.IsNullOrEmpty(response))
            {
                RenderComponents();
                if (completed != null)
                {
                    completed();
                }

                return;
            }

            var doc  = XDocument.Parse(response);
            var root = doc.Root;

            if (root == null)
            {
                return;
            }

            foreach (var element in root.Elements(@"component"))
            {
                var info = new ServerComponentInfo
                {
                    Name    = element.GetAttributeValue("name"),
                    Version = element.GetAttributeValue("version")
                };

                ServerComponents.Add(info);
            }

            RenderComponents();

            if (completed != null)
            {
                completed();
            }
        }