live tv playback, fix dates

This commit is contained in:
jhays 2021-11-19 08:31:11 -06:00
parent 43cd1ecc62
commit b5719e505f
5 changed files with 33 additions and 35 deletions

View File

@ -47,29 +47,27 @@ struct LiveTVChannelItemElement: View {
}
if let currentProgram = program,
let start = currentProgram.startDate?.toLocalTime().timeIntervalSinceReferenceDate,
let end = currentProgram.endDate?.toLocalTime().timeIntervalSinceReferenceDate {
let startDate = currentProgram.startDate,
let endDate = currentProgram.endDate {
let start = startDate.timeIntervalSinceReferenceDate
let end = endDate.timeIntervalSinceReferenceDate
let now = Date().timeIntervalSinceReferenceDate
let length = end - start
let progress = now - start
let progPercent = progress / length
VStack {
if let startDate = currentProgram.startDate,
let endDate = currentProgram.endDate {
HStack {
Text(dateFormatter.string(from: startDate.toLocalTime()))
.font(.footnote)
.lineLimit(1)
.frame(alignment: .leading)
Spacer()
Text(dateFormatter.string(from: endDate.toLocalTime()))
.font(.footnote)
.lineLimit(1)
.frame(alignment: .trailing)
}
HStack {
Text(dateFormatter.string(from: startDate))
.font(.footnote)
.lineLimit(1)
.frame(alignment: .leading)
Spacer()
Text(dateFormatter.string(from: endDate))
.font(.footnote)
.lineLimit(1)
.frame(alignment: .trailing)
}
GeometryReader { gp in
ZStack(alignment: .leading) {

View File

@ -13,7 +13,7 @@ import SwiftUICollection
struct LiveTVChannelsView: View {
@EnvironmentObject var programsRouter: LiveTVChannelsCoordinator.Router
@EnvironmentObject var router: LiveTVChannelsCoordinator.Router
@StateObject var viewModel = LiveTVChannelsViewModel()
var body: some View {
@ -49,6 +49,7 @@ struct LiveTVChannelsView: View {
let channel = item.channel{
if channel.type != "Folder" {
Button {
self.router.route(to: \.videoPlayer, channel)
} label: {
LiveTVChannelItemElement(channel: channel, program: item.program)
}

View File

@ -583,7 +583,7 @@ class VideoPlayerViewController: UIViewController, VideoPlayerSettingsDelegate,
updateNowPlayingCenter(time: nil, playing: mediaPlayer.state == .playing)
if (eventName == "timeupdate" && mediaPlayer.state == .playing) || eventName != "timeupdate" {
var ticks: Int64 = Int64(mediaPlayer.position * Float(manifest.runTimeTicks!))
var ticks: Int64 = Int64(mediaPlayer.position * Float(manifest.runTimeTicks ?? 0))
if ticks == 0 {
ticks = manifest.userData?.playbackPositionTicks ?? 0
}
@ -601,7 +601,7 @@ class VideoPlayerViewController: UIViewController, VideoPlayerSettingsDelegate,
}
func sendStopReport() {
let stopInfo = PlaybackStopInfo(item: manifest, itemId: manifest.id, sessionId: playSessionId, mediaSourceId: manifest.id, positionTicks: Int64(mediaPlayer.position * Float(manifest.runTimeTicks!)), liveStreamId: nil, playSessionId: playSessionId, failed: nil, nextMediaType: nil, playlistItemId: "playlistItem0", nowPlayingQueue: [])
let stopInfo = PlaybackStopInfo(item: manifest, itemId: manifest.id, sessionId: playSessionId, mediaSourceId: manifest.id, positionTicks: Int64(mediaPlayer.position * Float(manifest.runTimeTicks ?? 0)), liveStreamId: nil, playSessionId: playSessionId, failed: nil, nextMediaType: nil, playlistItemId: "playlistItem0", nowPlayingQueue: [])
PlaystateAPI.reportPlaybackStopped(playbackStopInfo: stopInfo)
.sink(receiveCompletion: { result in

View File

@ -17,10 +17,14 @@ final class LiveTVChannelsCoordinator: NavigationCoordinatable {
@Root var start = makeStart
@Route(.modal) var modalItem = makeModalItem
@Route(.fullScreen) var videoPlayer = makeVideoPlayer
func makeModalItem(item: BaseItemDto) -> NavigationViewCoordinator<ItemCoordinator> {
return NavigationViewCoordinator(ItemCoordinator(item: item))
}
func makeVideoPlayer(item: BaseItemDto) -> NavigationViewCoordinator<VideoPlayerCoordinator> {
NavigationViewCoordinator(VideoPlayerCoordinator(item: item))
}
@ViewBuilder
func makeStart() -> some View {

View File

@ -89,7 +89,7 @@ final class LiveTVChannelsViewModel: ViewModel {
let channelIds = channels.compactMap { $0.id }
let minEndDate = Date.now.addComponentsToDate(hours: -1)
let maxStartDate = minEndDate.addComponentsToDate(days: 1)
let maxStartDate = minEndDate.addComponentsToDate(hours: 6)
NSLog("*** maxStartDate: \(maxStartDate)")
NSLog("*** minEndDate: \(minEndDate)")
@ -125,8 +125,9 @@ final class LiveTVChannelsViewModel: ViewModel {
let now = Date()
let df = DateFormatter()
df.dateFormat = "MM/dd h:mm ZZZ"
NSLog("begin processing programs")
for channel in self.channels {
// NSLog("\n\(channel.name)")
NSLog("\n\(channel.name)")
let prgs = self.programs.filter { item in
item.channelId == channel.id
}
@ -136,15 +137,15 @@ final class LiveTVChannelsViewModel: ViewModel {
for prg in prgs {
var startString = ""
var endString = ""
if let start = prg.startDate?.toLocalTime() {
if let start = prg.startDate {
startString = df.string(from: start)
}
if let end = prg.endDate?.toLocalTime() {
if let end = prg.endDate {
endString = df.string(from: end)
}
//NSLog("\(prg.name) - \(startString) to \(endString)")
if let startDate = prg.startDate?.toLocalTime() ,
let endDate = prg.endDate?.toLocalTime(),
NSLog("\(prg.name) - \(startString) to \(endString)")
if let startDate = prg.startDate,
let endDate = prg.endDate,
now.timeIntervalSinceReferenceDate > startDate.timeIntervalSinceReferenceDate &&
now.timeIntervalSinceReferenceDate < endDate.timeIntervalSinceReferenceDate {
currentPrg = prg
@ -153,6 +154,7 @@ final class LiveTVChannelsViewModel: ViewModel {
channelPrograms.append(LiveTVChannelProgram(channel: channel, program: currentPrg))
}
NSLog("finished processing programs")
return channelPrograms
}
}
@ -192,11 +194,4 @@ extension Date {
dc.timeZone = TimeZone(secondsFromGMT: 0)
return Calendar.current.date(from: dc)!
}
func toLocalTime() -> Date {
let timezoneOffset = TimeZone.current.secondsFromGMT()
let epochDate = self.timeIntervalSince1970
let timezoneEpochOffset = (epochDate + Double(timezoneOffset))
return Date(timeIntervalSince1970: timezoneEpochOffset)
}
}