import CoreMedia import Foundation import SwiftyJSON // swiftlint:disable:next final_class class Segment: ObservableObject, Hashable { let category: String let segment: [Double] let uuid: String let videoDuration: Int var start: Double { segment.first! } var end: Double { segment.last! } var duration: Double { end - start } var durationText: String { let formatter = NumberFormatter() formatter.minimumFractionDigits = 0 formatter.maximumFractionDigits = 1 return formatter.string(from: NSNumber(value: duration.rounded())) ?? "" } var endTime: CMTime { .secondsInDefaultTimescale(end) } init(category: String, segment: [Double], uuid: String, videoDuration: Int) { self.category = category self.segment = segment self.uuid = uuid self.videoDuration = videoDuration } func timeInSegment(_ time: CMTime) -> Bool { (start ... end).contains(time.seconds) } func hash(into hasher: inout Hasher) { hasher.combine(uuid) } static func == (lhs: Segment, rhs: Segment) -> Bool { lhs.uuid == rhs.uuid } func title() -> String { category } }