metatext-app-ios-iphone-ipad/Mastodon/Sources/Mastodon/Entities/Attachment.swift

67 lines
1.7 KiB
Swift

// Copyright © 2020 Metabolist. All rights reserved.
import Foundation
public struct Attachment: Codable, Hashable {
public enum AttachmentType: String, Codable, Hashable, Unknowable {
case image, video, gifv, audio, unknown
public static var unknownCase: Self { .unknown }
}
// swiftlint:disable nesting
public struct Meta: Codable, Hashable {
public struct Info: Codable, Hashable {
public let width: Int?
public let height: Int?
public let size: String?
public let aspect: Double?
public let frameRate: String?
public let duration: Double?
public let bitrate: Int?
}
public struct Focus: Codable, Hashable {
public var x: Double
public var y: Double
}
public let original: Info?
public let small: Info?
public let focus: Focus?
}
// swiftlint:enable nesting
public let id: Id
public let type: AttachmentType
public let url: UnicodeURL
public let remoteUrl: UnicodeURL?
public let previewUrl: UnicodeURL?
public let meta: Meta?
public let description: String?
public let blurhash: String?
}
public extension Attachment {
typealias Id = String
var aspectRatio: Double? {
if
let info = meta?.original,
let width = info.width,
let height = info.height,
width != 0,
height != 0 {
let aspectRatio = Double(width) / Double(height)
return aspectRatio.isNaN ? nil : aspectRatio
}
return nil
}
}
public extension Attachment.Meta.Focus {
static let `default` = Self(x: 0, y: 0)
}