mirror of
https://github.com/cranci1/Sora.git
synced 2026-04-21 00:22:12 +00:00
ok maybe now pretty please
This commit is contained in:
parent
6cad58ac33
commit
41953477a5
1 changed files with 47 additions and 9 deletions
|
|
@ -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)"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue