private async void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
        {
            WindowTitle.Content = Settings.Default.ServerTitle;

            IProgress <ActionProgress> status = new Progress <ActionProgress>(info =>
            {
                UpdateLabel.Content         = info.Text;
                ProgressBar.Value           = info.Percent;
                ProgressBar.IsIndeterminate = info.Percent == -1;
                if (info.Percent == 100)
                {
                    Launch.Content   = "Launch";
                    Launch.IsEnabled = true;
                }
            });

            try
            {
                var news = await WoWUtility.GetStringTaskAsync(Settings.Default.NewsUrl);

                if (!string.IsNullOrWhiteSpace(Settings.Default.NewsParser))
                {
                    var parser = new NewsParser(html =>
                    {
                        var doc = new HtmlDocument();
                        doc.LoadHtml(html);
                        return(from node in doc.DocumentNode.SelectNodes("//tr[@id='postRowId']")
                               let title = node.SelectSingleNode("./td[2]")
                                           select new Post
                        {
                            Title = title.SelectSingleNode("./a/b").InnerText.Trim(),
                            Author = node.SelectSingleNode("./td[4]/font").InnerText.Trim(),
                            Date = DateTime.Parse((title.SelectSingleNode("./div[1]/div[2]").InnerText)),
                            Url = title.SelectSingleNode("./a").Attributes["href"].Value
                        });
                    }, $@"<p style=""text-align:left;""><a href=""{0}"" style=""color: white"">{1}</a><br><span style=""float:right;""><i style=""color: gray"">{2}</i></span></p>");

                    NewsTextBlock.Text = parser.Parse(news).Select(
                        x => string.Format(parser.PostFormat, x.Url, x.Title, x.Author, x.Date))
                                         .Aggregate((current, next) => current + next);
                }
                else
                {
                    NewsTextBlock.Text = news ?? "Failed to fetch news";
                }
            }
            catch (HttpRequestException)
            {
                status.Report(new ActionProgress("Failed to fetch news", 100));
            }

            try
            {
                await WoWUtility.GetWoWFolder(status);

                await WoWUtility.CheckUpdates(status);
            }
            catch (HttpRequestException)
            {
                status.Report(new ActionProgress("Failed to check for updates", 100));
            }
            catch (ArgumentNullException)
            {
                //progress.Report(new ActionProgress("Cancelled finding wow folder", 100));
            }
        }
 private void Launch_Click(object sender, RoutedEventArgs routedEventArgs)
 {
     WoWUtility.SetRealmlist(Settings.Default.Realmlist, Settings.Default.Patch);
     Process.Start(Path.Combine(WoWUtility.FindWoWFolder(Settings.Default.Patch), "Wow.exe"));
 }