From 15f4507fc12b57543817568b4c25f371b2b78a3e Mon Sep 17 00:00:00 2001 From: stepanokdev <100592747+Stepanokdev@users.noreply.github.com> Date: Wed, 1 Nov 2023 14:15:28 +0200 Subject: [PATCH 1/3] enable AirPlay screencasting --- Course/Course/Presentation/Video/PlayerViewController.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Course/Course/Presentation/Video/PlayerViewController.swift b/Course/Course/Presentation/Video/PlayerViewController.swift index 01a27e640..bbabc73f4 100644 --- a/Course/Course/Presentation/Video/PlayerViewController.swift +++ b/Course/Course/Presentation/Video/PlayerViewController.swift @@ -73,6 +73,7 @@ struct PlayerViewController: UIViewControllerRepresentable { if asset?.url.absoluteString != videoURL?.absoluteString { if playerController.player == nil { playerController.player = AVPlayer() + playerController.player?.allowsExternalPlayback = true } playerController.player?.replaceCurrentItem(with: AVPlayerItem(url: videoURL!)) addPeriodicTimeObserver(playerController, currentProgress: { progress, seconds in From 4c638153b5d72a6f00bacead2f199c8a0c8f3d86 Mon Sep 17 00:00:00 2001 From: stepanokdev <100592747+Stepanokdev@users.noreply.github.com> Date: Thu, 2 Nov 2023 15:49:56 +0200 Subject: [PATCH 2/3] fix the bug where screencast continues to stream the video even if the user clicks next --- .../Presentation/Unit/CourseUnitView.swift | 23 +++++++++++++++---- .../Video/EncodedVideoPlayer.swift | 3 +++ .../Video/YouTubeVideoPlayer.swift | 4 ++++ .../Video/YouTubeVideoPlayerViewModel.swift | 2 +- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/Course/Course/Presentation/Unit/CourseUnitView.swift b/Course/Course/Presentation/Unit/CourseUnitView.swift index 484fdda9f..c74f0e7b0 100644 --- a/Course/Course/Presentation/Unit/CourseUnitView.swift +++ b/Course/Course/Presentation/Unit/CourseUnitView.swift @@ -50,10 +50,10 @@ public struct CourseUnitView: View { let data = Array(viewModel.verticals[viewModel.verticalIndex].childs.enumerated()) ForEach(data, id: \.offset) { index, block in VStack(spacing: 0) { - if index >= viewModel.index - 1 && index <= viewModel.index + 1 { switch LessonType.from(block) { // MARK: YouTube case let .youtube(url, blockID): + if index >= viewModel.index - 1 && index <= viewModel.index + 1 { if viewModel.connectivity.isInternetAvaliable { YouTubeView( name: block.displayName, @@ -71,8 +71,12 @@ public struct CourseUnitView: View { } else { NoInternetView(playerStateSubject: playerStateSubject) } + } else { + EmptyView() + } // MARK: Encoded Video case let .video(encodedUrl, blockID): + if index == viewModel.index { let url = viewModel.urlForVideoFileOrFallback( blockId: blockID, url: encodedUrl @@ -94,23 +98,33 @@ public struct CourseUnitView: View { } else { NoInternetView(playerStateSubject: playerStateSubject) } + } // MARK: Web case .web(let url): + if index >= viewModel.index - 1 && index <= viewModel.index + 1 { if viewModel.connectivity.isInternetAvaliable { WebView(url: url, viewModel: viewModel) } else { NoInternetView(playerStateSubject: playerStateSubject) } + } else { + EmptyView() + } // MARK: Unknown case .unknown(let url): + if index >= viewModel.index - 1 && index <= viewModel.index + 1 { if viewModel.connectivity.isInternetAvaliable { UnknownView(url: url, viewModel: viewModel) Spacer() } else { NoInternetView(playerStateSubject: playerStateSubject) } + } else { + EmptyView() + } // MARK: Discussion case let .discussion(blockID, blockKey, title): + if index >= viewModel.index - 1 && index <= viewModel.index + 1 { if viewModel.connectivity.isInternetAvaliable { VStack { if showDiscussion { @@ -131,10 +145,11 @@ public struct CourseUnitView: View { } else { NoInternetView(playerStateSubject: playerStateSubject) } + } else { + EmptyView() } - } else { - EmptyView() - } + } + } .frame( width: isHorizontal ? reader.size.width - 16 : reader.size.width, diff --git a/Course/Course/Presentation/Video/EncodedVideoPlayer.swift b/Course/Course/Presentation/Video/EncodedVideoPlayer.swift index 233469250..52ddb98cd 100644 --- a/Course/Course/Presentation/Video/EncodedVideoPlayer.swift +++ b/Course/Course/Presentation/Video/EncodedVideoPlayer.swift @@ -115,6 +115,9 @@ public struct EncodedVideoPlayer: View { } } }.padding(.horizontal, isHorizontal ? 0 : 8) + .onDisappear { + viewModel.controller.player?.allowsExternalPlayback = false + } } private func pauseScrolling() { diff --git a/Course/Course/Presentation/Video/YouTubeVideoPlayer.swift b/Course/Course/Presentation/Video/YouTubeVideoPlayer.swift index 9d12b3183..2201bb6e4 100644 --- a/Course/Course/Presentation/Video/YouTubeVideoPlayer.swift +++ b/Course/Course/Presentation/Video/YouTubeVideoPlayer.swift @@ -70,6 +70,10 @@ public struct YouTubeVideoPlayer: View { ProgressBar(size: 40, lineWidth: 8) } } +// .onDisappear { +// viewModel.youtubePlayer.st +//// viewModel.controller.player?.allowsExternalPlayback = false +// } } } diff --git a/Course/Course/Presentation/Video/YouTubeVideoPlayerViewModel.swift b/Course/Course/Presentation/Video/YouTubeVideoPlayerViewModel.swift index 06bc69f75..9b4440458 100644 --- a/Course/Course/Presentation/Video/YouTubeVideoPlayerViewModel.swift +++ b/Course/Course/Presentation/Video/YouTubeVideoPlayerViewModel.swift @@ -80,7 +80,7 @@ public class YouTubeVideoPlayerViewModel: VideoPlayerViewModel { playerStateSubject.sink(receiveValue: { [weak self] state in switch state { case .pause: - self?.youtubePlayer.pause() + self?.youtubePlayer.stop() case .kill, .none: break } From cfd08a9dd17824237bc3421f9a52641c51bf9e95 Mon Sep 17 00:00:00 2001 From: stepanokdev <100592747+Stepanokdev@users.noreply.github.com> Date: Mon, 6 Nov 2023 12:04:03 +0200 Subject: [PATCH 3/3] remove commented code --- Course/Course/Presentation/Video/YouTubeVideoPlayer.swift | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Course/Course/Presentation/Video/YouTubeVideoPlayer.swift b/Course/Course/Presentation/Video/YouTubeVideoPlayer.swift index 2201bb6e4..9d12b3183 100644 --- a/Course/Course/Presentation/Video/YouTubeVideoPlayer.swift +++ b/Course/Course/Presentation/Video/YouTubeVideoPlayer.swift @@ -70,10 +70,6 @@ public struct YouTubeVideoPlayer: View { ProgressBar(size: 40, lineWidth: 8) } } -// .onDisappear { -// viewModel.youtubePlayer.st -//// viewModel.controller.player?.allowsExternalPlayback = false -// } } }