live tv playback, fix dates
This commit is contained in:
parent
43cd1ecc62
commit
b5719e505f
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue