maintanance and downloading files.

This commit is contained in:
Krzysztof Płaczek
2022-11-16 07:18:21 +01:00
parent 086e4b56b5
commit 21f61b0911
10 changed files with 88 additions and 36 deletions

View File

@@ -0,0 +1,18 @@
<?php
namespace App\Http\Controllers;
use App\Http\SymfonyCastDl\SymfonyCastDlService;
use App\Models\Chapter;
class ChapterController extends Controller
{
public function index(Chapter $chapter, SymfonyCastDlService $symfonyCastDlService)
{
$symfonyCastDlService->videoSize($chapter);
$symfonyCastDlService->downloadFile($chapter);
// $symfonyCastDlService->videoSize($chapter);
// file_put_contents('movie.avi', file_get_contents($chapter->video_link));
dd($chapter->toArray());
}
}

View File

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use App\Http\SymfonyCastDl\HtmlParser;
use App\Http\SymfonyCastDl\SymfonyCastDlService;
use App\Jobs\DownloadVideoFile;
use App\Models\Chapter;
use App\Models\Course;
use Illuminate\View\View;
@@ -15,17 +16,10 @@ class CourseController extends Controller
return view('course.index', compact('course'));
}
public function chapter(Chapter $chapter, HtmlParser $htmlParser)
{
$service = new SymfonyCastDlService($htmlParser);
$service->videoSize($chapter);
dd($chapter->toArray());
}
public function sync(Course $course)
{
$course->chapters->each->update(['sync_offline' => 1]);
$course->chapters->each(fn($chapter) => DownloadVideoFile::dispatch($chapter->id));
return redirect(route('course.index', ['course' => $course]));
}

View File

@@ -12,12 +12,13 @@ class Index extends Controller
public function index()
{
$courses = Course::with('chapters')->withCount('chapters')->get();
// dd($courses->toArray());
return view('index', compact(['courses']));
}
public function download(HtmlParser $htmlParser)
public function download(SymfonyCastDlService $symfonyCastDlService)
{
$service = new SymfonyCastDlService($htmlParser);
$service->getInfo();
$symfonyCastDlService->getInfo();
}
}

View File

@@ -26,7 +26,7 @@ class HtmlParser
$course = Course::firstOrNew(['course_id' => $courseId]);
$course->name = $courseItem->first('h3')->text();
$course->thumbnail = $courseItem->first('img.course-list-item-img')->attr('src');
$course->link = $courseItem->first('a')->attr('href');
$course->link = last(explode('/', $courseItem->first('a')->attr('href')));
$course->status = $courseItem->attr('data-status');
$course->course_id = $courseItem->attr('data-id');
$course->numberofchapters = $courseItem->attr('data-chapter-count');
@@ -49,15 +49,12 @@ class HtmlParser
if ($chapterItem->first('.col')) {
$chapterId++;
// if(!$chapterItem->first('.length-styling')){
// dd($chapterItem->html());
// }
$chapter = Chapter::firstOrNew(['course_id' => $courseId, 'order' => $chapterId]);
$chapter->duration = $chapterItem->first('.length-styling')?->text();
$chapter->order = $chapterId;
$chapter->course_id = $courseId;
if ($link = trim($chapterItem->first('a')->attr('href'), '#')) {
$chapter->link = config('symfonycast.base_url') . $link;
$chapter->link = last(explode('/', $link));;
$chapter->video_link = config('symfonycast.base_url') . $link . '/download/video';
}
$chapter->title = preg_replace('/\v(?:[\v\h]+)/', '', $chapterItem->first('.col')->text());

View File

@@ -21,10 +21,9 @@ class SymfonyCastDlService
$response = $this->client->get('login');
$token = $htmlParser->getCsrfToken($response);
$response = $this->client->post('login', [
$this->client->post('login', [
'form_params' => [
'email' => config('symfonycast.login'),
'password' => config('symfonycast.password'),
@@ -44,7 +43,7 @@ class SymfonyCastDlService
$courses->each->save();
/** @var Course $course */
foreach ($courses as $course) {
$singleCoursePage = $this->client->get($course->link);
$singleCoursePage = $this->client->get('/screencast/' . $course->link);
$chapters = $this->htmlParser->getCourseDetails($singleCoursePage, $course->id);
$chapters->each->save();
$chapters->each(fn($chapter) => GetVideoFileSize::dispatch($chapter->id));
@@ -55,6 +54,7 @@ class SymfonyCastDlService
{
try {
if (!$chapter->video_size) {
echo 1;
$response = $this->client->head($chapter->video_link);
if ($response->hasHeader('Content-Length')) {
$chapter->video_size = $response->getHeader('Content-Length')[0];
@@ -65,4 +65,17 @@ class SymfonyCastDlService
}
return $chapter;
}
public function downloadFile(Chapter $chapter): bool
{
if (!is_dir($chapter->course_id . '/')) {
mkdir($chapter->course_id);
}
$this->client->request(
'GET',
$chapter->video_link,
['sink' => $chapter->course_id . '/' . $chapter->id . '.mp4']
);
return true;
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace App\Jobs;
use App\Http\SymfonyCastDl\SymfonyCastDlService;
use App\Models\Chapter;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class DownloadVideoFile implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct(private int $chapterId)
{
//
}
public function handle(SymfonyCastDlService $symfonyCastDlService)
{
$symfonyCastDlService->videoSize(Chapter::find($this->chapterId));
}
}

View File

@@ -20,17 +20,8 @@ class GetVideoFileSize implements ShouldQueue
{
}
public function handle(HtmlParser $htmlParser)
public function handle(SymfonyCastDlService $symfonyCastDlService)
{
// $this->
// $this->videoSize($this->chapter);
// $this->chapter->save();
$service = new SymfonyCastDlService($htmlParser);
$service->videoSize(Chapter::find($this->chapterId));
// dd($this->chapterId);
$symfonyCastDlService->videoSize(Chapter::find($this->chapterId));
}
}

View File

@@ -2,6 +2,8 @@
namespace App\Providers;
use App\Http\SymfonyCastDl\HtmlParser;
use App\Http\SymfonyCastDl\SymfonyCastDlService;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
@@ -13,7 +15,10 @@ class AppServiceProvider extends ServiceProvider
*/
public function register()
{
//
$this->app->singleton(SymfonyCastDlService::class, function ($app) {
$htmlparser = new HtmlParser();
return new SymfonyCastDlService($htmlparser);
});
}
/**