Example #1
0
        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);
        }
Example #2
0
        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);
                }
            };
        }
Example #3
0
        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);
        }
Example #4
0
		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;
		}
Example #5
0
		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." });
			}
		}
Example #6
0
		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);
					}
				});
		}
Example #7
0
        /// <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);
        }
Example #8
0
 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."
         });
     }
 }
Example #9
0
 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
         });
     }
 }
Example #10
0
        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);
        }
Example #11
0
		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;
		}
Example #12
0
		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." });
			}
		}