From 868a7ce9c8b50bd64c8b5ae33fec77abfd25ef7c Mon Sep 17 00:00:00 2001 From: LukePulverenti Date: Thu, 21 Feb 2013 23:23:06 -0500 Subject: isolated clickonce dependancies --- MediaBrowser.ClickOnce/ApplicationUpdateCheck.cs | 106 +++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 MediaBrowser.ClickOnce/ApplicationUpdateCheck.cs (limited to 'MediaBrowser.ClickOnce/ApplicationUpdateCheck.cs') diff --git a/MediaBrowser.ClickOnce/ApplicationUpdateCheck.cs b/MediaBrowser.ClickOnce/ApplicationUpdateCheck.cs new file mode 100644 index 000000000..72c42f586 --- /dev/null +++ b/MediaBrowser.ClickOnce/ApplicationUpdateCheck.cs @@ -0,0 +1,106 @@ +using MediaBrowser.Model.Updates; +using System; +using System.Deployment.Application; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.ClickOnce +{ + /// + /// Class ApplicationUpdateCheck + /// + public class ApplicationUpdateCheck + { + /// + /// The _task completion source + /// + private TaskCompletionSource _taskCompletionSource; + + /// + /// The _progress + /// + private IProgress _progress; + + /// + /// Checks for application update. + /// + /// The cancellation token. + /// The progress. + /// Task{CheckForUpdateCompletedEventArgs}. + /// Current deployment is not a ClickOnce deployment + public Task CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress progress) + { + if (!ApplicationDeployment.IsNetworkDeployed) + { + throw new InvalidOperationException("Current deployment is not network deployed."); + } + + _progress = progress; + + _taskCompletionSource = new TaskCompletionSource(); + + var deployment = ApplicationDeployment.CurrentDeployment; + + cancellationToken.Register(deployment.CheckForUpdateAsyncCancel); + + cancellationToken.ThrowIfCancellationRequested(); + + deployment.CheckForUpdateCompleted += deployment_CheckForUpdateCompleted; + deployment.CheckForUpdateProgressChanged += deployment_CheckForUpdateProgressChanged; + + deployment.CheckForUpdateAsync(); + + return _taskCompletionSource.Task; + } + + /// + /// To the result. + /// + /// The instance containing the event data. + /// CheckForUpdateResult. + private CheckForUpdateResult ToResult(CheckForUpdateCompletedEventArgs args) + { + return new CheckForUpdateResult + { + AvailableVersion = args.AvailableVersion, + IsUpdateAvailable = args.UpdateAvailable + }; + } + + /// + /// Handles the CheckForUpdateCompleted event of the deployment control. + /// + /// The source of the event. + /// The instance containing the event data. + void deployment_CheckForUpdateCompleted(object sender, CheckForUpdateCompletedEventArgs e) + { + var deployment = ApplicationDeployment.CurrentDeployment; + + deployment.CheckForUpdateCompleted -= deployment_CheckForUpdateCompleted; + deployment.CheckForUpdateProgressChanged -= deployment_CheckForUpdateProgressChanged; + + if (e.Error != null) + { + _taskCompletionSource.SetException(e.Error); + } + else if (e.Cancelled) + { + _taskCompletionSource.SetCanceled(); + } + else + { + _taskCompletionSource.SetResult(ToResult(e)); + } + } + + /// + /// Handles the CheckForUpdateProgressChanged event of the deployment control. + /// + /// The source of the event. + /// The instance containing the event data. + void deployment_CheckForUpdateProgressChanged(object sender, DeploymentProgressChangedEventArgs e) + { + _progress.Report(e.ProgressPercentage); + } + } +} -- cgit v1.2.3