diff --git a/scripts/shell/images-indexer.sh b/scripts/shell/images-indexer.sh index e075b7c..5f821b8 100755 --- a/scripts/shell/images-indexer.sh +++ b/scripts/shell/images-indexer.sh @@ -1,5 +1,23 @@ #!/bin/bash +show_help() { + # echo "Usage: `basename $0` [--no-abort-on-found] [--parallel] [--custom-grep-search|-c ]" + echo "Usage: `basename $0` [--help|-h] [--filter-mode|-f]" + echo "Options:" + echo " --help | -h (optional) Display script's help text" + echo " --filter-mode | -f (optional) The script iterate over the files of a selected folder and store the ones that should be deleted" +} + +filter_mode=false +while [ "$#" -gt 0 ]; do + case "$1" in + --help|-h) show_help; exit ;; + --filter-mode|-f) filter_mode=true; shift;; + *) shift ;; + esac +done + +# commands_to_check=(gallery-dl gdl.sh xdotool) commands_to_check=(gallery-dl gdl.sh) commands_not_found=() @@ -25,7 +43,7 @@ furry_commission_ideas_urls_filename="urls.txt" scripts_path=/home/cloud/repos/personal-devboot/scripts/shell if [ ! -d $furry_commission_ideas_path ]; then - echo "[ERROR] The ideas folder was not found (\"$furry_commission_ideas_path\")" + echo "[ERROR] The images folder was not found (\"$furry_commission_ideas_path\")" exit 1 fi @@ -39,18 +57,22 @@ input_media_url() { echo "$media_url" } -media_url=`input_media_url` -while [ -z "$media_url" ]; do - media_url=`input_media_url` -done +media_url='' -# remove trailing slashes -media_url=`sed 's:/*$::' <<< "$media_url"` +if ! $filter_mode; then + media_url=`input_media_url` + while [ -z "$media_url" ]; do + media_url=`input_media_url` + done -url_regex='(https?)://[-[:alnum:]\+&@#/%?=~_|!:,.;]*[-[:alnum:]\+&@#/%=~_|]' -if [[ ! $media_url =~ $url_regex ]]; then - echo "The URL informed is not valid." - exit 1 + # remove trailing slashes + media_url=`sed 's:/*$::' <<< "$media_url"` + + url_regex='(https?)://[-[:alnum:]\+&@#/%?=~_|!:,.;]*[-[:alnum:]\+&@#/%=~_|]' + if [[ ! $media_url =~ $url_regex ]]; then + echo "The URL informed is not valid." + exit 1 + fi fi cd $furry_commission_ideas_path @@ -129,27 +151,141 @@ fi cd $selected_folder -if [ -f "$furry_commission_ideas_urls_filename" ] && grep -qE "$media_url" -i "$furry_commission_ideas_urls_filename"; then - printf "\n" - echo "[INFO] This folder already has the media informed." - echo "[INFO] Exiting..." +function confirm() { + while true; do + read -n 1 yn + case $yn in + [Yy]* ) return 0;; + [Nn]* ) return 1;; + [Uu]* ) return 2;; + [Cc]* ) exit;; + * ) echo "Please answer YES, NO, or CANCEL.";; + esac + done +} + +escape_string() { + local input="$1" + local escaped="" + + # Iterate over each character in the input string + while IFS= read -r -n1 char; do + case "$char" in + ' '|'\'|'$'|'`'|'!'|'&'|'|'|';'|'<'|'>'|'"'|"'"|'*'|'?'|'['|']'|'{'|'}'|'('|')'|'#') + escaped="${escaped}\\${char}" + ;; + *) + escaped="${escaped}${char}" + ;; + esac + done <<< "$input" + + echo "$escaped" +} + +if $filter_mode; then + files=() + eval_string='' + for file in ./*; do + if [[ "$file" != *.png && "$file" != *.jpeg && "$file" != *.jpg ]]; then + continue + fi + + files+=("$file") + eval_string+=$(escape_string "$file") + eval_string+=' ' + done + + # eval "feh --geometry 1280x1440+1280+0 --auto-zoom --scale-down $eval_string &" + eval "feh --geometry 1200x1250+1308+28 --auto-zoom --scale-down $eval_string &" + + files_to_delete=() + for ((i = 0; i < ${#files[@]};)); do + file="${files[$i]}" + file="${file#./}" + + echo "" + echo "File: $file" + echo -n "Should this file be deleted? (y/n): " + + confirm + confirm_result=$? + should_undo=false + + case $confirm_result in + 0) + if [[ ! ${files_to_delete[@]} =~ $file ]]; then + files_to_delete+=("$file") + fi + ;; + 1) + ;; + 2) + if (( i - 1 < 0 )); then + echo "" + echo "" + echo "Can't undo because this is the first image" + continue + else + ((i--)) + xdotool search --name feh key p + files_to_delete=("${files_to_delete[@]/$file}") + continue + fi + ;; + esac + + xdotool search --name feh key n + ((i++)) + done + + echo "" + + pkill feh + + # debug + if false; then + echo "Files to be deleted:" + for ((i = 0; i < ${#files_to_delete[@]}; i++)); do + file="${files_to_delete[$i]}" + echo " $file" + done + + echo "" exit 0 + fi + + for ((i = 0; i < ${#files_to_delete[@]}; i++)); do + file="${files_to_delete[$i]}" + + rm "$file" + + filename_escaped=$(escape_string "${file}") + sed -i "/$filename_escaped/d" urls.txt + done +else + if [ -f "$furry_commission_ideas_urls_filename" ] && grep -qE "$media_url" -i "$furry_commission_ideas_urls_filename"; then + printf "\n" + echo "[INFO] This folder already has the media informed." + echo "[INFO] Exiting..." + exit 0 + fi + + if ! command_output=$($scripts_path/gdl.sh $media_url); then + exit 1 + fi + + media_filenames=() + + for ((i = 0; i < ${#command_output[@]}; i++)); do + filename=${command_output[$i]} + media_filenames+=$(basename "$filename") + done + + + for ((i = 0; i < ${#media_filenames[@]}; i++)); do + media_filename=${media_filenames[$i]} + + echo "$media_filename: $media_url" >> $furry_commission_ideas_urls_filename + done fi - -if ! command_output=$($scripts_path/gdl.sh $media_url); then - exit 1 -fi - -media_filenames=() - -for ((i = 0; i < ${#command_output[@]}; i++)); do - filename=${command_output[$i]} - media_filenames+=$(basename "$filename") -done - - -for ((i = 0; i < ${#media_filenames[@]}; i++)); do - media_filename=${media_filenames[$i]} - - echo "$media_filename: $media_url" >> $furry_commission_ideas_urls_filename -done