added the user request stuff idk

This commit is contained in:
cranci1 2025-02-09 16:58:47 +01:00
parent 85bca0447a
commit d85ca35a7d

View file

@ -268,34 +268,61 @@ struct MediaInfoView: View {
} }
private var startWatchingText: String { private var startWatchingText: String {
for ep in episodeLinks { let (finished, unfinished) = finishedAndUnfinishedIndices()
let lastPlayedTime = UserDefaults.standard.double(forKey: "lastPlayedTime_\(ep.href)")
let totalTime = UserDefaults.standard.double(forKey: "totalTime_\(ep.href)") if let finishedIndex = finished, finishedIndex < episodeLinks.count - 1 {
let progress = totalTime > 0 ? lastPlayedTime / totalTime : 0 let nextEp = episodeLinks[finishedIndex + 1]
if progress >= 0.1 && (totalTime - lastPlayedTime) > (totalTime * 0.1) { return "Start Watching Episode \(nextEp.number)"
return "Continue Watching Episode \(ep.number)" } else if let unfinishedIndex = unfinished {
} return "Continue Watching Episode \(episodeLinks[unfinishedIndex].number)"
} }
return "Start Watching" return "Start Watching"
} }
private func playFirstUnwatchedEpisode() { private func playFirstUnwatchedEpisode() {
for ep in episodeLinks { let (finished, unfinished) = finishedAndUnfinishedIndices()
let lastPlayedTime = UserDefaults.standard.double(forKey: "lastPlayedTime_\(ep.href)")
let totalTime = UserDefaults.standard.double(forKey: "totalTime_\(ep.href)") if let finishedIndex = finished, finishedIndex < episodeLinks.count - 1 {
let progress = totalTime > 0 ? lastPlayedTime / totalTime : 0 let nextEp = episodeLinks[finishedIndex + 1]
if progress >= 0.1 && (totalTime - lastPlayedTime) > (totalTime * 0.1) { selectedEpisodeNumber = nextEp.number
selectedEpisodeNumber = ep.number fetchStream(href: nextEp.href)
fetchStream(href: ep.href) return
return } else if let unfinishedIndex = unfinished {
} let ep = episodeLinks[unfinishedIndex]
selectedEpisodeNumber = ep.number
fetchStream(href: ep.href)
return
} }
if let firstEpisode = episodeLinks.first { if let firstEpisode = episodeLinks.first {
selectedEpisodeNumber = firstEpisode.number selectedEpisodeNumber = firstEpisode.number
fetchStream(href: firstEpisode.href) fetchStream(href: firstEpisode.href)
} }
} }
private func finishedAndUnfinishedIndices() -> (finished: Int?, unfinished: Int?) {
var finishedIndex: Int? = nil
var firstUnfinishedIndex: Int? = nil
for (index, ep) in episodeLinks.enumerated() {
let keyLast = "lastPlayedTime_\(ep.href)"
let keyTotal = "totalTime_\(ep.href)"
let lastPlayedTime = UserDefaults.standard.double(forKey: keyLast)
let totalTime = UserDefaults.standard.double(forKey: keyTotal)
guard totalTime > 0 else { continue }
let remainingFraction = (totalTime - lastPlayedTime) / totalTime
if remainingFraction <= 0.1 {
finishedIndex = index
} else if firstUnfinishedIndex == nil {
firstUnfinishedIndex = index
}
}
return (finishedIndex, firstUnfinishedIndex)
}
private func generateRanges() -> [Range<Int>] { private func generateRanges() -> [Range<Int>] {
let chunkSize = episodeChunkSize let chunkSize = episodeChunkSize
let totalEpisodes = episodeLinks.count let totalEpisodes = episodeLinks.count