detecta extensions mal nombrades cbz/cbr
This commit is contained in:
+47
-16
@@ -2,7 +2,7 @@
|
||||
|
||||
import os
|
||||
import zipfile
|
||||
import rarfile # Necesita: pip install rarfile
|
||||
import rarfile
|
||||
|
||||
IMAGE_EXTENSIONS = {".jpg", ".jpeg", ".png", ".webp"}
|
||||
TRASH_FILES = {"thumbs.db", ".ds_store"}
|
||||
@@ -14,6 +14,7 @@ class ValidationResult:
|
||||
self.errors = []
|
||||
self.warnings = []
|
||||
self.images = []
|
||||
self.real_format = None # "rar", "zip", None
|
||||
|
||||
def add_error(self, msg):
|
||||
self.is_valid = False
|
||||
@@ -27,31 +28,61 @@ class ValidationResult:
|
||||
return f"[{status}] {self.path}"
|
||||
|
||||
|
||||
def try_open_rar(path):
|
||||
try:
|
||||
archive = rarfile.RarFile(path, "r")
|
||||
archive.namelist() # fuerza lectura
|
||||
return archive
|
||||
except:
|
||||
return None
|
||||
|
||||
|
||||
def try_open_zip(path):
|
||||
try:
|
||||
archive = zipfile.ZipFile(path, "r")
|
||||
archive.namelist()
|
||||
return archive
|
||||
except:
|
||||
return None
|
||||
|
||||
|
||||
def validate_comic(path):
|
||||
"""
|
||||
Valida un archivo CBR/CBZ y devuelve un ValidationResult.
|
||||
"""
|
||||
result = ValidationResult(path)
|
||||
ext = os.path.splitext(path)[1].lower()
|
||||
|
||||
try:
|
||||
if ext == ".cbz":
|
||||
archive = zipfile.ZipFile(path, "r")
|
||||
file_list = archive.namelist()
|
||||
|
||||
elif ext == ".cbr":
|
||||
archive = rarfile.RarFile(path, "r")
|
||||
file_list = archive.namelist()
|
||||
archive = None
|
||||
|
||||
# 1) Intentar abrir como RAR
|
||||
if ext == ".cbr":
|
||||
archive = try_open_rar(path)
|
||||
if archive:
|
||||
result.real_format = "rar"
|
||||
else:
|
||||
result.add_error("Extensión no reconocida")
|
||||
# 2) Intentar abrir como ZIP (CBZ renombrado)
|
||||
archive = try_open_zip(path)
|
||||
if archive:
|
||||
result.real_format = "zip"
|
||||
result.add_warning("El archivo tiene extensión .cbr pero es un ZIP (CBZ renombrado)")
|
||||
else:
|
||||
result.add_error("No se pudo abrir como RAR ni como ZIP")
|
||||
return result
|
||||
|
||||
# 3) Si es CBZ, abrir como ZIP
|
||||
elif ext == ".cbz":
|
||||
archive = try_open_zip(path)
|
||||
if archive:
|
||||
result.real_format = "zip"
|
||||
else:
|
||||
result.add_error("No se pudo abrir el archivo ZIP")
|
||||
return result
|
||||
|
||||
except Exception as e:
|
||||
result.add_error(f"No se pudo abrir el archivo: {e}")
|
||||
else:
|
||||
result.add_error("Extensión no reconocida")
|
||||
return result
|
||||
|
||||
# Comprobar imágenes
|
||||
# 4) Validar contenido
|
||||
file_list = archive.namelist()
|
||||
|
||||
for f in file_list:
|
||||
name = f.lower()
|
||||
_, fext = os.path.splitext(name)
|
||||
|
||||
Reference in New Issue
Block a user