static async Task <AvailableVersionInfo> GetLatestVersionAsync() { WebClient wc = new WebClient(); IWebProxy systemWebProxy = WebRequest.GetSystemWebProxy(); systemWebProxy.Credentials = CredentialCache.DefaultCredentials; wc.Proxy = systemWebProxy; string data = await wc.DownloadStringTaskAsync(UpdateUrl); XDocument doc = XDocument.Load(new StringReader(data)); var bands = doc.Root.Elements("band"); var currentBand = bands.FirstOrDefault(b => (string)b.Attribute("id") == band) ?? bands.First(); Version version = new Version((string)currentBand.Element("latestVersion")); string url = (string)currentBand.Element("downloadUrl"); if (!(url.StartsWith("http://", StringComparison.Ordinal) || url.StartsWith("https://", StringComparison.Ordinal))) { url = null; // don't accept non-urls } latestAvailableVersion = new AvailableVersionInfo { Version = version, DownloadUrl = url }; return(latestAvailableVersion); }
static void AddUpdateCheckButton(StackPanel stackPanel, DecompilerTextView textView) { Button button = ThemeManager.Current.CreateButton(); button.Content = Resources.CheckUpdates; button.Cursor = Cursors.Arrow; stackPanel.Children.Add(button); button.Click += async delegate { button.Content = Resources.Checking; button.IsEnabled = false; try { AvailableVersionInfo vInfo = await GetLatestVersionAsync(); stackPanel.Children.Clear(); ShowAvailableVersion(vInfo, stackPanel); } catch (Exception ex) { AvalonEditTextOutput exceptionOutput = new AvalonEditTextOutput(); exceptionOutput.WriteLine(ex.ToString()); textView.ShowText(exceptionOutput); } }; }
static Task <AvailableVersionInfo> GetLatestVersionAsync() { var tcs = new TaskCompletionSource <AvailableVersionInfo>(); WebClient wc = new WebClient(); wc.UseDefaultCredentials = true; wc.DownloadDataCompleted += delegate(object sender, DownloadDataCompletedEventArgs e) { if (e.Error != null) { tcs.SetException(e.Error); } else { try { XDocument doc = XDocument.Load(new MemoryStream(e.Result)); var bands = doc.Root.Elements("band"); var currentBand = bands.FirstOrDefault(b => (string)b.Attribute("id") == "stable") ?? bands.First(); Version version = new Version((string)currentBand.Element("latestVersion")); string url = (string)currentBand.Element("downloadUrl"); if (!(url.StartsWith("http://", StringComparison.Ordinal) || url.StartsWith("https://", StringComparison.Ordinal))) { url = null; // don't accept non-urls } latestAvailableVersion = new AvailableVersionInfo { Version = version, DownloadUrl = url }; tcs.SetResult(latestAvailableVersion); } catch (Exception ex) { tcs.SetException(ex); } } }; wc.DownloadDataAsync(UpdateUrl); return(tcs.Task); }
private static Task<AvailableVersionInfo> GetLatestVersionAsync() { var tcs = new TaskCompletionSource<AvailableVersionInfo>(); new Action(() => { WebClient wc = new WebClient(); IWebProxy systemWebProxy = WebRequest.GetSystemWebProxy(); systemWebProxy.Credentials = CredentialCache.DefaultCredentials; wc.Proxy = systemWebProxy; wc.DownloadDataCompleted += delegate (object sender, DownloadDataCompletedEventArgs e) { if (e.Error != null) { tcs.SetException(e.Error); } else { try { XDocument doc = XDocument.Load(new MemoryStream(e.Result)); var bands = doc.Root.Elements("band"); var currentBand = bands.FirstOrDefault(b => (string)b.Attribute("id") == band) ?? bands.First(); Version version = new Version((string)currentBand.Element("latestVersion")); string url = (string)currentBand.Element("downloadUrl"); if (!(url.StartsWith("http://", StringComparison.Ordinal) || url.StartsWith("https://", StringComparison.Ordinal))) url = null; // don't accept non-urls latestAvailableVersion = new AvailableVersionInfo { Version = version, DownloadUrl = url }; tcs.SetResult(latestAvailableVersion); } catch (Exception ex) { tcs.SetException(ex); } } }; wc.DownloadDataAsync(UpdateUrl); }).BeginInvoke(null, null); return tcs.Task; }
private static void ShowAvailableVersion(AvailableVersionInfo availableVersion, StackPanel stackPanel) { if (currentVersion == availableVersion.Version) { stackPanel.Children.Add( new Image { Width = 16, Height = 16, Source = Images.OK, Margin = new Thickness(4, 0, 4, 0) }); stackPanel.Children.Add( new TextBlock { Text = "You are using the latest release.", VerticalAlignment = VerticalAlignment.Bottom }); } else if (currentVersion < availableVersion.Version) { stackPanel.Children.Add( new TextBlock { Text = "Version " + availableVersion.Version + " is available.", Margin = new Thickness(0, 0, 8, 0), VerticalAlignment = VerticalAlignment.Bottom }); if (availableVersion.DownloadUrl != null) { Button button = new Button(); button.Content = "Download"; button.Cursor = Cursors.Arrow; button.Click += delegate { MainWindow.OpenLink(availableVersion.DownloadUrl); }; stackPanel.Children.Add(button); } } else { stackPanel.Children.Add(new TextBlock { Text = "You are using a nightly build newer than the latest release." }); } }
private static void CheckForUpdateInternal(TaskCompletionSource<string> tcs, UpdateSettings s) { GetLatestVersionAsync().ContinueWith( delegate (Task<AvailableVersionInfo> task) { try { s.LastSuccessfulUpdateCheck = DateTime.UtcNow; AvailableVersionInfo v = task.Result; if (v.Version > currentVersion) tcs.SetResult(v.DownloadUrl); else tcs.SetResult(null); } catch (AggregateException) { // ignore errors getting the version info tcs.SetResult(null); } }); }
/// <summary> /// If automatic update checking is enabled, checks if there are any updates available. /// Returns the download URL if an update is available. /// Returns null if no update is available, or if no check was performed. /// </summary> public static Task <string> CheckForUpdatesIfEnabledAsync(DNSpySettings spySettings) { var tcs = new TaskCompletionSource <string>(); UpdateSettings s = new UpdateSettings(spySettings); if (checkForUpdateCode && s.AutomaticUpdateCheckEnabled) { // perform update check if we never did one before; // or if the last check wasn't in the past 7 days if (s.LastSuccessfulUpdateCheck == null || s.LastSuccessfulUpdateCheck < DateTime.UtcNow.AddDays(-7) || s.LastSuccessfulUpdateCheck > DateTime.UtcNow) { GetLatestVersionAsync().ContinueWith( delegate(Task <AvailableVersionInfo> task) { try { s.LastSuccessfulUpdateCheck = DateTime.UtcNow; AvailableVersionInfo v = task.Result; if (v.Version > currentVersion) { tcs.SetResult(v.DownloadUrl); } else { tcs.SetResult(null); } } catch (AggregateException) { // ignore errors getting the version info tcs.SetResult(null); } }); } else { tcs.SetResult(null); } } else { tcs.SetResult(null); } return(tcs.Task); }
static void ShowAvailableVersion(AvailableVersionInfo availableVersion, StackPanel stackPanel) { if (currentVersion == availableVersion.Version) { stackPanel.Children.Add( new Image { Width = 16, Height = 16, Source = ImageCache.Instance.GetImage("OK", BackgroundType.TextEditor), Margin = new Thickness(4, 0, 4, 0) }); stackPanel.Children.Add( new TextBlock { Text = "You are using the latest release.", VerticalAlignment = VerticalAlignment.Bottom }); } else if (currentVersion < availableVersion.Version) { stackPanel.Children.Add( new TextBlock { Text = "Version " + availableVersion.Version + " is available.", Margin = new Thickness(0, 0, 8, 0), VerticalAlignment = VerticalAlignment.Bottom }); if (availableVersion.DownloadUrl != null) { Button button = new Button(); button.Content = "Download"; button.Cursor = Cursors.Arrow; button.Click += delegate { Process.Start(availableVersion.DownloadUrl); }; stackPanel.Children.Add(button); } } else { stackPanel.Children.Add(new TextBlock { Text = "You are using a nightly build newer than the latest release." }); } }
static void ShowAvailableVersion(AvailableVersionInfo availableVersion, StackPanel stackPanel) { if (currentVersion == availableVersion.Version) { stackPanel.Children.Add( new Image { Width = 16, Height = 16, Source = Images.OK, Margin = new Thickness(4, 0, 4, 0) }); stackPanel.Children.Add( new TextBlock { Text = Resources.UsingLatestRelease, VerticalAlignment = VerticalAlignment.Bottom }); } else if (currentVersion < availableVersion.Version) { stackPanel.Children.Add( new TextBlock { Text = string.Format(Resources.VersionAvailable, availableVersion.Version), Margin = new Thickness(0, 0, 8, 0), VerticalAlignment = VerticalAlignment.Bottom }); if (availableVersion.DownloadUrl != null) { Button button = new Button(); button.Content = Resources.Download; button.Cursor = Cursors.Arrow; button.Click += delegate { MainWindow.OpenLink(availableVersion.DownloadUrl); }; stackPanel.Children.Add(button); } } else { stackPanel.Children.Add(new TextBlock { Text = Resources.UsingNightlyBuildNewerThanLatestRelease }); } }
static async Task <AvailableVersionInfo> GetLatestVersionAsync() { var client = new HttpClient(new HttpClientHandler() { UseProxy = true, UseDefaultCredentials = true, }); string data = await client.GetStringAsync(UpdateUrl); XDocument doc = XDocument.Load(new StringReader(data)); var bands = doc.Root.Elements("band"); var currentBand = bands.FirstOrDefault(b => (string)b.Attribute("id") == band) ?? bands.First(); Version version = new Version((string)currentBand.Element("latestVersion")); string url = (string)currentBand.Element("downloadUrl"); if (!(url.StartsWith("http://", StringComparison.Ordinal) || url.StartsWith("https://", StringComparison.Ordinal))) { url = null; // don't accept non-urls } latestAvailableVersion = new AvailableVersionInfo { Version = version, DownloadUrl = url }; return(latestAvailableVersion); }
static Task<AvailableVersionInfo> GetLatestVersionAsync() { var tcs = new TaskCompletionSource<AvailableVersionInfo>(); new Action(() => { WebClient wc = new WebClient(); IWebProxy systemWebProxy = WebRequest.GetSystemWebProxy(); systemWebProxy.Credentials = CredentialCache.DefaultCredentials; wc.Proxy = systemWebProxy; wc.DownloadDataCompleted += delegate (object sender, DownloadDataCompletedEventArgs e) { if (e.Error != null) { tcs.SetException(e.Error); } else { try { XDocument doc = XDocument.Load(new MemoryStream(e.Result)); var bands = doc.Root.Elements("band"); var currentBand = bands.FirstOrDefault(b => (string)b.Attribute("id") == band) ?? bands.First(); Version version = new Version((string)currentBand.Element("latestVersion")); string url = (string)currentBand.Element("downloadUrl"); if (!(url.StartsWith("http://", StringComparison.Ordinal) || url.StartsWith("https://", StringComparison.Ordinal))) url = null; // don't accept non-urls latestAvailableVersion = new AvailableVersionInfo { Version = version, DownloadUrl = url }; tcs.SetResult(latestAvailableVersion); } catch (Exception ex) { tcs.SetException(ex); } } }; wc.DownloadDataAsync(UpdateUrl); }).BeginInvoke(null, null); return tcs.Task; }