refresh programs on channel view every 10 mins

This commit is contained in:
jhays 2021-12-22 12:23:51 -06:00
parent 1bafa774de
commit 98a11ce303
2 changed files with 49 additions and 2 deletions

View File

@ -31,7 +31,12 @@ struct LiveTVChannelsView: View {
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.ignoresSafeArea()
.onAppear {
viewModel.startScheduleCheckTimer()
}
.onDisappear {
viewModel.stopScheduleCheckTimer()
}
} else {
VStack {
Text("No results.")

View File

@ -40,6 +40,7 @@ final class LiveTVChannelsViewModel: ViewModel {
private var programs = [BaseItemDto]()
private var channelProgramsList = [BaseItemDto: [BaseItemDto]]()
private var timer: Timer?
var timeFormatter: DateFormatter {
let df = DateFormatter()
@ -51,6 +52,11 @@ final class LiveTVChannelsViewModel: ViewModel {
super.init()
getChannels()
startScheduleCheckTimer()
}
deinit {
stopScheduleCheckTimer()
}
private func getGuideInfo() {
@ -131,7 +137,9 @@ final class LiveTVChannelsViewModel: ViewModel {
let prgs = self.programs.filter { item in
item.channelId == channel.id
}
channelProgramsList[channel] = prgs
DispatchQueue.main.async {
self.channelProgramsList[channel] = prgs
}
var currentPrg: BaseItemDto?
for prg in prgs {
@ -147,6 +155,40 @@ final class LiveTVChannelsViewModel: ViewModel {
}
return channelPrograms
}
func startScheduleCheckTimer() {
let date = Date()
let calendar = Calendar.current
var components = calendar.dateComponents([.era, .year, .month, .day, .hour, .minute], from: date)
// Run on 10th min of every hour
guard let minute = components.minute else { return }
components.second = 0
components.minute = minute + (10 - (minute % 10))
guard let nextMinute = calendar.date(from: components) else { return }
if let existingTimer = timer {
existingTimer.invalidate()
}
timer = Timer(fire: nextMinute, interval: 60 * 10, repeats: true) { [weak self] timer in
guard let self = self else { return }
LogManager.shared.log.debug("LiveTVChannels schedule check...")
DispatchQueue.global(qos: .background).async {
let newChanPrgs = self.processChannelPrograms()
DispatchQueue.main.async {
self.channelPrograms = newChanPrgs
}
}
}
if let timer = timer {
RunLoop.main.add(timer, forMode: .default)
}
}
func stopScheduleCheckTimer() {
timer?.invalidate()
}
}
extension Array {