From 160f48679b5343dea50b7f4eb8b70ac95a5d3187 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Tue, 18 Apr 2023 10:15:37 -0400 Subject: [PATCH] Handle HTTP 206 responses from timelines endpoint --- Packages/Pachyderm/Sources/Pachyderm/Client.swift | 2 +- Packages/Pachyderm/Sources/Pachyderm/Model/Timeline.swift | 2 ++ Packages/Pachyderm/Sources/Pachyderm/Request/Request.swift | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Packages/Pachyderm/Sources/Pachyderm/Client.swift b/Packages/Pachyderm/Sources/Pachyderm/Client.swift index 7165f5ec..807f4a3c 100644 --- a/Packages/Pachyderm/Sources/Pachyderm/Client.swift +++ b/Packages/Pachyderm/Sources/Pachyderm/Client.swift @@ -83,7 +83,7 @@ public class Client { completion(.failure(Error(request: request, type: .invalidResponse))) return } - guard response.statusCode == 200 else { + guard response.statusCode == 200 || request.additionalAcceptableHTTPCodes.contains(response.statusCode) else { let mastodonError = try? Client.decoder.decode(MastodonError.self, from: data) let type: ErrorType = mastodonError.flatMap { .mastodonError(response.statusCode, $0.description) } ?? .unexpectedStatus(response.statusCode) completion(.failure(Error(request: request, type: type))) diff --git a/Packages/Pachyderm/Sources/Pachyderm/Model/Timeline.swift b/Packages/Pachyderm/Sources/Pachyderm/Model/Timeline.swift index 4310ca2f..137a0aac 100644 --- a/Packages/Pachyderm/Sources/Pachyderm/Model/Timeline.swift +++ b/Packages/Pachyderm/Sources/Pachyderm/Model/Timeline.swift @@ -38,6 +38,8 @@ extension Timeline { request.queryParameters.append("local" => true) } request.range = range + // 206 can happen when the timeline is being regenerated and therefore is incomplete + request.additionalAcceptableHTTPCodes = [206] return request } } diff --git a/Packages/Pachyderm/Sources/Pachyderm/Request/Request.swift b/Packages/Pachyderm/Sources/Pachyderm/Request/Request.swift index dc857c14..22f30b2f 100644 --- a/Packages/Pachyderm/Sources/Pachyderm/Request/Request.swift +++ b/Packages/Pachyderm/Sources/Pachyderm/Request/Request.swift @@ -13,6 +13,7 @@ public struct Request: Sendable { let endpoint: Endpoint let body: Body var queryParameters: [Parameter] + var additionalAcceptableHTTPCodes: [Int] = [] init(method: Method, path: Endpoint, body: Body = EmptyBody(), queryParameters: [Parameter] = []) { self.method = method