94 lines
2.8 KiB
Swift
94 lines
2.8 KiB
Swift
// Copyright © 2020 Metabolist. All rights reserved.
|
|
|
|
import Foundation
|
|
import HTTP
|
|
import Mastodon
|
|
|
|
public enum RelationshipEndpoint {
|
|
case accountsFollow(id: Account.Id, showReblogs: Bool? = nil, notify: Bool? = nil)
|
|
case accountsUnfollow(id: Account.Id)
|
|
case accountsBlock(id: Account.Id)
|
|
case accountsUnblock(id: Account.Id)
|
|
case accountsMute(id: Account.Id, notifications: Bool = true, duration: Int = 0)
|
|
case accountsUnmute(id: Account.Id)
|
|
case accountsPin(id: Account.Id)
|
|
case accountsUnpin(id: Account.Id)
|
|
case note(String, id: Account.Id)
|
|
case acceptFollowRequest(id: Account.Id)
|
|
case rejectFollowRequest(id: Account.Id)
|
|
}
|
|
|
|
extension RelationshipEndpoint: Endpoint {
|
|
public typealias ResultType = Relationship
|
|
|
|
public var context: [String] {
|
|
switch self {
|
|
case .acceptFollowRequest, .rejectFollowRequest:
|
|
return defaultContext + ["follow_requests"]
|
|
default:
|
|
return defaultContext + ["accounts"]
|
|
}
|
|
}
|
|
|
|
public var pathComponentsInContext: [String] {
|
|
switch self {
|
|
case let .accountsFollow(id, _, _):
|
|
return [id, "follow"]
|
|
case let .accountsUnfollow(id):
|
|
return [id, "unfollow"]
|
|
case let .accountsBlock(id):
|
|
return [id, "block"]
|
|
case let .accountsUnblock(id):
|
|
return [id, "unblock"]
|
|
case let .accountsMute(id, _, _):
|
|
return [id, "mute"]
|
|
case let .accountsUnmute(id):
|
|
return [id, "unmute"]
|
|
case let .accountsPin(id):
|
|
return [id, "pin"]
|
|
case let .accountsUnpin(id):
|
|
return [id, "unpin"]
|
|
case let .note(_, id):
|
|
return [id, "note"]
|
|
case let .acceptFollowRequest(id):
|
|
return [id, "authorize"]
|
|
case let .rejectFollowRequest(id):
|
|
return [id, "reject"]
|
|
}
|
|
}
|
|
|
|
public var queryParameters: [URLQueryItem] {
|
|
switch self {
|
|
case let .accountsFollow(_, showReblogs, notify):
|
|
var params = [URLQueryItem]()
|
|
|
|
if let showReblogs = showReblogs {
|
|
params.append(URLQueryItem(name: "reblogs", value: String(showReblogs)))
|
|
}
|
|
|
|
if let notify = notify {
|
|
params.append(URLQueryItem(name: "notify", value: String(notify)))
|
|
}
|
|
|
|
return params
|
|
default:
|
|
return []
|
|
}
|
|
}
|
|
|
|
public var jsonBody: [String: Any]? {
|
|
switch self {
|
|
case let .accountsMute(_, notifications, duration):
|
|
return ["notifications": notifications, "duration": duration]
|
|
case let .note(note, _):
|
|
return ["comment": note]
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
|
|
public var method: HTTPMethod {
|
|
.post
|
|
}
|
|
}
|