Set status as "Error" if downloaded zip is invalid

(#29)
This commit is contained in:
Alex Ling
2020-04-08 10:30:29 +00:00
parent fc6a33e5fd
commit 39f4897fc5
3 changed files with 28 additions and 18 deletions

View File

@@ -106,7 +106,13 @@ class Title
next
end
if [".zip", ".cbz"].includes? File.extname path
next if !valid_zip path
zip_exception = validate_zip path
unless zip_exception.nil?
@logger.warn "File #{path} is corrupted or is not a valid zip " \
"archive. Ignoring it."
@logger.debug "Zip error: #{zip_exception}"
next
end
entry = Entry.new path, self, @id, storage
@entries << entry if entry.pages > 0
end
@@ -171,20 +177,6 @@ class Title
@entries.size + @title_ids.size
end
# When downloading from MangaDex, the zip/cbz file would not be valid
# before the download is completed. If we scan the zip file,
# Entry.new would throw, so we use this method to check before
# constructing Entry
private def valid_zip(path : String)
file = Zip::File.new path
file.close
true
rescue
@logger.warn "File #{path} is corrupted or is not a valid zip " \
"archive. Ignoring it."
false
end
def get_entry(eid)
@entries.find { |e| e.id == eid }
end