diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-08-16 14:43:11 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-08-16 14:43:11 -0400 |
| commit | 7c0f97d56b538418ec80bcfbd04f78d22be49eba (patch) | |
| tree | 9209f3516b85d5676185e7ef6d9d1aa66f97adc3 /MediaBrowser.Common.Implementations/BaseApplicationHost.cs | |
| parent | 33eb6bca8806c72ba995ef10c0600c232ba23ece (diff) | |
check for app updates less frequently
Diffstat (limited to 'MediaBrowser.Common.Implementations/BaseApplicationHost.cs')
| -rw-r--r-- | MediaBrowser.Common.Implementations/BaseApplicationHost.cs | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs index 31db86ddf..0bd61dbc2 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs @@ -557,14 +557,59 @@ namespace MediaBrowser.Common.Implementations /// <value><c>true</c> if this instance can self update; otherwise, <c>false</c>.</value> public abstract bool CanSelfUpdate { get; } + private Tuple<CheckForUpdateResult, DateTime> _lastUpdateCheckResult; + /// <summary> /// Checks for update. /// </summary> /// <param name="cancellationToken">The cancellation token.</param> /// <param name="progress">The progress.</param> /// <returns>Task{CheckForUpdateResult}.</returns> - public abstract Task<CheckForUpdateResult> CheckForApplicationUpdate(CancellationToken cancellationToken, - IProgress<double> progress); + public async Task<CheckForUpdateResult> CheckForApplicationUpdate(CancellationToken cancellationToken, + IProgress<double> progress) + { + if (_lastUpdateCheckResult != null) + { + // Let dev users get results more often for testing purposes + var cacheLength = ConfigurationManager.CommonConfiguration.SystemUpdateLevel == PackageVersionClass.Dev + ? TimeSpan.FromHours(1) + : TimeSpan.FromHours(12); + + if ((DateTime.UtcNow - _lastUpdateCheckResult.Item2) < cacheLength) + { + return _lastUpdateCheckResult.Item1; + } + } + + var result = await CheckForApplicationUpdateInternal(cancellationToken, progress).ConfigureAwait(false); + + _lastUpdateCheckResult = new Tuple<CheckForUpdateResult, DateTime>(result, DateTime.UtcNow); + + return _lastUpdateCheckResult.Item1; + } + + /// <summary> + /// Checks for application update internal. + /// </summary> + /// <param name="cancellationToken">The cancellation token.</param> + /// <param name="progress">The progress.</param> + /// <returns>Task{CheckForUpdateResult}.</returns> + private async Task<CheckForUpdateResult> CheckForApplicationUpdateInternal(CancellationToken cancellationToken, + IProgress<double> progress) + { + var availablePackages = await InstallationManager.GetAvailablePackagesWithoutRegistrationInfo(CancellationToken.None).ConfigureAwait(false); + + var version = InstallationManager.GetLatestCompatibleVersion(availablePackages, ApplicationUpdatePackageName, ConfigurationManager.CommonConfiguration.SystemUpdateLevel); + + return version != null ? new CheckForUpdateResult { AvailableVersion = version.version, IsUpdateAvailable = version.version > ApplicationVersion, Package = version } : + new CheckForUpdateResult { AvailableVersion = ApplicationVersion, IsUpdateAvailable = false }; + } + + /// <summary> + /// Gets the name of the application update package. + /// </summary> + /// <value>The name of the application update package.</value> + protected abstract string ApplicationUpdatePackageName { get; } /// <summary> /// Updates the application. |
