using System; using System.Collections.Generic; using NzbDrone.Common.Cloud; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Http; namespace NzbDrone.Core.Update { public interface IUpdatePackageProvider { UpdatePackage GetLatestUpdate(string branch, Version currentVersion); List GetRecentUpdates(string branch, Version currentVersion); } public class UpdatePackageProvider : IUpdatePackageProvider { private readonly IHttpClient _httpClient; private readonly IDroneServicesRequestBuilder _requestBuilder; public UpdatePackageProvider(IHttpClient httpClient, IDroneServicesRequestBuilder requestBuilder) { _httpClient = httpClient; _requestBuilder = requestBuilder; } public UpdatePackage GetLatestUpdate(string branch, Version currentVersion) { var request = _requestBuilder.Build("/update/{branch}"); request.UriBuilder.SetQueryParam("version", currentVersion); request.UriBuilder.SetQueryParam("os", OsInfo.Os.ToString().ToLowerInvariant()); request.AddSegment("branch", branch); var update = _httpClient.Get(request).Resource; if (!update.Available) return null; return update.UpdatePackage; } public List GetRecentUpdates(string branch, Version currentVersion) { var request = _requestBuilder.Build("/update/{branch}/changes"); request.UriBuilder.SetQueryParam("version", currentVersion); request.UriBuilder.SetQueryParam("os", OsInfo.Os.ToString().ToLowerInvariant()); request.AddSegment("branch", branch); var updates = _httpClient.Get>(request); return updates.Resource; } } }