improve module
This commit is contained in:
parent
c8ce4db2a2
commit
3289b801f5
2 changed files with 20 additions and 4 deletions
132
scanbuddy.sh
Executable file
132
scanbuddy.sh
Executable file
|
|
@ -0,0 +1,132 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# option values for the brother DS-740D scanner
|
||||
simplex_source='Automatic Document Feeder(left aligned)'
|
||||
duplex_source='Automatic Document Feeder(left aligned,Duplex)'
|
||||
color_mode='24bit Color[Fast]'
|
||||
bw_mode='Black & White'
|
||||
grayscale_mode='True Gray'
|
||||
valid_resolutions=("100" "150" "200" "300" "400" "600" "1200")
|
||||
|
||||
# default options for scanning
|
||||
sides=$simplex_source
|
||||
mode='c'
|
||||
resolution='300'
|
||||
|
||||
current_page=$(find "$PWD" -name "out*.pdf" | sort | tail -n 1);
|
||||
read -r current_pageno <<<"${current_page//[^0-9]/ }"
|
||||
current_pageno=${current_pageno:-0}
|
||||
last_out_file="out$current_pageno.pdf"
|
||||
next_out_file="out$((current_pageno+1)).pdf"
|
||||
|
||||
scan() {
|
||||
# device="brother5:bus2;dev2"
|
||||
device=$(scanimage -f "%d%n" | grep brother5 | head -n 1)
|
||||
echo "Selecting scanner '$device'"
|
||||
|
||||
usage() {
|
||||
echo "scanbuddy.bash scan -d -r <resolution($resolution)> -b <c|b|g>"
|
||||
}
|
||||
|
||||
while getopts "dr:c:" flag; do
|
||||
case ${flag} in
|
||||
d)
|
||||
echo "Scanning duplex"
|
||||
sides=$duplex_source
|
||||
;;
|
||||
r)
|
||||
if [[ ! " ${valid_resolutions[*]} " =~ [[:space:]]${OPTARG}[[:space:]] ]]; then
|
||||
echo "Resolution '$OPTARG' not supported!"
|
||||
echo "Supported resolutions: $(printf %s "${valid_resolutions[*]}")"
|
||||
exit 1
|
||||
fi
|
||||
resolution=$OPTARG
|
||||
;;
|
||||
c)
|
||||
mode=$OPTARG
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
case $mode in
|
||||
c)
|
||||
scanner_mode=$color_mode
|
||||
;;
|
||||
b)
|
||||
scanner_mode=$bw_mode
|
||||
;;
|
||||
g)
|
||||
scanner_mode=$grayscale_mode
|
||||
;;
|
||||
*)
|
||||
echo "Mode '$mode' not supported! Supported modes: (c)olour|(b)lack & white|(g)reyscale"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "Scanning to '$next_out_file'..."
|
||||
scanimage \
|
||||
--device-name="$device" \
|
||||
--format=pdf \
|
||||
--output-file="$next_out_file" \
|
||||
--mode="$scanner_mode" \
|
||||
--resolution="$resolution" \
|
||||
--source="$sides" \
|
||||
-x 210 -y 297 # A4
|
||||
}
|
||||
|
||||
clean() {
|
||||
echo "Cleaning up..."
|
||||
rm -rfv "$PWD/out*.pdf"
|
||||
}
|
||||
|
||||
dispatch() {
|
||||
readarray -d '' out_files < <(find . -regextype posix-awk -regex "\./out[0-9]+\.pdf" -print0 | sort -Vz)
|
||||
combined_file=$(mktemp --suff="_scanbuddy.pdf")
|
||||
gs -q -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE="$combined_file" -dBATCH "${out_files[@]}"
|
||||
echo "Merged pdf written to $combined_file"
|
||||
|
||||
# TODO
|
||||
if [ ! -v PAPERLESS_TOKEN ]; then
|
||||
true
|
||||
fi
|
||||
|
||||
# send to paperless
|
||||
PAPERLESS_STATUS=$(curl \
|
||||
-H "Authorization: Token $PAPERLESS_TOKEN" \
|
||||
-F document=@"$combined_file" \
|
||||
"$([ -v PAPERLESS_TAG ] && echo "-F tags=$PAPERLESS_TAG")" \
|
||||
"${PAPERLESS_URL}/api/documents/post_document/") || FAILED=1
|
||||
|
||||
if [ -v FAILED ]; then
|
||||
printf "Paperless failed with message:\n%s" "$PAPERLESS_STATUS"
|
||||
else
|
||||
printf "Paperless consumption job: %s\n" "$PAPERLESS_STATUS"
|
||||
fi
|
||||
|
||||
clean
|
||||
}
|
||||
|
||||
if [ "$#" -lt 1 ]; then
|
||||
echo "You need an argument!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
scan)
|
||||
scan "${@:2}"
|
||||
;;
|
||||
unscan)
|
||||
rm "$last_out_file"
|
||||
;;
|
||||
dispatch)
|
||||
dispatch "${@:2}"
|
||||
;;
|
||||
clean)
|
||||
clean
|
||||
;;
|
||||
*)
|
||||
echo "Usage: scanbuddy scan|unscan|dispatch|clean"
|
||||
;;
|
||||
esac
|
||||
Loading…
Add table
Add a link
Reference in a new issue