Download languages (#690)

This commit is contained in:
Nathan Mattes 2022-12-20 18:00:43 +01:00
parent a107b4d9e2
commit 5e4820739f
3 changed files with 61 additions and 2 deletions

View File

@ -28,5 +28,8 @@ extension APIService {
return Mastodon.Entity.Category(category: kind.rawValue, serversCount: 0)
}
}
public func languages() -> AnyPublisher<Mastodon.Response.Content<[Mastodon.Entity.Language]>, Error> {
return Mastodon.API.Onboarding.languages(session: session)
}
}

View File

@ -12,6 +12,7 @@ extension Mastodon.API.Onboarding {
static let serversEndpointURL = Mastodon.API.joinMastodonEndpointURL.appendingPathComponent("servers")
static let categoriesEndpointURL = Mastodon.API.joinMastodonEndpointURL.appendingPathComponent("categories")
static let languagesEndpointURL = Mastodon.API.joinMastodonEndpointURL.appendingPathComponent("languages")
/// Fetch server list
///
@ -68,7 +69,33 @@ extension Mastodon.API.Onboarding {
}
.eraseToAnyPublisher()
}
/// Fetch server languages
///
/// Using this endpoint to fetch booked languages
///
/// # Last Update
/// 2022/12/19
/// # Reference
/// undocumented
/// - Parameters:
/// - session: `URLSession`
/// - Returns: `AnyPublisher` contains `Language` nested in the response
public static func languages(
session: URLSession
) -> AnyPublisher<Mastodon.Response.Content<[Mastodon.Entity.Language]>, Error> {
let request = Mastodon.API.get(
url: languagesEndpointURL,
query: nil,
authorization: nil
)
return session.dataTaskPublisher(for: request)
.tryMap { data, response in
let value = try Mastodon.API.decode(type: [Mastodon.Entity.Language].self, from: data, response: response)
return Mastodon.Response.Content(value: value, response: response)
}
.eraseToAnyPublisher()
}
}
extension Mastodon.API.Onboarding {

View File

@ -0,0 +1,29 @@
//
// File.swift
//
//
// Created by Nathan Mattes on 19.12.22.
//
import Foundation
extension Mastodon.Entity {
public struct Language: Codable {
public let locale: String
public let serversCount: Int
public let language: String?
enum CodingKeys: String, CodingKey {
case locale
case serversCount = "servers_count"
case language
}
public init(locale: String, serversCount: Int, language: String?) {
self.locale = locale
self.serversCount = serversCount
self.language = language
}
}
}