Used to describe a particular release version of fCraft. Includes date released, version
Exemplo n.º 1
0
 internal UpdaterResult( bool updateAvailable, Uri downloadUri, ReleaseInfo[] releases ) {
     UpdateAvailable = updateAvailable;
     DownloadUri = downloadUri;
     History = releases.OrderByDescending( r => r.Revision ).ToArray();
     LatestRelease = releases.FirstOrDefault();
 }
Exemplo n.º 2
0
        /// <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);
            }
        }