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