reverted continue watching

This commit is contained in:
cranci1 2025-06-30 10:03:39 +02:00
parent 5d3939e61f
commit 92343aee2b

View file

@ -48,9 +48,7 @@ class ContinueWatchingManager {
let currentEpisode = sortedEpisodes[i] let currentEpisode = sortedEpisodes[i]
let nextEpisode = sortedEpisodes[i + 1] let nextEpisode = sortedEpisodes[i + 1]
let remainingTimePercentage = UserDefaults.standard.object(forKey: "remainingTimePercentage") != nil ? UserDefaults.standard.double(forKey: "remainingTimePercentage") : 90.0 if currentEpisode.progress >= 0.8 && nextEpisode.episodeNumber > currentEpisode.episodeNumber {
let threshold = (100.0 - remainingTimePercentage) / 100.0
if currentEpisode.progress >= threshold && nextEpisode.episodeNumber > currentEpisode.episodeNumber {
itemsToRemove.insert(currentEpisode.id) itemsToRemove.insert(currentEpisode.id)
} }
} }
@ -65,54 +63,54 @@ class ContinueWatchingManager {
} }
func save(item: ContinueWatchingItem) { func save(item: ContinueWatchingItem) {
// Use real playback times
let lastKey = "lastPlayedTime_\(item.fullUrl)" let lastKey = "lastPlayedTime_\(item.fullUrl)"
let totalKey = "totalTime_\(item.fullUrl)" let totalKey = "totalTime_\(item.fullUrl)"
let lastPlayed = UserDefaults.standard.double(forKey: lastKey) let lastPlayed = UserDefaults.standard.double(forKey: lastKey)
let totalTime = UserDefaults.standard.double(forKey: totalKey) let totalTime = UserDefaults.standard.double(forKey: totalKey)
// Compute up-to-date progress
let actualProgress: Double let actualProgress: Double
if totalTime > 0 { if totalTime > 0 {
actualProgress = min(max(lastPlayed / totalTime, 0), 1) actualProgress = min(max(lastPlayed / totalTime, 0), 1)
} else { } else {
actualProgress = item.progress actualProgress = item.progress
}
let remainingTimePercentage = UserDefaults.standard.object(forKey: "remainingTimePercentage") != nil ? UserDefaults.standard.double(forKey: "remainingTimePercentage") : 90.0
let threshold = (100.0 - remainingTimePercentage) / 100.0 // If watched 90%, remove it
if actualProgress >= threshold { if actualProgress >= 0.9 {
remove(item: item) remove(item: item)
return return
} }
var updatedItem = item // Otherwise update progress and remove old episodes from the same show
updatedItem.progress = actualProgress var updatedItem = item
updatedItem.progress = actualProgress
var items = fetchItems()
var items = fetchItems()
let showTitle = item.mediaTitle.replacingOccurrences(of: "Episode \\d+.*$", with: "", options: .regularExpression)
let showTitle = item.mediaTitle.replacingOccurrences(of: "Episode \\d+.*$", with: "", options: .regularExpression)
.trimmingCharacters(in: .whitespacesAndNewlines)
items.removeAll { existingItem in
let existingShowTitle = existingItem.mediaTitle.replacingOccurrences(of: "Episode \\d+.*$", with: "", options: .regularExpression)
.trimmingCharacters(in: .whitespacesAndNewlines) .trimmingCharacters(in: .whitespacesAndNewlines)
items.removeAll { existingItem in return showTitle == existingShowTitle &&
let existingShowTitle = existingItem.mediaTitle.replacingOccurrences(of: "Episode \\d+.*$", with: "", options: .regularExpression) existingItem.episodeNumber < item.episodeNumber &&
.trimmingCharacters(in: .whitespacesAndNewlines) existingItem.progress >= 0.8
}
let remainingTimePercentage = UserDefaults.standard.object(forKey: "remainingTimePercentage") != nil ? UserDefaults.standard.double(forKey: "remainingTimePercentage") : 90.0
let threshold = (100.0 - remainingTimePercentage) / 100.0 items.removeAll { existing in
return showTitle == existingShowTitle && existing.fullUrl == item.fullUrl &&
existingItem.episodeNumber < item.episodeNumber && existing.episodeNumber == item.episodeNumber &&
existingItem.progress >= threshold existing.module.metadata.sourceName == item.module.metadata.sourceName
} }
items.removeAll { existing in items.append(updatedItem)
existing.fullUrl == item.fullUrl &&
existing.episodeNumber == item.episodeNumber && if let data = try? JSONEncoder().encode(items) {
existing.module.metadata.sourceName == item.module.metadata.sourceName UserDefaults.standard.set(data, forKey: storageKey)
}
items.append(updatedItem)
if let data = try? JSONEncoder().encode(items) {
UserDefaults.standard.set(data, forKey: storageKey)
}
} }
} }