diff --git a/contrib/api_template.py b/contrib/api_template.py index 2ec34fa..7560372 100644 --- a/contrib/api_template.py +++ b/contrib/api_template.py @@ -97,6 +97,23 @@ class YourAPI: The metadata as a dict """ + # metadata types. have to be correct to be valid + { + "Title": str, + "Series": str, + "Number": str, + "Count": int, + "Volume": int, + "Summary": str, + "Genre": str, + "Web": str, + "PageCount": int, + "LanguageISO": str, + "Format": str, + "ScanInformation": str, + "SeriesGroup": str, + } + # example return { "Volume": "abc", diff --git a/mangadlp/api/mangadex.py b/mangadlp/api/mangadex.py index 4e35110..1ad23ce 100644 --- a/mangadlp/api/mangadex.py +++ b/mangadlp/api/mangadex.py @@ -163,12 +163,12 @@ class Mangadex: for chapter in r.json()["data"]: attributes: dict = chapter["attributes"] # chapter infos from feed - chapter_num = attributes.get("chapter") or "" - chapter_vol = attributes.get("volume") or "" - chapter_uuid = chapter.get("id") or "" - chapter_name = attributes.get("title") or "" - chapter_external = attributes.get("externalUrl") or "" - chapter_pages = attributes.get("pages") or "" + chapter_num: str = attributes.get("chapter") or "" + chapter_vol: str = attributes.get("volume") or "" + chapter_uuid: str = chapter.get("id") or "" + chapter_name: str = attributes.get("title") or "" + chapter_external: str = attributes.get("externalUrl") or "" + chapter_pages: int = attributes.get("pages") or 0 # check for chapter title and fix it if chapter_name: @@ -268,7 +268,7 @@ class Mangadex: chapter_data = self.manga_chapter_data[chapter] metadata = { - "Volume": chapter_data["volume"], + "Volume": int(chapter_data["volume"]), "Number": chapter_data["chapter"], "PageCount": chapter_data["pages"], "Title": chapter_data["name"], diff --git a/mangadlp/metadata.py b/mangadlp/metadata.py index 7b3f97f..aa49234 100644 --- a/mangadlp/metadata.py +++ b/mangadlp/metadata.py @@ -9,6 +9,23 @@ def write_metadata(chapter_path: Path, metadata: dict) -> None: log.warning("Can't add metadata for pdf format. Skipping") return + # define metadata types + metadata_types: dict[str, type] = { + "Title": str, + "Series": str, + "Number": str, + "Count": int, + "Volume": int, + "Summary": str, + "Genre": str, + "Web": str, + "PageCount": int, + "LanguageISO": str, + "Format": str, + "ScanInformation": str, + "SeriesGroup": str, + } + try: metadata_template = Path("mangadlp/metadata/ComicInfo.xml").read_text( encoding="utf8" @@ -22,12 +39,22 @@ def write_metadata(chapter_path: Path, metadata: dict) -> None: log.info(f"Writing metadata to: '{metadata_file}'") log.debug(f"Metadata items: {metadata}") for key, value in metadata.items(): + # check if metadata is empty if not value: continue + # try to match with template try: metadata_empty["ComicInfo"][key] except KeyError: continue + # check if metadata type is correct + log.debug(f"Key:{key} -> value={type(value)} -> check={metadata_types[key]}") + if not isinstance(value, metadata_types[key]): # noqa + log.warning( + f"Metadata has wrong type: {key}:{metadata_types[key]} -> {value}" + ) + continue + log.debug(f"Updating metadata: '{key}' = '{value}'") metadata_empty["ComicInfo"][key] = value diff --git a/mangadlp/metadata/ComicInfo.xml b/mangadlp/metadata/ComicInfo.xml index 0bc92af..5472a58 100644 --- a/mangadlp/metadata/ComicInfo.xml +++ b/mangadlp/metadata/ComicInfo.xml @@ -14,7 +14,7 @@ Unknown - Yes Unknown + Yes Downloaded with https://github.com/olofvndrhr/manga-dlp