diff --git a/Sora/Views/MediaInfoView/MediaInfoView.swift b/Sora/Views/MediaInfoView/MediaInfoView.swift index 278979a..ddccccb 100644 --- a/Sora/Views/MediaInfoView/MediaInfoView.swift +++ b/Sora/Views/MediaInfoView/MediaInfoView.swift @@ -78,9 +78,7 @@ 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 @@ -972,30 +970,9 @@ 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() { - if episodeProgressCache.isEmpty && !episodeLinks.isEmpty { - cacheEpisodeProgress() - } - for ep in episodeLinks.reversed() { - if let cachedProgress = episodeProgressCache[ep.href], cachedProgress.total > 0 { - latestProgress = cachedProgress.progress - return - } - } + Logger.shared.log("Called, Called", type: "General") for ep in episodeLinks.reversed() { let last = UserDefaults.standard.double(forKey: "lastPlayedTime_\(ep.href)") let total = UserDefaults.standard.double(forKey: "totalTime_\(ep.href)") @@ -1030,80 +1007,45 @@ 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 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 - } + 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 && progress < 0.9 { return "Continue Watching Episode \(ep.number)" } - if firstUnwatchedEpisode == nil && progress < 0.9 { - firstUnwatchedEpisode = ep + } + + 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 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 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 + 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 } } - 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) + + if let first = episodeLinks.first { + selectedEpisodeNumber = first.number + fetchStream(href: first.href) } }