58 lines
1.7 KiB
Swift
58 lines
1.7 KiB
Swift
import Foundation
|
|
|
|
struct Message: Identifiable {
|
|
let id: String
|
|
let title: String
|
|
let description: String
|
|
let speaker: String
|
|
let videoUrl: String
|
|
let thumbnailUrl: String?
|
|
let duration: TimeInterval
|
|
let isLiveStream: Bool
|
|
let isPublished: Bool
|
|
let isDeleted: Bool
|
|
let liveBroadcastStatus: String // "none", "upcoming", "live", or "completed"
|
|
let date: String // ISO8601 formatted date string
|
|
|
|
var formattedDuration: String {
|
|
let formatter = DateComponentsFormatter()
|
|
formatter.allowedUnits = [.hour, .minute]
|
|
formatter.unitsStyle = .abbreviated
|
|
formatter.maximumUnitCount = 2
|
|
return formatter.string(from: duration) ?? ""
|
|
}
|
|
|
|
var formattedDate: String {
|
|
// Parse the date string
|
|
let dateFormatter = DateFormatter()
|
|
dateFormatter.dateFormat = "yyyy-MM-dd"
|
|
dateFormatter.timeZone = TimeZone(identifier: "America/New_York")
|
|
|
|
guard let date = dateFormatter.date(from: date) else { return date }
|
|
|
|
// Format for display
|
|
let displayFormatter = DateFormatter()
|
|
displayFormatter.dateFormat = "MMMM d, yyyy"
|
|
displayFormatter.timeZone = TimeZone(identifier: "America/New_York")
|
|
return displayFormatter.string(from: date)
|
|
}
|
|
}
|
|
|
|
// MARK: - Codable
|
|
extension Message: Codable {
|
|
enum CodingKeys: String, CodingKey {
|
|
case id
|
|
case title
|
|
case description
|
|
case speaker
|
|
case videoUrl
|
|
case thumbnailUrl
|
|
case duration
|
|
case isLiveStream
|
|
case isPublished
|
|
case isDeleted
|
|
case liveBroadcastStatus
|
|
case date
|
|
}
|
|
}
|