2022-12-20 19:33:45 +00:00
|
|
|
import Foundation
|
2022-12-27 18:10:31 +00:00
|
|
|
import Models
|
2022-12-20 19:33:45 +00:00
|
|
|
|
|
|
|
public enum Statuses: Endpoint {
|
2023-01-15 13:51:09 +00:00
|
|
|
case postStatus(json: StatusData)
|
|
|
|
case editStatus(id: String, json: StatusData)
|
2022-12-21 17:28:21 +00:00
|
|
|
case status(id: String)
|
|
|
|
case context(id: String)
|
2022-12-20 19:33:45 +00:00
|
|
|
case favourite(id: String)
|
|
|
|
case unfavourite(id: String)
|
2022-12-21 11:39:29 +00:00
|
|
|
case reblog(id: String)
|
|
|
|
case unreblog(id: String)
|
2022-12-24 12:41:25 +00:00
|
|
|
case rebloggedBy(id: String, maxId: String?)
|
|
|
|
case favouritedBy(id: String, maxId: String?)
|
2023-01-03 17:22:08 +00:00
|
|
|
case pin(id: String)
|
|
|
|
case unpin(id: String)
|
2023-01-09 18:26:56 +00:00
|
|
|
case bookmark(id: String)
|
|
|
|
case unbookmark(id: String)
|
2023-01-17 10:36:01 +00:00
|
|
|
|
2022-12-20 19:33:45 +00:00
|
|
|
public func path() -> String {
|
|
|
|
switch self {
|
2022-12-25 07:17:16 +00:00
|
|
|
case .postStatus:
|
|
|
|
return "statuses"
|
2023-01-17 10:36:01 +00:00
|
|
|
case let .status(id):
|
2022-12-21 17:28:21 +00:00
|
|
|
return "statuses/\(id)"
|
2023-01-17 10:36:01 +00:00
|
|
|
case let .editStatus(id, _):
|
2022-12-26 07:24:55 +00:00
|
|
|
return "statuses/\(id)"
|
2023-01-17 10:36:01 +00:00
|
|
|
case let .context(id):
|
2022-12-21 17:28:21 +00:00
|
|
|
return "statuses/\(id)/context"
|
2023-01-17 10:36:01 +00:00
|
|
|
case let .favourite(id):
|
2022-12-20 19:33:45 +00:00
|
|
|
return "statuses/\(id)/favourite"
|
2023-01-17 10:36:01 +00:00
|
|
|
case let .unfavourite(id):
|
2022-12-20 19:33:45 +00:00
|
|
|
return "statuses/\(id)/unfavourite"
|
2023-01-17 10:36:01 +00:00
|
|
|
case let .reblog(id):
|
2022-12-21 11:39:29 +00:00
|
|
|
return "statuses/\(id)/reblog"
|
2023-01-17 10:36:01 +00:00
|
|
|
case let .unreblog(id):
|
2022-12-21 11:39:29 +00:00
|
|
|
return "statuses/\(id)/unreblog"
|
2023-01-17 10:36:01 +00:00
|
|
|
case let .rebloggedBy(id, _):
|
2022-12-24 12:41:25 +00:00
|
|
|
return "statuses/\(id)/reblogged_by"
|
2023-01-17 10:36:01 +00:00
|
|
|
case let .favouritedBy(id, _):
|
2022-12-24 12:41:25 +00:00
|
|
|
return "statuses/\(id)/favourited_by"
|
2023-01-03 17:22:08 +00:00
|
|
|
case let .pin(id):
|
|
|
|
return "statuses/\(id)/pin"
|
|
|
|
case let .unpin(id):
|
|
|
|
return "statuses/\(id)/unpin"
|
2023-01-09 18:26:56 +00:00
|
|
|
case let .bookmark(id):
|
|
|
|
return "statuses/\(id)/bookmark"
|
|
|
|
case let .unbookmark(id):
|
|
|
|
return "statuses/\(id)/unbookmark"
|
2022-12-20 19:33:45 +00:00
|
|
|
}
|
|
|
|
}
|
2023-01-17 10:36:01 +00:00
|
|
|
|
2022-12-20 19:33:45 +00:00
|
|
|
public func queryItems() -> [URLQueryItem]? {
|
|
|
|
switch self {
|
2022-12-24 12:41:25 +00:00
|
|
|
case let .rebloggedBy(_, maxId):
|
2022-12-28 18:10:13 +00:00
|
|
|
return makePaginationParam(sinceId: nil, maxId: maxId, mindId: nil)
|
2022-12-24 12:41:25 +00:00
|
|
|
case let .favouritedBy(_, maxId):
|
2022-12-28 18:10:13 +00:00
|
|
|
return makePaginationParam(sinceId: nil, maxId: maxId, mindId: nil)
|
2022-12-20 19:33:45 +00:00
|
|
|
default:
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
2023-01-17 10:36:01 +00:00
|
|
|
|
2023-01-15 13:51:09 +00:00
|
|
|
public var jsonValue: Encodable? {
|
|
|
|
switch self {
|
|
|
|
case let .postStatus(json):
|
|
|
|
return json
|
|
|
|
case let .editStatus(_, json):
|
|
|
|
return json
|
|
|
|
default:
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public struct StatusData: Encodable {
|
|
|
|
public let status: String
|
|
|
|
public let visibility: Visibility
|
|
|
|
public let inReplyToId: String?
|
|
|
|
public let spoilerText: String?
|
|
|
|
public let mediaIds: [String]?
|
|
|
|
public let poll: PollData?
|
2023-01-17 06:07:26 +00:00
|
|
|
public let language: String?
|
|
|
|
|
2023-01-15 13:51:09 +00:00
|
|
|
public struct PollData: Encodable {
|
|
|
|
public let options: [String]
|
|
|
|
public let multiple: Bool
|
|
|
|
public let expires_in: Int
|
2023-01-17 10:36:01 +00:00
|
|
|
|
2023-01-15 13:51:09 +00:00
|
|
|
public init(options: [String], multiple: Bool, expires_in: Int) {
|
|
|
|
self.options = options
|
|
|
|
self.multiple = multiple
|
|
|
|
self.expires_in = expires_in
|
|
|
|
}
|
|
|
|
}
|
2023-01-17 10:36:01 +00:00
|
|
|
|
2023-01-15 13:51:09 +00:00
|
|
|
public init(status: String,
|
|
|
|
visibility: Visibility,
|
|
|
|
inReplyToId: String? = nil,
|
|
|
|
spoilerText: String? = nil,
|
|
|
|
mediaIds: [String]? = nil,
|
2023-01-17 06:07:26 +00:00
|
|
|
poll: PollData? = nil,
|
2023-01-17 10:36:01 +00:00
|
|
|
language: String? = nil)
|
|
|
|
{
|
2023-01-15 13:51:09 +00:00
|
|
|
self.status = status
|
|
|
|
self.visibility = visibility
|
|
|
|
self.inReplyToId = inReplyToId
|
|
|
|
self.spoilerText = spoilerText
|
|
|
|
self.mediaIds = mediaIds
|
|
|
|
self.poll = poll
|
2023-01-17 06:07:26 +00:00
|
|
|
self.language = language
|
2023-01-15 13:51:09 +00:00
|
|
|
}
|
2022-12-20 19:33:45 +00:00
|
|
|
}
|