This commit is contained in:
Archi
2023-11-14 20:58:02 +01:00
parent 0ae03c7cd5
commit 103c543eea
8 changed files with 153 additions and 126 deletions

View File

@@ -24,6 +24,7 @@ using System.Collections.Generic;
using System.Collections.Immutable;
using System.Globalization;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using ArchiSteamFarm.IPC.Responses;
using ArchiSteamFarm.Localization;
@@ -44,7 +45,9 @@ public sealed class GitHubController : ArchiController {
[ProducesResponseType(typeof(GenericResponse<GitHubReleaseResponse>), (int) HttpStatusCode.OK)]
[ProducesResponseType(typeof(GenericResponse), (int) HttpStatusCode.ServiceUnavailable)]
public async Task<ActionResult<GenericResponse>> GitHubReleaseGet() {
GitHub.ReleaseResponse? releaseResponse = await GitHub.GetLatestRelease(false).ConfigureAwait(false);
CancellationToken cancellationToken = HttpContext.RequestAborted;
GitHub.ReleaseResponse? releaseResponse = await GitHub.GetLatestRelease(false, cancellationToken).ConfigureAwait(false);
return releaseResponse != null ? Ok(new GenericResponse<GitHubReleaseResponse>(new GitHubReleaseResponse(releaseResponse))) : StatusCode((int) HttpStatusCode.ServiceUnavailable, new GenericResponse(false, string.Format(CultureInfo.CurrentCulture, Strings.ErrorRequestFailedTooManyTimes, WebBrowser.MaxTries)));
}
@@ -62,11 +65,13 @@ public sealed class GitHubController : ArchiController {
public async Task<ActionResult<GenericResponse>> GitHubReleaseGet(string version) {
ArgumentException.ThrowIfNullOrEmpty(version);
CancellationToken cancellationToken = HttpContext.RequestAborted;
GitHub.ReleaseResponse? releaseResponse;
switch (version.ToUpperInvariant()) {
case "LATEST":
releaseResponse = await GitHub.GetLatestRelease().ConfigureAwait(false);
releaseResponse = await GitHub.GetLatestRelease(cancellationToken: cancellationToken).ConfigureAwait(false);
break;
default:
@@ -74,7 +79,7 @@ public sealed class GitHubController : ArchiController {
return BadRequest(new GenericResponse(false, string.Format(CultureInfo.CurrentCulture, Strings.ErrorIsInvalid, nameof(version))));
}
releaseResponse = await GitHub.GetRelease(parsedVersion.ToString(4)).ConfigureAwait(false);
releaseResponse = await GitHub.GetRelease(parsedVersion.ToString(4), cancellationToken).ConfigureAwait(false);
break;
}
@@ -95,7 +100,9 @@ public sealed class GitHubController : ArchiController {
public async Task<ActionResult<GenericResponse>> GitHubWikiHistoryGet(string page) {
ArgumentException.ThrowIfNullOrEmpty(page);
Dictionary<string, DateTime>? revisions = await GitHub.GetWikiHistory(page).ConfigureAwait(false);
CancellationToken cancellationToken = HttpContext.RequestAborted;
Dictionary<string, DateTime>? revisions = await GitHub.GetWikiHistory(page, cancellationToken).ConfigureAwait(false);
return revisions != null ? revisions.Count > 0 ? Ok(new GenericResponse<ImmutableDictionary<string, DateTime>>(revisions.ToImmutableDictionary())) : BadRequest(new GenericResponse(false, string.Format(CultureInfo.CurrentCulture, Strings.ErrorIsInvalid, nameof(page)))) : StatusCode((int) HttpStatusCode.ServiceUnavailable, new GenericResponse(false, string.Format(CultureInfo.CurrentCulture, Strings.ErrorRequestFailedTooManyTimes, WebBrowser.MaxTries)));
}
@@ -114,7 +121,9 @@ public sealed class GitHubController : ArchiController {
public async Task<ActionResult<GenericResponse>> GitHubWikiPageGet(string page, [FromQuery] string? revision = null) {
ArgumentException.ThrowIfNullOrEmpty(page);
string? html = await GitHub.GetWikiPage(page, revision).ConfigureAwait(false);
CancellationToken cancellationToken = HttpContext.RequestAborted;
string? html = await GitHub.GetWikiPage(page, revision, cancellationToken).ConfigureAwait(false);
return html switch {
null => StatusCode((int) HttpStatusCode.ServiceUnavailable, new GenericResponse(false, string.Format(CultureInfo.CurrentCulture, Strings.ErrorRequestFailedTooManyTimes, WebBrowser.MaxTries))),