Tusker/Pachyderm/Model/Attachment.swift

101 lines
2.5 KiB
Swift

//
// Attachment.swift
// Pachyderm
//
// Created by Shadowfacts on 9/9/18.
// Copyright © 2018 Shadowfacts. All rights reserved.
//
import Foundation
public class Attachment: Decodable, ClientModel {
var client: Client!
public let id: String
public let kind: Kind
public let url: URL
public let remoteURL: URL?
public let previewURL: URL
public let textURL: URL?
public let meta: Metadata?
public var description: String?
public func update(focus: (Float, Float)?, completion: Client.Callback<Attachment>?) {
let request = Request<Attachment>(method: .put, path: "/api/v1/media/\(id)", body: .formData([
"description" => description,
"focus" => focus
], nil))
client.run(request) { result in
completion?(result)
}
}
private enum CodingKeys: String, CodingKey {
case id
case kind = "type"
case url
case remoteURL = "remote_url"
case previewURL = "preview_url"
case textURL = "text_url"
case meta
case description
}
}
extension Attachment {
public enum Kind: String, Decodable {
case image
case video
case gifv
case audio
case unknown
}
}
extension Attachment {
public class Metadata: Decodable {
public let length: String?
public let duration: Float?
public let audioEncoding: String?
public let audioBitrate: String?
public let audioChannels: String?
public let fps: Float?
public let width: Int?
public let height: Int?
public let size: String?
public let aspect: Float?
public let small: ImageMetadata?
public let original: ImageMetadata?
private enum CodingKeys: String, CodingKey {
case length
case duration
case audioEncoding = "audio_encode"
case audioBitrate = "audio_bitrate"
case audioChannels = "audio_channels"
case fps
case width
case height
case size
case aspect
case small
case original
}
}
public class ImageMetadata: Decodable {
public let width: Int?
public let height: Int?
public let size: String?
public let aspect: Float?
private enum CodingKeys: String, CodingKey {
case width
case height
case size
case aspect
}
}
}