mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-09-07 03:48:06 +02:00
improved update staggering
This commit is contained in:
parent
6d31204bcc
commit
b9ab69f051
2 changed files with 25 additions and 23 deletions
|
@ -282,7 +282,7 @@ namespace MediaBrowser.Common.Implementations
|
||||||
SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths);
|
SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths);
|
||||||
RegisterSingleInstance(SecurityManager);
|
RegisterSingleInstance(SecurityManager);
|
||||||
|
|
||||||
InstallationManager = new InstallationManager(Logger, this, ApplicationPaths, HttpClient, JsonSerializer, SecurityManager, NetworkManager);
|
InstallationManager = new InstallationManager(Logger, this, ApplicationPaths, HttpClient, JsonSerializer, SecurityManager, NetworkManager, ConfigurationManager);
|
||||||
RegisterSingleInstance(InstallationManager);
|
RegisterSingleInstance(InstallationManager);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -560,8 +560,6 @@ namespace MediaBrowser.Common.Implementations
|
||||||
/// <value><c>true</c> if this instance can self update; otherwise, <c>false</c>.</value>
|
/// <value><c>true</c> if this instance can self update; otherwise, <c>false</c>.</value>
|
||||||
public abstract bool CanSelfUpdate { get; }
|
public abstract bool CanSelfUpdate { get; }
|
||||||
|
|
||||||
private Tuple<CheckForUpdateResult, DateTime> _lastUpdateCheckResult;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Checks for update.
|
/// Checks for update.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -571,24 +569,9 @@ namespace MediaBrowser.Common.Implementations
|
||||||
public async Task<CheckForUpdateResult> CheckForApplicationUpdate(CancellationToken cancellationToken,
|
public async Task<CheckForUpdateResult> CheckForApplicationUpdate(CancellationToken cancellationToken,
|
||||||
IProgress<double> progress)
|
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);
|
var result = await CheckForApplicationUpdateInternal(cancellationToken, progress).ConfigureAwait(false);
|
||||||
|
|
||||||
_lastUpdateCheckResult = new Tuple<CheckForUpdateResult, DateTime>(result, DateTime.UtcNow);
|
return result;
|
||||||
|
|
||||||
return _lastUpdateCheckResult.Item1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -600,7 +583,7 @@ namespace MediaBrowser.Common.Implementations
|
||||||
private async Task<CheckForUpdateResult> CheckForApplicationUpdateInternal(CancellationToken cancellationToken,
|
private async Task<CheckForUpdateResult> CheckForApplicationUpdateInternal(CancellationToken cancellationToken,
|
||||||
IProgress<double> progress)
|
IProgress<double> progress)
|
||||||
{
|
{
|
||||||
var availablePackages = await InstallationManager.GetAvailablePackagesWithoutRegistrationInfo(CancellationToken.None).ConfigureAwait(false);
|
var availablePackages = await InstallationManager.GetAvailablePackagesWithoutRegistrationInfo(cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
var version = InstallationManager.GetLatestCompatibleVersion(availablePackages, ApplicationUpdatePackageName, ConfigurationManager.CommonConfiguration.SystemUpdateLevel);
|
var version = InstallationManager.GetLatestCompatibleVersion(availablePackages, ApplicationUpdatePackageName, ConfigurationManager.CommonConfiguration.SystemUpdateLevel);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using System.Security.Cryptography;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Common.Configuration;
|
|
||||||
using MediaBrowser.Common.Events;
|
using MediaBrowser.Common.Events;
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Common.Net;
|
||||||
using MediaBrowser.Common.Plugins;
|
using MediaBrowser.Common.Plugins;
|
||||||
|
@ -14,6 +13,7 @@ using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Security.Cryptography;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
@ -104,6 +104,7 @@ namespace MediaBrowser.Common.Implementations.Updates
|
||||||
private readonly IJsonSerializer _jsonSerializer;
|
private readonly IJsonSerializer _jsonSerializer;
|
||||||
private readonly ISecurityManager _securityManager;
|
private readonly ISecurityManager _securityManager;
|
||||||
private readonly INetworkManager _networkManager;
|
private readonly INetworkManager _networkManager;
|
||||||
|
private readonly IConfigurationManager _config;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the application host.
|
/// Gets the application host.
|
||||||
|
@ -111,7 +112,7 @@ namespace MediaBrowser.Common.Implementations.Updates
|
||||||
/// <value>The application host.</value>
|
/// <value>The application host.</value>
|
||||||
private readonly IApplicationHost _applicationHost;
|
private readonly IApplicationHost _applicationHost;
|
||||||
|
|
||||||
public InstallationManager(ILogger logger, IApplicationHost appHost, IApplicationPaths appPaths, IHttpClient httpClient, IJsonSerializer jsonSerializer, ISecurityManager securityManager, INetworkManager networkManager)
|
public InstallationManager(ILogger logger, IApplicationHost appHost, IApplicationPaths appPaths, IHttpClient httpClient, IJsonSerializer jsonSerializer, ISecurityManager securityManager, INetworkManager networkManager, IConfigurationManager config)
|
||||||
{
|
{
|
||||||
if (logger == null)
|
if (logger == null)
|
||||||
{
|
{
|
||||||
|
@ -127,6 +128,7 @@ namespace MediaBrowser.Common.Implementations.Updates
|
||||||
_jsonSerializer = jsonSerializer;
|
_jsonSerializer = jsonSerializer;
|
||||||
_securityManager = securityManager;
|
_securityManager = securityManager;
|
||||||
_networkManager = networkManager;
|
_networkManager = networkManager;
|
||||||
|
_config = config;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,6 +155,8 @@ namespace MediaBrowser.Common.Implementations.Updates
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Tuple<List<PackageInfo>, DateTime> _lastPackageListResult;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets all available packages.
|
/// Gets all available packages.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -164,12 +168,27 @@ namespace MediaBrowser.Common.Implementations.Updates
|
||||||
PackageType? packageType = null,
|
PackageType? packageType = null,
|
||||||
Version applicationVersion = null)
|
Version applicationVersion = null)
|
||||||
{
|
{
|
||||||
|
if (_lastPackageListResult != null)
|
||||||
|
{
|
||||||
|
// Let dev users get results more often for testing purposes
|
||||||
|
var cacheLength = _config.CommonConfiguration.SystemUpdateLevel == PackageVersionClass.Dev
|
||||||
|
? TimeSpan.FromMinutes(10)
|
||||||
|
: TimeSpan.FromHours(12);
|
||||||
|
|
||||||
|
if ((DateTime.UtcNow - _lastPackageListResult.Item2) < cacheLength)
|
||||||
|
{
|
||||||
|
return _lastPackageListResult.Item1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
using (var json = await _httpClient.Get(Constants.Constants.MbAdminUrl + "service/MB3Packages.json", cancellationToken).ConfigureAwait(false))
|
using (var json = await _httpClient.Get(Constants.Constants.MbAdminUrl + "service/MB3Packages.json", cancellationToken).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
var packages = _jsonSerializer.DeserializeFromStream<List<PackageInfo>>(json).ToList();
|
var packages = _jsonSerializer.DeserializeFromStream<List<PackageInfo>>(json).ToList();
|
||||||
|
|
||||||
|
_lastPackageListResult = new Tuple<List<PackageInfo>, DateTime>(packages, DateTime.UtcNow);
|
||||||
|
|
||||||
return FilterPackages(packages, packageType, applicationVersion);
|
return FilterPackages(packages, packageType, applicationVersion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue