jellyflood/Shared/Objects/ChannelProgram.swift

57 lines
1.4 KiB
Swift

//
// Swiftfin is subject to the terms of the Mozilla Public
// License, v2.0. If a copy of the MPL was not distributed with this
// file, you can obtain one at https://mozilla.org/MPL/2.0/.
//
// Copyright (c) 2025 Jellyfin & Jellyfin Contributors
//
import Foundation
import JellyfinAPI
// Note: assumes programs are sorted by start date
/// Structure that has a channel and associated programs.
struct ChannelProgram: Hashable, Identifiable {
let channel: BaseItemDto
let programs: [BaseItemDto]
var currentProgram: BaseItemDto? {
programs.first { program in
guard let start = program.startDate,
let end = program.endDate else { return false }
return (start ... end).contains(Date.now)
}
}
func programAfterCurrent(offset: Int) -> BaseItemDto? {
guard let currentStart = currentProgram?.startDate else { return nil }
return programs.filter { program in
guard let start = program.startDate else { return false }
return start > currentStart
}[safe: offset]
}
var id: String? {
channel.id
}
}
extension ChannelProgram: Poster {
var unwrappedIDHashOrZero: Int {
channel.id?.hashValue ?? 0
}
var displayTitle: String {
channel.displayTitle
}
var systemImage: String {
channel.systemImage
}
}