mirror of
https://github.com/cranci1/Sora.git
synced 2026-04-05 09:09:46 +00:00
test x22222
This commit is contained in:
parent
f04638ccf3
commit
f65eeeea41
1 changed files with 86 additions and 28 deletions
|
|
@ -78,7 +78,9 @@ struct MediaInfoView: View {
|
|||
@State private var isBulkDownloading: Bool = false
|
||||
@State private var bulkDownloadProgress: String = ""
|
||||
@State private var tmdbType: TMDBFetcher.MediaType? = nil
|
||||
|
||||
@State private var latestProgress: Double = 0.0
|
||||
private var episodeProgressCache: [String: (lastPlayed: Double, total: Double, progress: Double)] = [:]
|
||||
|
||||
private var isGroupedBySeasons: Bool {
|
||||
return groupedEpisodes().count > 1
|
||||
|
|
@ -970,9 +972,30 @@ struct MediaInfoView: View {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private func cacheEpisodeProgress() {
|
||||
let userDefaults = UserDefaults.standard
|
||||
episodeProgressCache.removeAll()
|
||||
for ep in episodeLinks {
|
||||
let lastKey = "lastPlayedTime_\(ep.href)"
|
||||
let totalKey = "totalTime_\(ep.href)"
|
||||
let last = userDefaults.double(forKey: lastKey)
|
||||
let total = userDefaults.double(forKey: totalKey)
|
||||
let progress = total > 0 ? last / total : 0
|
||||
episodeProgressCache[ep.href] = (last, total, progress)
|
||||
}
|
||||
}
|
||||
|
||||
private func updateLatestProgress() {
|
||||
Logger.shared.log("Called, Called", type: "General")
|
||||
if episodeProgressCache.isEmpty && !episodeLinks.isEmpty {
|
||||
cacheEpisodeProgress()
|
||||
}
|
||||
for ep in episodeLinks.reversed() {
|
||||
if let cachedProgress = episodeProgressCache[ep.href], cachedProgress.total > 0 {
|
||||
latestProgress = cachedProgress.progress
|
||||
return
|
||||
}
|
||||
}
|
||||
for ep in episodeLinks.reversed() {
|
||||
let last = UserDefaults.standard.double(forKey: "lastPlayedTime_\(ep.href)")
|
||||
let total = UserDefaults.standard.double(forKey: "totalTime_\(ep.href)")
|
||||
|
|
@ -1007,45 +1030,80 @@ struct MediaInfoView: View {
|
|||
}
|
||||
|
||||
private var continueWatchingText: String {
|
||||
guard !episodeLinks.isEmpty else {
|
||||
return "Start Watching"
|
||||
}
|
||||
if episodeProgressCache.isEmpty {
|
||||
cacheEpisodeProgress()
|
||||
}
|
||||
var firstUnwatchedEpisode: EpisodeLink? = nil
|
||||
for ep in episodeLinks {
|
||||
let last = UserDefaults.standard.double(forKey: "lastPlayedTime_\(ep.href)")
|
||||
let total = UserDefaults.standard.double(forKey: "totalTime_\(ep.href)")
|
||||
let progress = total > 0 ? last / total : 0
|
||||
|
||||
let progress: Double
|
||||
if let cachedData = episodeProgressCache[ep.href] {
|
||||
progress = cachedData.progress
|
||||
} else {
|
||||
let last = UserDefaults.standard.double(forKey: "lastPlayedTime_\(ep.href)")
|
||||
let total = UserDefaults.standard.double(forKey: "totalTime_\(ep.href)")
|
||||
progress = total > 0 ? last / total : 0
|
||||
}
|
||||
if progress > 0 && progress < 0.9 {
|
||||
return "Continue Watching Episode \(ep.number)"
|
||||
}
|
||||
}
|
||||
|
||||
for ep in episodeLinks {
|
||||
let last = UserDefaults.standard.double(forKey: "lastPlayedTime_\(ep.href)")
|
||||
let total = UserDefaults.standard.double(forKey: "totalTime_\(ep.href)")
|
||||
let progress = total > 0 ? last / total : 0
|
||||
|
||||
if progress < 0.9 {
|
||||
return "Start Watching Episode \(ep.number)"
|
||||
if firstUnwatchedEpisode == nil && progress < 0.9 {
|
||||
firstUnwatchedEpisode = ep
|
||||
}
|
||||
}
|
||||
|
||||
if let firstUnwatched = firstUnwatchedEpisode {
|
||||
return "Start Watching Episode \(firstUnwatched.number)"
|
||||
}
|
||||
return "Start Watching"
|
||||
}
|
||||
|
||||
private func playFirstUnwatchedEpisode() {
|
||||
guard !episodeLinks.isEmpty else { return }
|
||||
if episodeProgressCache.isEmpty {
|
||||
cacheEpisodeProgress()
|
||||
}
|
||||
var episodeToPlay: EpisodeLink? = nil
|
||||
for ep in episodeLinks {
|
||||
let last = UserDefaults.standard.double(forKey: "lastPlayedTime_\(ep.href)")
|
||||
let total = UserDefaults.standard.double(forKey: "totalTime_\(ep.href)")
|
||||
let progress = total > 0 ? last / total : 0
|
||||
|
||||
if progress < 0.9 {
|
||||
selectedEpisodeNumber = ep.number
|
||||
fetchStream(href: ep.href)
|
||||
return
|
||||
let progress: Double
|
||||
let hasValidTotal: Bool
|
||||
if let cached = episodeProgressCache[ep.href] {
|
||||
progress = cached.progress
|
||||
hasValidTotal = cached.total > 0
|
||||
} else {
|
||||
let last = UserDefaults.standard.double(forKey: "lastPlayedTime_\(ep.href)")
|
||||
let total = UserDefaults.standard.double(forKey: "totalTime_\(ep.href)")
|
||||
progress = total > 0 ? last / total : 0
|
||||
hasValidTotal = total > 0
|
||||
}
|
||||
if hasValidTotal && progress > 0 && progress < 0.9 {
|
||||
episodeToPlay = ep
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if let first = episodeLinks.first {
|
||||
selectedEpisodeNumber = first.number
|
||||
fetchStream(href: first.href)
|
||||
if episodeToPlay == nil {
|
||||
for ep in episodeLinks {
|
||||
let progress: Double
|
||||
if let cached = episodeProgressCache[ep.href] {
|
||||
progress = cached.progress
|
||||
} else {
|
||||
let last = UserDefaults.standard.double(forKey: "lastPlayedTime_\(ep.href)")
|
||||
let total = UserDefaults.standard.double(forKey: "totalTime_\(ep.href)")
|
||||
progress = total > 0 ? last / total : 0
|
||||
}
|
||||
if progress < 0.9 {
|
||||
episodeToPlay = ep
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
if episodeToPlay == nil {
|
||||
episodeToPlay = episodeLinks.first
|
||||
}
|
||||
if let episode = episodeToPlay {
|
||||
selectedEpisodeNumber = episode.number
|
||||
fetchStream(href: episode.href)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue