/// <summary> /// Callback for the UpdateRequest's UpdateDataAvailable event. /// Reads the request's data, and parses for available versions. /// If a more recent version is available, the UpdateInfo object /// will be set. /// </summary> /// <param name="request">An instance of an update request.</param> public void UpdateDataAvailable(IAsynchronousRequest request) { UpdateInfo = null; //If there is error data or the request data is empty //bail out. if (!string.IsNullOrEmpty(request.Error) || string.IsNullOrEmpty(request.Data)) { _versionCheckInProgress = false; return; } XNamespace ns = "http://s3.amazonaws.com/doc/2006-03-01/"; XDocument doc = null; using (TextReader td = new StringReader(request.Data)) { doc = XDocument.Load(td); } var bucketresult = doc.Element(ns + "ListBucketResult"); var builds = bucketresult.Descendants(ns + "LastModified"). OrderByDescending(x => DateTime.Parse(x.Value)). Where(x => x.Parent.Value.Contains("DynamoInstall")). Select(x => x.Parent); var xElements = builds as XElement[] ?? builds.ToArray(); if (!xElements.Any()) { _versionCheckInProgress = false; return; } var latestBuild = xElements.First(); var latestBuildFileName = latestBuild.Element(ns + "Key").Value; var latestBuildDownloadUrl = Path.Combine(Configurations.UpdateDownloadLocation, latestBuildFileName); var latestBuildVersion = BinaryVersion.FromString(Path.GetFileNameWithoutExtension(latestBuildFileName).Remove(0, 13)); if (latestBuildVersion > ProductVersion) { UpdateInfo = new AppVersionInfo() { Version = latestBuildVersion, VersionInfoURL = Configurations.UpdateDownloadLocation, InstallerURL = latestBuildDownloadUrl }; } _versionCheckInProgress = false; }