public static UpdaterResult CheckForUpdates()
{
UpdaterMode mode = ConfigKey.UpdaterMode.GetEnum<UpdaterMode>();
if ( mode == UpdaterMode.Disabled )
return UpdaterResult.NoUpdate;
string url = String.Format( UpdateUrl, CurrentRelease.Revision );
if ( RaiseCheckingForUpdatesEvent( ref url ) )
return UpdaterResult.NoUpdate;
Logger.Log( LogType.SystemActivity, "Checking for 800Craft updates..." );
try {
HttpWebRequest request = ( HttpWebRequest )WebRequest.Create( url );
request.Method = "GET";
request.UserAgent = "800Craft";
request.Timeout = UpdateCheckTimeout;
request.ReadWriteTimeout = UpdateCheckTimeout;
request.CachePolicy = new HttpRequestCachePolicy( HttpRequestCacheLevel.BypassCache );
request.UserAgent = UserAgent;
using ( WebResponse response = request.GetResponse() ) {
// ReSharper disable AssignNullToNotNullAttribute
// ReSharper disable PossibleNullReferenceException
using ( XmlTextReader reader = new XmlTextReader( response.GetResponseStream() ) ) {
// ReSharper restore AssignNullToNotNullAttribute
XDocument doc = XDocument.Load( reader );
XElement root = doc.Root;
if ( root.Attribute( "result" ).Value == "update" ) {
string downloadUrl = root.Attribute( "url" ).Value;
var releases = new List<ReleaseInfo>();
// ReSharper disable LoopCanBeConvertedToQuery
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 LoopCanBeConvertedToQuery
// ReSharper restore PossibleNullReferenceException
UpdaterResult result = new UpdaterResult( ( releases.Count > 0 ), new Uri( downloadUrl ),
releases.ToArray() );
RaiseCheckedForUpdatesEvent( UpdateUrl, result );
return result;
} else {
return UpdaterResult.NoUpdate;
}
}
}
} catch ( Exception ex ) {
Logger.Log( LogType.Error,
"An error occured while trying to check for updates: {0}: {1}",
ex.GetType(), ex.Message );
return UpdaterResult.NoUpdate;
}
}