Files
FeedCenter/VersionCheck.cs
2014-07-14 17:38:14 -04:00

132 lines
4.4 KiB
C#

using Common.Debug;
using FeedCenter.Properties;
using System;
using System.ComponentModel;
using System.Deployment.Application;
using System.Windows;
using Application = System.Windows.Forms.Application;
namespace FeedCenter
{
internal static class VersionCheck
{
public static void DisplayUpdateInformation(bool showIfCurrent)
{
if (!ApplicationDeployment.IsNetworkDeployed)
return;
UpdateCheckInfo updateCheckInfo = null;
try
{
updateCheckInfo = ApplicationDeployment.CurrentDeployment.CheckForDetailedUpdate(false);
}
catch (Exception exception)
{
Tracer.WriteException(exception);
}
DisplayUpdateInformation(updateCheckInfo, showIfCurrent);
}
public static void DisplayUpdateInformation(UpdateCheckInfo updateCheckInfo, bool showIfCurrent)
{
// If we didn't get any information then do nothing
if (updateCheckInfo == null)
return;
// Check for an update
if (updateCheckInfo.UpdateAvailable)
{
// Load the version string from the server
Version serverVersion = updateCheckInfo.AvailableVersion;
// Format the check title
string updateCheckTitle = string.Format(Resources.UpdateCheckTitle, Resources.ApplicationDisplayName);
// Format the message
string updateCheckMessage = string.Format(Resources.UpdateCheckNewVersion, Resources.ApplicationDisplayName, serverVersion);
// Ask the user to update
if (MessageBox.Show(updateCheckMessage, updateCheckTitle, MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes)
return;
// Get the update
ApplicationDeployment.CurrentDeployment.Update();
// Set to restart
((App) System.Windows.Application.Current).Restart = true;
// Restart the application
System.Windows.Application.Current.Shutdown();
}
else if (showIfCurrent)
{
// Format the check title
string updateCheckTitle = string.Format(Resources.UpdateCheckTitle, Resources.ApplicationDisplayName);
// Format the message
string updateCheckMessage = string.Format(Resources.UpdateCheckCurrent, Resources.ApplicationDisplayName);
MessageBox.Show(updateCheckMessage, updateCheckTitle, MessageBoxButton.OK, MessageBoxImage.Information);
}
}
#region Background checking
private static BackgroundWorker _backgroundWorker;
public static void DisplayUpdateInformationAsync()
{
// Do nothing if we already have a worker
if (_backgroundWorker != null)
return;
// Create a new worker
_backgroundWorker = new BackgroundWorker();
// Setup worker events
_backgroundWorker.DoWork += HandleBackgroundWorkerDoWork;
_backgroundWorker.RunWorkerCompleted += HandleBackgroundWorkerCompleted;
// Run the worker
_backgroundWorker.RunWorkerAsync();
// Wait for the worker
while (_backgroundWorker.IsBusy)
Application.DoEvents();
// Clear out the worker
_backgroundWorker.Dispose();
_backgroundWorker = null;
}
static void HandleBackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
{
// If the application isn't installed then do nothing
if (!ApplicationDeployment.IsNetworkDeployed)
return;
e.Result = null;
try
{
// Get the update information and set it into the result
e.Result = ApplicationDeployment.CurrentDeployment.CheckForDetailedUpdate(false);
}
catch (Exception exception)
{
Tracer.WriteException(exception);
}
}
private static void HandleBackgroundWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// Display any update info
DisplayUpdateInformation(e.Result as UpdateCheckInfo, false);
}
#endregion
}
}