#!/bin/bash
# Desc: Collects .jpg/jpeg files from a Calibre .htmlz file into .cbz files
# Version: 0.1.2
# Depends: jdupes 1.27.3

for fin in ./*.htmlz; do
    (
        dout="${fin%.*}";
        unzip "$fin" -x / -d "$dout";
        pushd "$dout";
        mapfile -t images < <(cat index.html  | grep -E "(.jpg|.jpeg|.png)" | sed -E -e 's#.+(images/[0-9]+.(jpeg|jpg|png)).+#\1#' | uniq; );
        dout2="./output";
        if [[ -d "$dout2" ]]; then
            rm -r "$dout2";
        fi;
        mkdir "$dout2";
        n=1;
        for path in "${images[@]}"; do
            fnew="${dout2}/$(printf "%06d" "$n").jpg";
            cp "$path" "$fnew";
            ((n++));
        done;
        # Add cover file if present
        if [[ -f cover.jpg ]]; then
            cp -n cover.jpg "${dout2}/000000.jpg";
        fi;
        # Remove duplicate images
        if command -v jdupes 1>/dev/random 2>&1; then
            jdupes -dN "$dout2";
        fi;
        faout="output.cbz";
        if [[ -f "$faout" ]]; then
            rm "$fout";
        fi;
        zip -j output.cbz "$dout2"/*;
    ) &
done;
wait && echo "STATUS:Finished." 1>&2;
