internal UpdaterResult( bool updateAvailable, Uri downloadUri, ReleaseInfo[] releases ) { UpdateAvailable = updateAvailable; DownloadUri = downloadUri; History = releases.OrderByDescending( r => r.Revision ).ToArray(); LatestRelease = releases.FirstOrDefault(); }
/// <summary> Checks fCraft.net for updated versions of fCraft. </summary> public static UpdaterResult CheckForUpdates() { UpdaterMode mode = ConfigKey.UpdaterMode.GetEnum <UpdaterMode>(); if (mode == UpdaterMode.Disabled) { return(UpdaterResult.NoUpdate); } string url = String.Format(UpdateUri, CurrentRelease.Revision); if (RaiseCheckingForUpdatesEvent(ref url)) { return(UpdaterResult.NoUpdate); } Logger.Log(LogType.SystemActivity, "Checking for fCraft updates..."); try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; request.Timeout = (int)UpdateCheckTimeout.TotalMilliseconds; request.ReadWriteTimeout = (int)UpdateCheckTimeout.TotalMilliseconds; request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.BypassCache); request.UserAgent = UserAgent; using (WebResponse response = request.GetResponse()) { // ReSharper disable AssignNullToNotNullAttribute using (XmlTextReader reader = new XmlTextReader(response.GetResponseStream())) { // ReSharper restore AssignNullToNotNullAttribute XDocument doc = XDocument.Load(reader); XElement root = doc.Root; // ReSharper disable PossibleNullReferenceException if (root.Attribute("result").Value == "update") { string downloadUrl = root.Attribute("url").Value; var releases = new List <ReleaseInfo>(); foreach (XElement el in root.Elements("Release")) { releases.Add( new ReleaseInfo( Int32.Parse(el.Attribute("v").Value), Int32.Parse(el.Attribute("r").Value), Int64.Parse(el.Attribute("date").Value).ToDateTime(), el.Element("Summary").Value, el.Element("ChangeLog").Value, ReleaseInfo.StringToReleaseFlags(el.Attribute("flags").Value) ) ); } // ReSharper restore PossibleNullReferenceException UpdaterResult result = new UpdaterResult((releases.Count > 0), new Uri(downloadUrl), releases.ToArray()); RaiseCheckedForUpdatesEvent(UpdateUri, result); return(result); } else { return(UpdaterResult.NoUpdate); } } } } catch (Exception ex) { Logger.Log(LogType.Error, "An error occurred while trying to check for updates: {0}: {1}", ex.GetType(), ex.Message); return(UpdaterResult.NoUpdate); } }