2018-04-21 04:59:31 +00:00
|
|
|
using System;
|
2013-09-28 18:48:30 +00:00
|
|
|
using System.Collections.Generic;
|
2019-10-14 21:42:30 +00:00
|
|
|
using System.Runtime.InteropServices;
|
2014-09-11 23:49:41 +00:00
|
|
|
using NzbDrone.Common.Cloud;
|
2014-03-08 03:00:18 +00:00
|
|
|
using NzbDrone.Common.EnvironmentInfo;
|
2014-09-11 23:49:41 +00:00
|
|
|
using NzbDrone.Common.Http;
|
2019-09-03 02:22:25 +00:00
|
|
|
using NzbDrone.Core.Analytics;
|
2022-03-28 20:45:52 +00:00
|
|
|
using NzbDrone.Core.Datastore;
|
2013-04-13 23:57:10 +00:00
|
|
|
|
|
|
|
namespace NzbDrone.Core.Update
|
|
|
|
{
|
2013-04-15 01:41:39 +00:00
|
|
|
public interface IUpdatePackageProvider
|
2013-04-13 23:57:10 +00:00
|
|
|
{
|
2013-09-11 06:33:47 +00:00
|
|
|
UpdatePackage GetLatestUpdate(string branch, Version currentVersion);
|
2021-01-25 04:33:54 +00:00
|
|
|
List<UpdatePackage> GetRecentUpdates(string branch, Version currentVersion, Version previousVersion = null);
|
2013-04-13 23:57:10 +00:00
|
|
|
}
|
|
|
|
|
2013-04-15 01:41:39 +00:00
|
|
|
public class UpdatePackageProvider : IUpdatePackageProvider
|
2013-04-13 23:57:10 +00:00
|
|
|
{
|
2014-09-11 23:49:41 +00:00
|
|
|
private readonly IHttpClient _httpClient;
|
2016-02-28 15:41:22 +00:00
|
|
|
private readonly IHttpRequestBuilderFactory _requestBuilder;
|
2019-09-03 02:22:25 +00:00
|
|
|
private readonly IPlatformInfo _platformInfo;
|
|
|
|
private readonly IAnalyticsService _analyticsService;
|
2022-03-28 20:45:52 +00:00
|
|
|
private readonly IMainDatabase _mainDatabase;
|
2013-04-13 23:57:10 +00:00
|
|
|
|
2022-03-28 20:45:52 +00:00
|
|
|
public UpdatePackageProvider(IHttpClient httpClient, IRadarrCloudRequestBuilder requestBuilder, IAnalyticsService analyticsService, IPlatformInfo platformInfo, IMainDatabase mainDatabase)
|
2014-09-11 23:49:41 +00:00
|
|
|
{
|
2018-04-21 04:59:31 +00:00
|
|
|
_platformInfo = platformInfo;
|
2019-09-03 02:22:25 +00:00
|
|
|
_analyticsService = analyticsService;
|
2016-02-28 15:41:22 +00:00
|
|
|
_requestBuilder = requestBuilder.Services;
|
2019-09-03 02:22:25 +00:00
|
|
|
_httpClient = httpClient;
|
2022-03-28 20:45:52 +00:00
|
|
|
_mainDatabase = mainDatabase;
|
2014-09-11 23:49:41 +00:00
|
|
|
}
|
2013-09-11 06:33:47 +00:00
|
|
|
|
2014-09-11 23:49:41 +00:00
|
|
|
public UpdatePackage GetLatestUpdate(string branch, Version currentVersion)
|
|
|
|
{
|
2016-02-28 15:41:22 +00:00
|
|
|
var request = _requestBuilder.Create()
|
|
|
|
.Resource("/update/{branch}")
|
|
|
|
.AddQueryParam("version", currentVersion)
|
|
|
|
.AddQueryParam("os", OsInfo.Os.ToString().ToLowerInvariant())
|
2019-10-14 21:42:30 +00:00
|
|
|
.AddQueryParam("arch", RuntimeInformation.OSArchitecture)
|
2022-10-16 01:26:01 +00:00
|
|
|
.AddQueryParam("runtime", "netcore")
|
2018-04-21 04:59:31 +00:00
|
|
|
.AddQueryParam("runtimeVer", _platformInfo.Version)
|
2022-03-28 20:45:52 +00:00
|
|
|
.AddQueryParam("dbType", _mainDatabase.DatabaseType)
|
2019-09-03 02:22:25 +00:00
|
|
|
.SetSegment("branch", branch);
|
|
|
|
|
|
|
|
if (_analyticsService.IsEnabled)
|
|
|
|
{
|
|
|
|
// Send if the system is active so we know which versions to deprecate/ignore
|
|
|
|
request.AddQueryParam("active", _analyticsService.InstallIsActive.ToString().ToLower());
|
|
|
|
}
|
2013-09-11 06:33:47 +00:00
|
|
|
|
2019-09-03 02:22:25 +00:00
|
|
|
var update = _httpClient.Get<UpdatePackageAvailable>(request.Build()).Resource;
|
2013-04-13 23:57:10 +00:00
|
|
|
|
2019-12-22 22:08:53 +00:00
|
|
|
if (!update.Available)
|
|
|
|
{
|
|
|
|
return null;
|
|
|
|
}
|
2013-04-13 23:57:10 +00:00
|
|
|
|
2013-08-24 02:21:12 +00:00
|
|
|
return update.UpdatePackage;
|
2013-04-15 01:41:39 +00:00
|
|
|
}
|
2013-09-28 18:48:30 +00:00
|
|
|
|
2021-01-25 04:33:54 +00:00
|
|
|
public List<UpdatePackage> GetRecentUpdates(string branch, Version currentVersion, Version previousVersion)
|
2013-09-28 18:48:30 +00:00
|
|
|
{
|
2016-02-28 15:41:22 +00:00
|
|
|
var request = _requestBuilder.Create()
|
|
|
|
.Resource("/update/{branch}/changes")
|
|
|
|
.AddQueryParam("version", currentVersion)
|
|
|
|
.AddQueryParam("os", OsInfo.Os.ToString().ToLowerInvariant())
|
2020-11-22 04:12:38 +00:00
|
|
|
.AddQueryParam("arch", RuntimeInformation.OSArchitecture)
|
2022-10-16 01:26:01 +00:00
|
|
|
.AddQueryParam("runtime", "netcore")
|
2018-04-21 04:59:31 +00:00
|
|
|
.AddQueryParam("runtimeVer", _platformInfo.Version)
|
2019-09-03 02:22:25 +00:00
|
|
|
.SetSegment("branch", branch);
|
|
|
|
|
2021-01-25 04:33:54 +00:00
|
|
|
if (previousVersion != null && previousVersion != currentVersion)
|
|
|
|
{
|
|
|
|
request.AddQueryParam("prevVersion", previousVersion);
|
|
|
|
}
|
|
|
|
|
2019-09-03 02:22:25 +00:00
|
|
|
if (_analyticsService.IsEnabled)
|
|
|
|
{
|
|
|
|
// Send if the system is active so we know which versions to deprecate/ignore
|
|
|
|
request.AddQueryParam("active", _analyticsService.InstallIsActive.ToString().ToLower());
|
|
|
|
}
|
2013-09-28 18:48:30 +00:00
|
|
|
|
2019-09-03 02:22:25 +00:00
|
|
|
var updates = _httpClient.Get<List<UpdatePackage>>(request.Build());
|
2013-09-28 18:48:30 +00:00
|
|
|
|
2014-09-11 23:49:41 +00:00
|
|
|
return updates.Resource;
|
2013-09-28 18:48:30 +00:00
|
|
|
}
|
2013-04-13 23:57:10 +00:00
|
|
|
}
|
2019-10-14 21:42:30 +00:00
|
|
|
}
|