/// <summary> /// Skips the received release. /// </summary> /// <param name="releaseID">Release ID to skip.</param> public static void SkipRelease(int releaseID) { // Get AddIn configuration AddInConfig addInConfig = ConfigurationHelper.GetAddInConfig(); // Check if the release was not already skipped if (addInConfig.SkippedReleases.Contains(releaseID) == false) { // Add the release to the skipped releases collection addInConfig.SkippedReleases.Add(releaseID); // Save AddIn configuration ConfigurationHelper.SaveAddInConfig(addInConfig); } }
/// <summary> /// Marks this release as rated. /// </summary> public static void MarkReleaseAsRated() { try { AddInConfig addInConfig = ConfigurationHelper.GetAddInConfig(); addInConfig.IsReleaseRated = true; ConfigurationHelper.SaveAddInConfig(addInConfig); } catch (Exception ex) { LogManager.LogError(ex); throw; } }
/// <summary> /// Saves the received EntitiesToDTOs AddIn general configuration. /// </summary> /// <param name="addInConfig">Configuration to save.</param> public static void SaveAddInConfig(AddInConfig addInConfig) { // Update config ConfigurationHelper.AddInConfig = addInConfig; // Generate general configuration file var configDoc = new XDocument(); configDoc.Add( new XElement(AddInConfigNodes.Root, new XElement(AddInConfigNodes.Updates, new XAttribute(AddInConfigNodes.UpdatesAttrStable, addInConfig.ReleaseStatusFilter.Contains(ReleaseStatus.Stable)), new XAttribute(AddInConfigNodes.UpdatesAttrBeta, addInConfig.ReleaseStatusFilter.Contains(ReleaseStatus.Beta)), new XElement(AddInConfigNodes.Skipped) ), new XElement(AddInConfigNodes.RateInfo, new XAttribute(AddInConfigNodes.RateInfoAttrReleaseID, addInConfig.RateReleaseID), new XAttribute(AddInConfigNodes.RateInfoAttrIsRated, addInConfig.IsReleaseRated), new XAttribute(AddInConfigNodes.RateInfoAttrLastAskedDate, addInConfig.LastRateAskedDate.ToString("yyyyMMdd")) ) ) ); if (addInConfig.SkippedReleases.Count > 0) { // Get skipped releases node XElement skippedReleasesNode = configDoc.Descendants(AddInConfigNodes.Skipped).First(); // Add skipped releases foreach (int releaseID in addInConfig.SkippedReleases) { skippedReleasesNode.Add(new XElement(AddInConfigNodes.Release, new XAttribute(AddInConfigNodes.ReleaseAttrID, releaseID))); } } // Save general configuration file configDoc.Save(ConfigurationHelper.AddInConfigFilePath); }
/// <summary> /// Checks if a release rate is pending. If a rate is pending, it updates the LastRateAskedDate of the /// AddIn config assuming the user will be asked to rate the release. /// </summary> /// <returns></returns> public static bool IsReleaseRatePending() { try { bool isRatePending = false; AddInConfig addInConfig = ConfigurationHelper.GetAddInConfig(); if (addInConfig.RateReleaseID != AssemblyHelper.VersionInfo.ReleaseID) { // User has changed the AddIn version addInConfig.RateReleaseID = AssemblyHelper.VersionInfo.ReleaseID; addInConfig.IsReleaseRated = false; addInConfig.LastRateAskedDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); ConfigurationHelper.SaveAddInConfig(addInConfig); } if (addInConfig.IsReleaseRated == false) { // Have we waited to ask again? if ((DateTime.Now - addInConfig.LastRateAskedDate).TotalDays >= 1) { isRatePending = true; addInConfig.LastRateAskedDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); ConfigurationHelper.SaveAddInConfig(addInConfig); } } return(isRatePending); } catch (Exception ex) { LogManager.LogError(ex); throw; } }
/// <summary> /// Gets the EntitiesToDTOs AddIn general configuration. /// </summary> /// <returns></returns> public static AddInConfig GetAddInConfig(bool forceLoad = false) { if (forceLoad == true) { ConfigurationHelper.AddInConfig = new AddInConfig(); if (File.Exists(ConfigurationHelper.AddInConfigFilePath) == false) { // Set default configuration ConfigurationHelper.AddInConfig.ReleaseStatusFilter.Add(ReleaseStatus.Stable); ConfigurationHelper.AddInConfig.ReleaseStatusFilter.Add(ReleaseStatus.Beta); ConfigurationHelper.AddInConfig.RateReleaseID = AssemblyHelper.VersionInfo.ReleaseID; ConfigurationHelper.SaveAddInConfig(ConfigurationHelper.AddInConfig); } else { XDocument configDoc = XDocument.Load(ConfigurationHelper.AddInConfigFilePath); XElement updatesNode = configDoc.Descendants(AddInConfigNodes.Updates).First(); // Set Stable release status filter if checked if (Convert.ToBoolean(updatesNode.Attribute(AddInConfigNodes.UpdatesAttrStable).Value) == true) { ConfigurationHelper.AddInConfig.ReleaseStatusFilter.Add(ReleaseStatus.Stable); } // Set Beta release status filter if checked if (Convert.ToBoolean(updatesNode.Attribute(AddInConfigNodes.UpdatesAttrBeta).Value) == true) { ConfigurationHelper.AddInConfig.ReleaseStatusFilter.Add(ReleaseStatus.Beta); } // Get skipped releases IEnumerable <XElement> skippedReleases = updatesNode.Descendants(AddInConfigNodes.Release); foreach (XElement release in skippedReleases) { ConfigurationHelper.AddInConfig.SkippedReleases.Add( Convert.ToInt32(release.Attribute(AddInConfigNodes.ReleaseAttrID).Value)); } XElement rateInfoNode = configDoc.Descendants(AddInConfigNodes.RateInfo).FirstOrDefault(); if (rateInfoNode == null) { // Old AddIn config where rate info node is missing ConfigurationHelper.AddInConfig.RateReleaseID = AssemblyHelper.VersionInfo.ReleaseID; ConfigurationHelper.SaveAddInConfig(ConfigurationHelper.AddInConfig); } else { ConfigurationHelper.AddInConfig.RateReleaseID = Convert.ToInt32( rateInfoNode.Attribute(AddInConfigNodes.RateInfoAttrReleaseID).Value); ConfigurationHelper.AddInConfig.IsReleaseRated = (rateInfoNode.Attribute(AddInConfigNodes.RateInfoAttrIsRated).Value == Resources.XmlBoolTrue); string lastRateAskedDateValue = rateInfoNode.Attribute(AddInConfigNodes.RateInfoAttrLastAskedDate).Value; if (lastRateAskedDateValue.Length > 8) { // Correct previous versions invalid last rate asked date. lastRateAskedDateValue = DateTime.Now.ToString("yyyyMMdd"); ConfigurationHelper.SaveAddInConfig(ConfigurationHelper.AddInConfig); } int lastRateAskedYear = Convert.ToInt32(lastRateAskedDateValue.Substring(0, 4)); int lastRateAskedMonth = Convert.ToInt32(lastRateAskedDateValue.Substring(4, 2)); int lastRateAskedDay = Convert.ToInt32(lastRateAskedDateValue.Substring(6, 2)); ConfigurationHelper.AddInConfig.LastRateAskedDate = new DateTime(lastRateAskedYear, lastRateAskedMonth, lastRateAskedDay); } } } // Return general configuration return(ConfigurationHelper.AddInConfig); }
/// <summary> /// Checks if a new release exists based on current version. /// </summary> /// <param name="statusFilter">Release status filter.</param> /// <returns></returns> public static Release CheckNewRelease(List <ReleaseStatus> statusFilter) { try { // Get current version string currentVersion = AssemblyHelper.Version; // Get available releases document XDocument xdoc = XDocument.Load(Resources.ReleasesURL); // Transform release status filter to string IEnumerable <string> statusFilterValues = statusFilter.Select(s => s.ToString().ToLower()); // Get releases filtered by release status IEnumerable <XElement> releases = xdoc.Descendants(ReleasesNodes.Release) .Where(n => statusFilterValues.Contains( n.Attribute(ReleasesNodes.ReleaseAttrStatus).Value.ToLower()) ); // Get latest release node XElement latestReleaseNode = releases.LastOrDefault(); if (latestReleaseNode == null) { // No releases using the specified status filter return(null); } // Get latest release ID int latestReleaseID = Convert.ToInt32(latestReleaseNode .Attribute(ReleasesNodes.ReleaseAttrID).Value); // Check if it is a newer release if (latestReleaseID <= AssemblyHelper.VersionInfo.ReleaseID) { // Same or old release return(null); } else { // Get AddIn configuration AddInConfig addInConfig = ConfigurationHelper.GetAddInConfig(); // Check if the new release has not been previously skipped by the user if (addInConfig.SkippedReleases.Contains(latestReleaseID) == true) { // The release is newer but was previously skipped by the user return(null); } else { // New release return(new Release() { ReleaseID = Convert.ToInt32(latestReleaseNode.Attribute(ReleasesNodes.ReleaseAttrID).Value), Version = latestReleaseNode.Attribute(ReleasesNodes.ReleaseAttrVersion).Value, Status = UpdateHelper.GetReleaseStatusFromText( latestReleaseNode.Attribute(ReleasesNodes.ReleaseAttrID).Value), Link = latestReleaseNode.Descendants(ReleasesNodes.Link).First() .Attribute(ReleasesNodes.LinkAttrHref).Value, Changes = UpdateHelper.GetChanges(latestReleaseNode) }); } } } catch (Exception ex) { LogManager.LogError(ex); return(null); } }