Added:
- Messenger, Mercure - chapter download flow (lelscan only)
This commit is contained in:
57
src/MessageHandler/DownloadChapterHandler.php
Normal file
57
src/MessageHandler/DownloadChapterHandler.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace App\MessageHandler;
|
||||
|
||||
use App\Entity\ContentSource;
|
||||
use App\Message\DownloadChapter;
|
||||
use App\Repository\ChapterRepository;
|
||||
use App\Repository\MangaRepository;
|
||||
use App\Service\LelScansProviderService;
|
||||
use App\Service\MangaScraperService;
|
||||
use App\Service\NotificationService;
|
||||
use Exception;
|
||||
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
|
||||
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
|
||||
|
||||
#[AsMessageHandler]
|
||||
readonly class DownloadChapterHandler
|
||||
{
|
||||
public function __construct(
|
||||
private ChapterRepository $chapterRepository,
|
||||
private MangaScraperService $mangaScraperService,
|
||||
private NotificationService $notificationService
|
||||
)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
public function __invoke(DownloadChapter $message): void
|
||||
{
|
||||
$chapter = $this->chapterRepository->find($message->getChapterId());
|
||||
if (!$chapter) {
|
||||
$this->notificationService->sendUpdate('notification', ['status' => 'error', 'message' => 'Chapter not found.']);
|
||||
throw new BadRequestHttpException('Chapter not found');
|
||||
}elseif ($chapter->getLocalPath() !== null){
|
||||
$this->notificationService->sendUpdate('notification', ['status' => 'error', 'message' => 'Chapter already scraped.']);
|
||||
throw new BadRequestHttpException('Chapter already downloaded');
|
||||
}
|
||||
|
||||
$lelScanSource = new ContentSource();
|
||||
$lelScanSource->setBaseUrl('https://lelscans.net')
|
||||
->setImageSelector('#image img')
|
||||
->setChapterUrlFormat('https://lelscans.net/scan-%s/%s')
|
||||
->setNextPageSelector('a[title="Suivant"]')
|
||||
->setScrapingType('html');
|
||||
|
||||
try {
|
||||
$this->mangaScraperService->scrapeChapter($chapter, $lelScanSource);
|
||||
} catch (Exception $e) {
|
||||
$this->notificationService->sendUpdate('notification', ['status' => 'error', 'message' => 'An error occurred while scraping the chapter.']);
|
||||
throw new Exception('Error scraping chapter: ' . $e->getMessage());
|
||||
}
|
||||
$this->notificationService->sendUpdate('notification', ['status' => 'success', 'message' => 'Chapter scraped successfully.']);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user