Impressia/Vernissage/Extensions/MastodonClientAuthenticated...

108 lines
4.0 KiB
Swift
Raw Normal View History

2023-01-04 20:56:26 +01:00
//
// https://mczachurski.dev
// Copyright © 2023 Marcin Czachurski and the repository contributors.
// Licensed under the MIT License.
//
import Foundation
import MastodonSwift
extension MastodonClientAuthenticated {
func getAccount(for accountId: String) async throws -> Account {
let request = try Self.request(
for: baseURL,
target: Mastodon.Account.account(accountId),
withBearerToken: token
)
2023-01-08 17:56:07 +01:00
let (data, response) = try await urlSession.data(for: request)
guard (response as? HTTPURLResponse)?.status?.responseType == .success else {
throw NetworkError.notSuccessResponse(response)
}
2023-01-04 20:56:26 +01:00
return try JSONDecoder().decode(Account.self, from: data)
}
2023-01-05 11:55:20 +01:00
func getRelationship(for accountId: String) async throws -> Relationship? {
let request = try Self.request(
for: baseURL,
target: Mastodon.Account.relationships([accountId]),
withBearerToken: token
)
2023-01-08 17:56:07 +01:00
let (data, response) = try await urlSession.data(for: request)
guard (response as? HTTPURLResponse)?.status?.responseType == .success else {
throw NetworkError.notSuccessResponse(response)
}
2023-01-05 11:55:20 +01:00
let relationships = try JSONDecoder().decode([Relationship].self, from: data)
return relationships.first
}
2023-01-09 08:29:55 +01:00
func getStatuses(for accountId: String,
onlyMedia: Bool = true,
excludeReplies: Bool = true,
maxId: String? = nil,
sinceId: String? = nil,
minId: String? = nil,
limit: Int = 40) async throws -> [Status] {
2023-01-05 11:55:20 +01:00
let request = try Self.request(
for: baseURL,
2023-01-09 08:29:55 +01:00
target: Mastodon.Account.statuses(accountId, onlyMedia, excludeReplies, maxId, sinceId, minId, limit),
2023-01-05 11:55:20 +01:00
withBearerToken: token
)
2023-01-08 17:56:07 +01:00
let (data, response) = try await urlSession.data(for: request)
guard (response as? HTTPURLResponse)?.status?.responseType == .success else {
throw NetworkError.notSuccessResponse(response)
}
2023-01-05 11:55:20 +01:00
return try JSONDecoder().decode([Status].self, from: data)
}
2023-01-05 14:50:48 +01:00
func follow(for accountId: String) async throws -> Relationship {
let request = try Self.request(
for: baseURL,
target: Mastodon.Account.follow(accountId),
withBearerToken: token
)
2023-01-08 17:56:07 +01:00
let (data, response) = try await urlSession.data(for: request)
guard (response as? HTTPURLResponse)?.status?.responseType == .success else {
throw NetworkError.notSuccessResponse(response)
}
2023-01-05 14:50:48 +01:00
return try JSONDecoder().decode(Relationship.self, from: data)
}
2023-01-05 21:08:19 +01:00
func getFollowers(for accountId: String, page: Int = 1) async throws -> [Account] {
let request = try Self.request(
for: baseURL,
target: Mastodon.Account.followers(accountId, nil, nil, nil, nil, page),
withBearerToken: token
)
2023-01-08 17:56:07 +01:00
let (data, response) = try await urlSession.data(for: request)
guard (response as? HTTPURLResponse)?.status?.responseType == .success else {
throw NetworkError.notSuccessResponse(response)
}
2023-01-05 21:08:19 +01:00
return try JSONDecoder().decode([Account].self, from: data)
}
func getFollowing(for accountId: String, page: Int = 1) async throws -> [Account] {
let request = try Self.request(
for: baseURL,
target: Mastodon.Account.following(accountId, nil, nil, nil, nil, page),
withBearerToken: token
)
2023-01-08 17:56:07 +01:00
let (data, response) = try await urlSession.data(for: request)
guard (response as? HTTPURLResponse)?.status?.responseType == .success else {
throw NetworkError.notSuccessResponse(response)
}
2023-01-05 21:08:19 +01:00
return try JSONDecoder().decode([Account].self, from: data)
}
2023-01-04 20:56:26 +01:00
}