@@ -107,7 +107,7 @@ struct MediaInfoView: View {
107107 . frame ( width: 20 , height: 20 )
108108 . foregroundColor ( . primary)
109109 }
110- . padding ( 5 )
110+ . padding ( 4 )
111111 . background ( Capsule ( ) . fill ( Color . accentColor. opacity ( 0.4 ) ) )
112112 }
113113 }
@@ -139,11 +139,12 @@ struct MediaInfoView: View {
139139
140140 HStack {
141141 Button ( action: {
142+ playFirstUnwatchedEpisode ( )
142143 } ) {
143144 HStack {
144145 Image ( systemName: " play.fill " )
145146 . foregroundColor ( . primary)
146- Text ( " Start Watching " )
147+ Text ( startWatchingText )
147148 . font ( . headline)
148149 . foregroundColor ( . primary)
149150 }
@@ -205,7 +206,6 @@ struct MediaInfoView: View {
205206 if !isFetchingEpisode {
206207 isFetchingEpisode = true
207208 fetchStream ( href: ep. href)
208- DropManager . shared. showDrop ( title: " Fetching Stream " , subtitle: " " , duration: 0.5 , icon: UIImage ( systemName: " arrow.triangle.2.circlepath " ) )
209209 }
210210 }
211211 . disabled ( isFetchingEpisode)
@@ -267,6 +267,35 @@ struct MediaInfoView: View {
267267 }
268268 }
269269
270+ private var startWatchingText : String {
271+ for ep in episodeLinks {
272+ let lastPlayedTime = UserDefaults . standard. double ( forKey: " lastPlayedTime_ \( ep. href) " )
273+ let totalTime = UserDefaults . standard. double ( forKey: " totalTime_ \( ep. href) " )
274+ let progress = totalTime > 0 ? lastPlayedTime / totalTime : 0
275+ if progress >= 0.1 && ( totalTime - lastPlayedTime) > ( totalTime * 0.1 ) {
276+ return " Continue Watching Episode \( ep. number) "
277+ }
278+ }
279+ return " Start Watching "
280+ }
281+
282+ private func playFirstUnwatchedEpisode( ) {
283+ for ep in episodeLinks {
284+ let lastPlayedTime = UserDefaults . standard. double ( forKey: " lastPlayedTime_ \( ep. href) " )
285+ let totalTime = UserDefaults . standard. double ( forKey: " totalTime_ \( ep. href) " )
286+ let progress = totalTime > 0 ? lastPlayedTime / totalTime : 0
287+ if progress >= 0.1 && ( totalTime - lastPlayedTime) > ( totalTime * 0.1 ) {
288+ selectedEpisodeNumber = ep. number
289+ fetchStream ( href: ep. href)
290+ return
291+ }
292+ }
293+ if let firstEpisode = episodeLinks. first {
294+ selectedEpisodeNumber = firstEpisode. number
295+ fetchStream ( href: firstEpisode. href)
296+ }
297+ }
298+
270299 private func generateRanges( ) -> [ Range < Int > ] {
271300 let chunkSize = episodeChunkSize
272301 let totalEpisodes = episodeLinks. count
@@ -297,8 +326,7 @@ struct MediaInfoView: View {
297326 self . isLoading = false
298327 self . isRefetching = false
299328 }
300- }
301- else {
329+ } else {
302330 jsController. fetchDetails ( url: href) { items, episodes in
303331 if let item = items. first {
304332 self . synopsis = item. description
@@ -320,6 +348,7 @@ struct MediaInfoView: View {
320348 }
321349
322350 func fetchStream( href: String ) {
351+ DropManager . shared. showDrop ( title: " Fetching Stream " , subtitle: " " , duration: 0.5 , icon: UIImage ( systemName: " arrow.triangle.2.circlepath " ) )
323352 DispatchQueue . main. asyncAfter ( deadline: . now( ) + 0.5 ) {
324353 Task {
325354 do {
@@ -397,6 +426,8 @@ struct MediaInfoView: View {
397426 selectNextEpisode ( )
398427 }
399428 )
429+ print ( Int ( selectedEpisodeNumber) )
430+ print ( selectedEpisodeNumber)
400431 let hostingController = UIHostingController ( rootView: customMediaPlayer)
401432 hostingController. modalPresentationStyle = . fullScreen
402433 Logger . shared. log ( " Opening custom media player with url: \( url) " )
0 commit comments