/// <summary> /// Async call to request the update version info from the web. /// This call raises UpdateFound event notification, if an update is /// found. /// </summary> public void CheckForProductUpdate(IAsynchronousRequest request) { _logger.Log("RequestUpdateVersionInfo", "RequestUpdateVersionInfo"); if (_versionCheckInProgress) { return; } _versionCheckInProgress = true; }
/// <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; }
/// <summary> /// Get the file name of the latest build on S3 /// </summary> /// <param name="request"></param> /// <returns></returns> private string GetLatestBuildFromS3(IAsynchronousRequest request, bool checkDailyBuilds) { XNamespace ns = "http://s3.amazonaws.com/doc/2006-03-01/"; XDocument doc = null; using (TextReader td = new StringReader(request.Data)) { try { doc = XDocument.Load(td); } catch (Exception e) { OnLog(new LogEventArgs(e, LogLevel.Console)); return(null); } } // Reads filenames from S3, and pulls out those which include // DynamoInstall, and optionally, those that include DynamoDailyInstall. // Order the results according to their LastUpdated field. var bucketresult = doc.Element(ns + "ListBucketResult"); if (bucketresult == null) { return(null); } var builds = bucketresult.Descendants(ns + "LastModified"). OrderByDescending(x => DateTime.Parse(x.Value)). Where(x => x.Parent.Value.Contains(INSTALL_NAME_BASE) || x.Parent.Value.Contains(OLD_DAILY_INSTALL_NAME_BASE)). Select(x => x.Parent); var xElements = builds as XElement[] ?? builds.ToArray(); if (!xElements.Any()) { return(null); } var fileNames = xElements.Select(x => x.Element(ns + "Key").Value); string latestBuild = string.Empty; latestBuild = checkDailyBuilds ? fileNames.FirstOrDefault(x => IsDailyBuild(INSTALL_NAME_BASE, x) || IsDailyBuild(OLD_DAILY_INSTALL_NAME_BASE, x)) : fileNames.FirstOrDefault(x => IsStableBuild(INSTALL_NAME_BASE, x)); return(latestBuild); }
/// <summary> /// Async call to request the update version info from the web. /// This call raises UpdateFound event notification, if an update is /// found. /// </summary> public void CheckForProductUpdate(IAsynchronousRequest request) { OnLog(new LogEventArgs("RequestUpdateVersionInfo", LogLevel.File)); OnLog(new LogEventArgs(Properties.Resources.RequestingVersionUpdate, LogLevel.Console)); if (versionCheckInProgress) { return; } versionCheckInProgress = true; }
/// <summary> /// Get the file name of the latest build on S3 /// </summary> /// <param name="request"></param> /// <returns></returns> private string GetLatestBuildFromS3(IAsynchronousRequest request, bool checkDailyBuilds) { XNamespace ns = "http://s3.amazonaws.com/doc/2006-03-01/"; XDocument doc = null; using (TextReader td = new StringReader(request.Data)) { try { doc = XDocument.Load(td); } catch (Exception e) { OnLog(new LogEventArgs(e, LogLevel.Console)); return null; } } // Reads filenames from S3, and pulls out those which include // DynamoInstall, and optionally, those that include DynamoDailyInstall. // Order the results according to their LastUpdated field. var bucketresult = doc.Element(ns + "ListBucketResult"); if (bucketresult == null) { return null; } var builds = bucketresult.Descendants(ns + "LastModified"). OrderByDescending(x => DateTime.Parse(x.Value)). Where(x => x.Parent.Value.Contains(Configuration.InstallerNameBase) || x.Parent.Value.Contains(OLD_DAILY_INSTALL_NAME_BASE)). Select(x => x.Parent); var xElements = builds as XElement[] ?? builds.ToArray(); if (!xElements.Any()) { return null; } var fileNames = xElements.Select(x => x.Element(ns + "Key").Value); string latestBuild = string.Empty; latestBuild = checkDailyBuilds ? fileNames.FirstOrDefault(x => IsDailyBuild(Configuration.InstallerNameBase, x) || IsDailyBuild(OLD_DAILY_INSTALL_NAME_BASE, x)) : fileNames.FirstOrDefault(x => IsStableBuild(Configuration.InstallerNameBase, x)); return latestBuild; }
/// <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)) { OnLog(new LogEventArgs(String.Format(Properties.Resources.CouldNotGetUpdateData, request.Path), LogLevel.Console)); versionCheckInProgress = false; return; } var latestBuildFilePath = GetLatestBuildFromS3(request, CheckNewerDailyBuilds); if (string.IsNullOrEmpty(latestBuildFilePath)) { OnLog(new LogEventArgs(Properties.Resources.CouldNotGetLatestBuild, LogLevel.Console)); versionCheckInProgress = false; return; } // Strip the build number from the file name. // DynamoInstall0.7.0 becomes 0.7.0. Build a version // and compare it with the current product version. var latestBuildDownloadUrl = Path.Combine(Configuration.DownloadSourcePath, latestBuildFilePath); var latestBuildSignatureUrl = Path.Combine( Configuration.SignatureSourcePath, Path.GetFileNameWithoutExtension(latestBuildFilePath) + ".sig"); BinaryVersion latestBuildVersion; var latestBuildTime = new DateTime(); bool useStable = false; if (IsStableBuild(Configuration.InstallerNameBase, latestBuildFilePath)) { useStable = true; latestBuildVersion = GetBinaryVersionFromFilePath(Configuration.InstallerNameBase, latestBuildFilePath); } else if (IsDailyBuild(Configuration.InstallerNameBase, latestBuildFilePath) || IsDailyBuild(OLD_DAILY_INSTALL_NAME_BASE, latestBuildFilePath)) { latestBuildTime = GetBuildTimeFromFilePath(Configuration.InstallerNameBase, latestBuildFilePath); latestBuildVersion = GetCurrentBinaryVersion(); } else { OnLog(new LogEventArgs(Properties.Resources.PathNotRegconizableAsStableOrDailyBuild, LogLevel.Console)); versionCheckInProgress = false; return; } // Check the last downloaded update. If it's the same or newer as the // one found on S3, then just set the update information to that one // and bounce. //if (ExistingUpdateIsNewer()) //{ // logger.Log(string.Format("Using previously updated download {0}", dynamoModel.PreferenceSettings.LastUpdateDownloadPath)); // UpdateDownloaded(this, new UpdateDownloadedEventArgs(null, UpdateFileLocation)); // versionCheckInProgress = false; // return; //} // Install the latest update regardless of whether it // is newer than the current build. if (ForceUpdate) { SetUpdateInfo(latestBuildVersion, latestBuildDownloadUrl, latestBuildSignatureUrl); } else { if (useStable) //Check stables { if (latestBuildVersion > ProductVersion) { SetUpdateInfo(latestBuildVersion, latestBuildDownloadUrl, latestBuildSignatureUrl); } else { OnLog(new LogEventArgs(Properties.Resources.DynamoUpToDate, LogLevel.Console)); } } else // Check dailies { if (latestBuildTime > DateTime.Now) { SetUpdateInfo(GetCurrentBinaryVersion(), latestBuildDownloadUrl, latestBuildSignatureUrl); } else { OnLog(new LogEventArgs(Properties.Resources.DynamoUpToDate, LogLevel.Console)); } } } versionCheckInProgress = false; }
/// <summary> /// Async call to request the update version info from the web. /// This call raises UpdateFound event notification, if an update is /// found. /// </summary> public void CheckForProductUpdate(IAsynchronousRequest request) { OnLog(new LogEventArgs("RequestUpdateVersionInfo", LogLevel.File)); OnLog(new LogEventArgs(Properties.Resources.RequestingVersionUpdate, LogLevel.Console)); if (versionCheckInProgress) return; versionCheckInProgress = true; }
/// <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)) { OnLog(new LogEventArgs(String.Format(Properties.Resources.CouldNotGetUpdateData, request.Path), LogLevel.Console)); versionCheckInProgress = false; return; } var latestBuildFilePath = GetLatestBuildFromS3(request, CheckNewerDailyBuilds); if (string.IsNullOrEmpty(latestBuildFilePath)) { OnLog(new LogEventArgs(Properties.Resources.CouldNotGetLatestBuild, LogLevel.Console)); versionCheckInProgress = false; return; } // Strip the build number from the file name. // DynamoInstall0.7.0 becomes 0.7.0. Build a version // and compare it with the current product version. var latestBuildDownloadUrl = Path.Combine(Configuration.DownloadSourcePath, latestBuildFilePath); var latestBuildSignatureUrl = Path.Combine( Configuration.SignatureSourcePath, Path.GetFileNameWithoutExtension(latestBuildFilePath) + ".sig"); BinaryVersion latestBuildVersion; var latestBuildTime = new DateTime(); bool useStable = false; if (IsStableBuild(INSTALL_NAME_BASE, latestBuildFilePath)) { useStable = true; latestBuildVersion = GetBinaryVersionFromFilePath(INSTALL_NAME_BASE, latestBuildFilePath); } else if (IsDailyBuild(INSTALL_NAME_BASE, latestBuildFilePath) || IsDailyBuild(OLD_DAILY_INSTALL_NAME_BASE, latestBuildFilePath)) { latestBuildTime = GetBuildTimeFromFilePath(INSTALL_NAME_BASE, latestBuildFilePath); latestBuildVersion = GetCurrentBinaryVersion(); } else { OnLog(new LogEventArgs(Properties.Resources.PathNotRegconizableAsStableOrDailyBuild, LogLevel.Console)); versionCheckInProgress = false; return; } // Check the last downloaded update. If it's the same or newer as the // one found on S3, then just set the update information to that one // and bounce. //if (ExistingUpdateIsNewer()) //{ // logger.Log(string.Format("Using previously updated download {0}", dynamoModel.PreferenceSettings.LastUpdateDownloadPath)); // UpdateDownloaded(this, new UpdateDownloadedEventArgs(null, UpdateFileLocation)); // versionCheckInProgress = false; // return; //} // Install the latest update regardless of whether it // is newer than the current build. if (ForceUpdate) { SetUpdateInfo(latestBuildVersion, latestBuildDownloadUrl, latestBuildSignatureUrl); } else { if (useStable) //Check stables { if (latestBuildVersion > ProductVersion) { SetUpdateInfo(latestBuildVersion, latestBuildDownloadUrl, latestBuildSignatureUrl); } else { OnLog(new LogEventArgs(Properties.Resources.DynamoUpToDate, LogLevel.Console)); } } else // Check dailies { if (latestBuildTime > DateTime.Now) { SetUpdateInfo(GetCurrentBinaryVersion(), latestBuildDownloadUrl, latestBuildSignatureUrl); } else { OnLog(new LogEventArgs(Properties.Resources.DynamoUpToDate, LogLevel.Console)); } } } versionCheckInProgress = false; }
/// <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; } var latestBuildFilePath = GetLatestBuildFromS3(request, CheckNewerDailyBuilds); if (string.IsNullOrEmpty(latestBuildFilePath)) { versionCheckInProgress = false; return; } // Strip the build number from the file name. // DynamoInstall0.7.0 becomes 0.7.0. Build a version // and compare it with the current product version. var latestBuildDownloadUrl = Path.Combine(Configurations.UpdateDownloadLocation, latestBuildFilePath); var latestBuildSignatureUrl = Path.Combine( Configurations.UpdateSignatureLocation, Path.GetFileNameWithoutExtension(latestBuildFilePath) + ".sig"); BinaryVersion latestBuildVersion; var latestBuildTime = new DateTime(); bool useStable = false; if (IsStableBuild(InstallNameBase, latestBuildFilePath)) { useStable = true; latestBuildVersion = GetBinaryVersionFromFilePath(InstallNameBase, latestBuildFilePath); } else if (IsDailyBuild(InstallNameBase, latestBuildFilePath) || IsDailyBuild(OldDailyInstallNameBase, latestBuildFilePath)) { latestBuildTime = GetBuildTimeFromFilePath(InstallNameBase, latestBuildFilePath); latestBuildVersion = GetCurrentBinaryVersion(); } else { logger.Log("The specified file path is not recognizable as a stable or a daily build"); versionCheckInProgress = false; return; } // Check the last downloaded update. If it's the same or newer as the // one found on S3, then just set the update information to that one // and bounce. //if (ExistingUpdateIsNewer()) //{ // logger.Log(string.Format("Using previously updated download {0}", dynSettings.Controller.PreferenceSettings.LastUpdateDownloadPath)); // UpdateDownloaded(this, new UpdateDownloadedEventArgs(null, UpdateFileLocation)); // versionCheckInProgress = false; // return; //} // Install the latest update regardless of whether it // is newer than the current build. if (ForceUpdate) { SetUpdateInfo(latestBuildVersion, latestBuildDownloadUrl, latestBuildSignatureUrl); } else { if (useStable) //Check stables { if (latestBuildVersion > ProductVersion) { SetUpdateInfo(latestBuildVersion, latestBuildDownloadUrl, latestBuildSignatureUrl); } else { logger.Log("Dynamo is up to date."); } } else // Check dailies { if (latestBuildTime > DateTime.Now) { SetUpdateInfo(GetCurrentBinaryVersion(), latestBuildDownloadUrl, latestBuildSignatureUrl); } else { logger.Log("Dynamo is up to date."); } } } versionCheckInProgress = false; }
/// <summary> /// Async call to request the update version info from the web. /// This call raises UpdateFound event notification, if an update is /// found. /// </summary> public void CheckForProductUpdate(IAsynchronousRequest request) { logger.Log("RequestUpdateVersionInfo", LogLevel.File); logger.Log("Requesting version update info..."); if (versionCheckInProgress) return; versionCheckInProgress = true; }
/// <summary> /// Async call to request the update version info from the web. /// This call raises UpdateFound event notification, if an update is /// found. /// </summary> public void CheckForProductUpdate(IAsynchronousRequest request) { _logger.Log("RequestUpdateVersionInfo", "RequestUpdateVersionInfo"); if (_versionCheckInProgress) return; _versionCheckInProgress = true; }