Add main code.
This commit is contained in:
		@@ -1,5 +1,6 @@
 | 
			
		||||
# -*- encoding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
import logging
 | 
			
		||||
import tempfile
 | 
			
		||||
import urllib.request
 | 
			
		||||
from dataclasses import dataclass
 | 
			
		||||
@@ -8,7 +9,7 @@ from pathlib import Path
 | 
			
		||||
from typing import cast
 | 
			
		||||
 | 
			
		||||
from bs4 import BeautifulSoup
 | 
			
		||||
from PIL import Image
 | 
			
		||||
from PIL import Image, ImageFile
 | 
			
		||||
 | 
			
		||||
from .scans import Chapter, Manga, ScanFetcher
 | 
			
		||||
 | 
			
		||||
@@ -21,6 +22,11 @@ _REQUEST_HEADERS = {
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# fix for some images
 | 
			
		||||
ImageFile.LOAD_TRUNCATED_IMAGES = True
 | 
			
		||||
 | 
			
		||||
LOGGER = logging.getLogger(__package__)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@dataclass(frozen=True)
 | 
			
		||||
class LelScansManga(Manga):
 | 
			
		||||
@@ -72,7 +78,7 @@ class LelScansFetcher(ScanFetcher[LelScansManga, LelScansChapter]):
 | 
			
		||||
        chapter: LelScansChapter,
 | 
			
		||||
        folder: Path,
 | 
			
		||||
    ) -> list[Path]:
 | 
			
		||||
        print("Retrieving scan {}... ".format(chapter.number))
 | 
			
		||||
        LOGGER.info("Retrieving scan {}... ".format(chapter.number))
 | 
			
		||||
        folder.mkdir(exist_ok=True)
 | 
			
		||||
 | 
			
		||||
        # retrieve the main page
 | 
			
		||||
@@ -92,7 +98,7 @@ class LelScansFetcher(ScanFetcher[LelScansManga, LelScansChapter]):
 | 
			
		||||
        # Download each page of the scan
 | 
			
		||||
        def retrieve_page(page: tuple[int, str]) -> Path | None:
 | 
			
		||||
            number, url = page
 | 
			
		||||
            print("  Retrieving page {:02}/{:02d}".format(number, len(pages)))
 | 
			
		||||
            LOGGER.info("  Retrieving page {:02}/{:02d}".format(number, len(pages)))
 | 
			
		||||
            soup = BeautifulSoup(
 | 
			
		||||
                self._request(url),
 | 
			
		||||
                "html.parser",
 | 
			
		||||
@@ -114,7 +120,7 @@ class LelScansFetcher(ScanFetcher[LelScansManga, LelScansChapter]):
 | 
			
		||||
            try:
 | 
			
		||||
                Image.open(filepath).convert("RGB").save(filepath)
 | 
			
		||||
            except (OSError, KeyError):
 | 
			
		||||
                print(
 | 
			
		||||
                LOGGER.warning(
 | 
			
		||||
                    "    Failed to convert page {:02}/{:02d}".format(number, len(pages))
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
@@ -136,6 +142,7 @@ class LelScansFetcher(ScanFetcher[LelScansManga, LelScansChapter]):
 | 
			
		||||
            images = self._fetch_chapter(chapter, folder)
 | 
			
		||||
 | 
			
		||||
        if pdf is not None:
 | 
			
		||||
            LOGGER.info("Merging scan {}... ".format(chapter.number))
 | 
			
		||||
            self._merge_scan(pdf, images)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
# -*- encoding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
import re
 | 
			
		||||
from abc import abstractmethod
 | 
			
		||||
from dataclasses import dataclass
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
@@ -34,6 +35,26 @@ class ScanFetcher(Generic[_MangaT, _ChapterT]):
 | 
			
		||||
        """
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    def find_manga(self, name_regex: re.Pattern | str) -> _MangaT | None:
 | 
			
		||||
        """
 | 
			
		||||
        Fetch the list of manga and find the one that match the given regex.
 | 
			
		||||
 | 
			
		||||
        Args:
 | 
			
		||||
            name_regex: Regex to use to match name.
 | 
			
		||||
 | 
			
		||||
        Returns:
 | 
			
		||||
            The first manga found, or None if no manga was found.
 | 
			
		||||
        """
 | 
			
		||||
        if isinstance(name_regex, str):
 | 
			
		||||
            name_regex = re.compile(name_regex)
 | 
			
		||||
 | 
			
		||||
        mangas = self.list_mangas()
 | 
			
		||||
        for manga in mangas:
 | 
			
		||||
            if name_regex.search(manga.name):
 | 
			
		||||
                return manga
 | 
			
		||||
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    def list_chapters(self, manga: _MangaT) -> list[_ChapterT]:
 | 
			
		||||
        """
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user