#!/bin/bash # TODO, warning! This script is horrible and insecure with background jobs show_help() { # echo "Usage: $0 [--no-abort-on-found] [--parallel] [--custom-grep-search|-c ]" echo "Usage: $0 [--custom-grep-search|-c ]" echo "Options:" # echo " --no-abort-on-found (optional) The script will not update each gallery download until it finds an already downloaded file." # echo " --parallel-jobs (optional) The script will update each gallery download in parallel, with multiple background jobs running on your operating system." # echo " --parallel-tmux (optional) The script will update each gallery download in parallel, with a tmux session with multiple tabs and panels." echo " --custom-grep-search|-c (optional) Includes a string to filter the URLs." } should_abort_on_found=true should_use_parallel_downloads=false should_use_parallel_tmux=true custom_grep_search='' while [ "$#" -gt 0 ]; do case "$1" in --help|-h) show_help; exit ;; # --no-abort-on-found) should_abort_on_found=false; shift ;; # --parallel-jobs) should_use_parallel_downloads=true; shift ;; # --parallel-tmux) should_use_parallel_tmux=true; shift ;; --custom-grep-search|-c) custom_grep_search="$2"; shift 2 ;; *) shift ;; esac done if $should_use_parallel_downloads && $should_use_parallel_tmux; then echo "Only one (or none) of these parameters should be used:" echo " --parallel-jobs" echo " --parallel-tmux" fi gallery_dl_path=/mnt/e/home/Documents/data-hoarding cd "$gallery_dl_path" urls=($(grep -v "filter" -i "$gallery_dl_path/todo.md" | grep -Eo "(mastodon:)?(http|https)://[a-zA-Z0-9.(/~@)?=_%:-]*")) if [ ! -z "$custom_grep_search" ]; then filtered_urls=() for url in "${urls[@]}"; do if [[ "$url" == *"$custom_grep_search"* ]]; then filtered_urls+=("$url") fi done urls=(${filtered_urls[@]}) # debug if false; then echo "Filtered URLs:" for url in ${filtered_urls[@]}; do echo " $url" done exit 0 fi fi # debug if false; then echo "URLs:" for url in ${urls[@]}; do echo " $url" done exit 0 fi gdl_command_base='gallery-dl' if $should_abort_on_found; then gdl_command_base+=' --abort 1' fi sleep 5 & commands_list=() for url in ${urls[@]}; do gdl_command="$gdl_command_base $url" if $should_use_parallel_downloads; then gdl_command+=' &' fi # debug if false; then echo "Command:" echo " $gdl_command" fi if $should_use_parallel_tmux; then # commands_list+=("$gdl_command") commands_list+=("$gdl_command") else eval $gdl_command fi done # debug if false; then commands_list=( "echo foo1" "echo foo2" "echo foo3" "echo foo4" "echo foo5" "echo foo6" "echo foo7" "echo foo8" "echo foo9" ) fi # debug if false; then echo "Commands:" for ((i = 0; i < ${#commands_list[@]}; i++)); do command_to_run="${commands_list[$i]}" echo " $command_to_run" done exit 0 fi if $should_use_parallel_tmux; then session_name="tmp_gdl-update-todo-`uuidgen | sed 's/[-]//g' | head -c 10; echo;`" tmux new-session -d -s $session_name current_window_num=0 current_panel_num=0 for ((i = 0; i < ${#commands_list[@]}; i++)); do command_to_run="${commands_list[$i]}" if [ "$i" -eq 0 ] || [ $(( i % 4 )) -eq 0 ]; then if [ "$i" -ne 0 ]; then tmux new-window -t $session_name fi ((current_window_num++)) current_panel_num=1 tmux split-window -v -t $session_name tmux select-pane -t $session_name:$current_window_num.1 tmux split-window -h -t $session_name tmux select-pane -t $session_name:$current_window_num.3 tmux split-window -h -t $session_name fi tmux select-pane -t $session_name:$current_window_num.$current_panel_num tmux send-keys -t $session_name "$command_to_run" Enter ((current_panel_num++)) done fi