diff --git a/app/Http/Controllers/ChapterController.php b/app/Http/Controllers/ChapterController.php index c3c0aef..c9ff7e9 100644 --- a/app/Http/Controllers/ChapterController.php +++ b/app/Http/Controllers/ChapterController.php @@ -10,15 +10,17 @@ class ChapterController extends Controller public function __invoke(Course $course, int $chapter, SymfonyCastDlService $symfonyCastDlService) { $chapter = $course->chapters->firstWhere('order', $chapter); - $symfonyCastDlService->videoSize($chapter); if ($chapter->sync_offline) { $symfonyCastDlService->downloadFile($chapter); + $videoUrl = $chapter->video_url; + } else { + $videoUrl = $symfonyCastDlService->getChapterInfo($chapter); } - $chapters = $chapter->course->chapters; + $chapters = $chapter->course->chapters; $next = $chapters->where('order', '>', $chapter->order)->first(); $prev = $chapters->where('order', '<', $chapter->order)->sortByDesc('order')->first(); - return view('chapter.index', compact('chapter', 'chapters', 'prev', 'next')); + return view('chapter.index', compact('chapter', 'chapters', 'prev', 'next', 'videoUrl')); } } diff --git a/app/Http/SymfonyCastDl/HtmlParser.php b/app/Http/SymfonyCastDl/HtmlParser.php index 2cd1d71..0a2d808 100644 --- a/app/Http/SymfonyCastDl/HtmlParser.php +++ b/app/Http/SymfonyCastDl/HtmlParser.php @@ -49,7 +49,6 @@ class HtmlParser foreach ($document->find('ul.chapter-list li') as $chapterItem) { if ($chapterItem->first('.col')) { $chapterId++; - $chapter = Chapter::firstOrNew(['course_id' => $courseId, 'order' => $chapterId]); $chapter->duration = $chapterItem->first('.length-styling')?->text(); $chapter->order = $chapterId; @@ -63,8 +62,13 @@ class HtmlParser $chapters->add($chapter); } } - return $chapters; } + public function getVideoSource(Response $respose): string + { + $document = new Document($respose->getBody()->getContents()); + return $document->first('video source')->getAttribute('src'); + } + } diff --git a/app/Http/SymfonyCastDl/SymfonyCastDlService.php b/app/Http/SymfonyCastDl/SymfonyCastDlService.php index eed05f3..6713659 100644 --- a/app/Http/SymfonyCastDl/SymfonyCastDlService.php +++ b/app/Http/SymfonyCastDl/SymfonyCastDlService.php @@ -7,6 +7,7 @@ use App\Models\Chapter; use App\Models\Course; use GuzzleHttp\TransferStats; use GuzzleHttp\Client; +use JetBrains\PhpStorm\NoReturn; class SymfonyCastDlService { @@ -46,6 +47,13 @@ class SymfonyCastDlService } } + public function getChapterInfo(Chapter $chapter): string + { + $course = $chapter->course; + $chapterPage = $this->client->get('/screencast/' . $course->link . DIRECTORY_SEPARATOR . $chapter->link); + return $this->htmlParser->getVideoSource($chapterPage); + } + public function videoSize(Chapter $chapter): Chapter { if (!$chapter->video_size) { diff --git a/resources/views/chapter/index.blade.php b/resources/views/chapter/index.blade.php index 8b7c12a..ad80019 100644 --- a/resources/views/chapter/index.blade.php +++ b/resources/views/chapter/index.blade.php @@ -17,12 +17,12 @@ @endif