ok maybe now pretty please

This commit is contained in:
Francesco 2025-06-02 16:24:52 +02:00
parent 6cad58ac33
commit 41953477a5

View file

@ -102,6 +102,21 @@ struct MediaInfoView: View {
return isCompactLayout ? 20 : 16 return isCompactLayout ? 20 : 16
} }
private var watchingProgress: Double {
guard !episodeLinks.isEmpty else { return 0 }
var watchedCount = 0
for ep in episodeLinks {
let lastPlayedTime = UserDefaults.standard.double(forKey: "lastPlayedTime_\(ep.href)")
let totalTime = UserDefaults.standard.double(forKey: "totalTime_\(ep.href)")
if totalTime > 0 && (totalTime - lastPlayedTime) / totalTime <= 0.1 {
watchedCount += 1
}
}
return Double(watchedCount) / Double(episodeLinks.count)
}
@State private var continueWatchingText: String = "Start Watching"
var body: some View { var body: some View {
ZStack { ZStack {
bodyContent bodyContent
@ -142,6 +157,7 @@ struct MediaInfoView: View {
} }
} }
.onAppear { .onAppear {
updateContinueWatchingText()
buttonRefreshTrigger.toggle() buttonRefreshTrigger.toggle()
let savedID = UserDefaults.standard.integer(forKey: "custom_anilist_id_\(href)") let savedID = UserDefaults.standard.integer(forKey: "custom_anilist_id_\(href)")
@ -592,7 +608,7 @@ struct MediaInfoView: View {
HStack(spacing: 8) { HStack(spacing: 8) {
Image(systemName: "play.fill") Image(systemName: "play.fill")
.foregroundColor(colorScheme == .dark ? .black : .white) .foregroundColor(colorScheme == .dark ? .black : .white)
Text(startWatchingText) Text(continueWatchingText)
.font(.system(size: 16, weight: .medium)) .font(.system(size: 16, weight: .medium))
.foregroundColor(colorScheme == .dark ? .black : .white) .foregroundColor(colorScheme == .dark ? .black : .white)
} }
@ -973,27 +989,50 @@ struct MediaInfoView: View {
let indices = finishedAndUnfinishedIndices() let indices = finishedAndUnfinishedIndices()
let finished = indices.finished let finished = indices.finished
let unfinished = indices.unfinished let unfinished = indices.unfinished
if episodeLinks.count == 1 { if episodeLinks.count == 1 {
if let unfinishedIndex = unfinished { if unfinished != nil {
return "Continue Watching" return "Continue Watching"
} }
return "Start Watching" return "Start Watching"
} }
if let finishedIndex = finished, finishedIndex < episodeLinks.count - 1 { if let finishedIndex = finished, finishedIndex < episodeLinks.count - 1 {
let nextEp = episodeLinks[finishedIndex + 1] let nextEp = episodeLinks[finishedIndex + 1]
return "Start Watching Episode \(nextEp.number)" return "Start Watching Episode \(nextEp.number)"
} }
if let unfinishedIndex = unfinished { if let unfinishedIndex = unfinished {
let currentEp = episodeLinks[unfinishedIndex] let currentEp = episodeLinks[unfinishedIndex]
return "Continue Watching Episode \(currentEp.number)" return "Continue Watching Episode \(currentEp.number)"
} }
return "Start Watching" return "Start Watching"
} }
private func updateContinueWatchingText() {
let indices = finishedAndUnfinishedIndices()
let unfinishedIndex = indices.unfinished
if let unfinishedIndex = unfinishedIndex {
let ep = episodeLinks[unfinishedIndex]
if isGroupedBySeasons {
let seasons = groupedEpisodes()
for (seasonIdx, seasonEpisodes) in seasons.enumerated() {
if let epIdx = seasonEpisodes.firstIndex(where: { $0.number == ep.number }) {
continueWatchingText = "Continue Watching S\(seasonIdx + 1) E\(epIdx + 1)"
return
}
}
continueWatchingText = "Continue Watching S1 E\(ep.number)"
} else {
continueWatchingText = "Continue Watching episode \(ep.number)"
}
} else {
continueWatchingText = "Start Watching"
}
}
private func playFirstUnwatchedEpisode() { private func playFirstUnwatchedEpisode() {
let indices = finishedAndUnfinishedIndices() let indices = finishedAndUnfinishedIndices()
let finished = indices.finished let finished = indices.finished
@ -1365,7 +1404,7 @@ struct MediaInfoView: View {
headers: headers ?? nil headers: headers ?? nil
) )
customMediaPlayer.modalPresentationStyle = .overFullScreen customMediaPlayer.modalPresentationStyle = .overFullScreen
Logger.shared.log("Opening custom media player with stream URL: \(url), and subtitles URL: \(subtitles)", type: "Stream") Logger.shared.log("Opening custom media player with stream URL: \(url), and subtitles URL: \(String(describing: subtitles))", type: "Stream")
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene, if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
let window = windowScene.windows.first, let window = windowScene.windows.first,
@ -1707,7 +1746,6 @@ struct MediaInfoView: View {
print("Bulk download headers: \(headers)") print("Bulk download headers: \(headers)")
fetchEpisodeMetadataForDownload(episode: episode) { metadata in fetchEpisodeMetadataForDownload(episode: episode) { metadata in
let episodeTitle = metadata?.title["en"] ?? metadata?.title.values.first ?? ""
let episodeImageUrl = metadata?.imageUrl ?? "" let episodeImageUrl = metadata?.imageUrl ?? ""
let episodeName = metadata?.title["en"] ?? "Episode \(episode.number)" let episodeName = metadata?.title["en"] ?? "Episode \(episode.number)"