#!/bin/sh # Check if necessary programs are installed for prog in dmenu jq sxiv; do [ ! "$(which "$prog")" ] && echo "Please install $prog!" && exit 1 done # If notify-send is not installed, use echo as notifier [ ! "$(which notify-send)" ] && notifier="echo" || notifier="notify-send" # args while [ $# -gt 0 ]; do case $1 in -l|--limit) shift LIMIT=$1 case $LIMIT in ''|*[!0-9]*) echo 'limit is NaN' exit 1 esac shift ;; -f|--filter) FILTER=1 shift ;; -k|--keep) KEEP=0 shift ;; -v|--verbose) VERBOSE=1 shift ;; *) subreddit=$1 shift ;; esac done # Default config directory configdir="${XDG_CONFIG_HOME:-$HOME/.config}/redyt" # Create .config/redyt if it does not exist to prevent # the program from not functioning properly [ ! -d "$configdir" ] && echo "Directory $configdir does not exist, creating..." && mkdir -p "$configdir" # Default subreddit that will be inserted in "subreddit.txt" # if it does not exist defaultsub="linuxmemes" # If subreddit.txt does not exist, create it to prevent # the program from not functioning properly [ ! -f "$configdir/subreddit.txt" ] && echo "$defaultsub" >> "$configdir/subreddit.txt" # If no argument is passed if [ -z "$subreddit" ]; then # Ask the user to enter a subreddit subreddit=$(dmenu -p "Select Subreddit r/" -i -l 10 < "$configdir/subreddit.txt" | awk -F "|" '{print $1}') # If no subreddit was chosen, exit [ -z "$subreddit" ] && echo "no sub chosen" && exit 1 fi # Default directory used to store the feed file and fetched images cachedir="/tmp/redyt" # If cachedir does not exist, create it if [ ! -d "$cachedir" ]; then echo "$cachedir does not exist, creating..." mkdir -p "$cachedir" fi # Send a notification [ $VERBOSE = 1 ] && $notifier "Redyt" "📩 Downloading your 🖼️ Memes" # Download the subreddit feed, containing only the # first 100 entries (limit), and store it inside # cachedir/tmp.json curl -H "User-agent: 'your bot 0.1'" "https://www.reddit.com/r/$subreddit/hot.json?limit=${LIMIT:-100}" > "$cachedir/tmp.json" # Create a list of images imgs=$(jq '.' < "$cachedir/tmp.json" | grep url_overridden_by_dest | grep -Eo "http(s|)://.*(jpg|png)\b" | sort -u) # If there are no images, exit [ -z "$imgs" ] && $notifier "Redyt" "sadly, there are no images for subreddit $subreddit, please try again later!" && exit 1 # Download images to $cachedir for img in $imgs; do if [ ! -e "$cachedir/${img##*/}" ]; then wget -P "$cachedir" $img fi done # Send a notification [ $VERBOSE -eq 1 ] && $notifier "Redyt" "👍 Download Finished, Enjoy! 😊" rm "$cachedir/tmp.json" # Display the images if [ $FILTER = 1 ]; then sxiv -a -o "$cachedir" else sxiv -a "$cachedir" fi # Once finished, remove all of the cached images [ ! $KEEP = 1 ] && rm "${cachedir:?}"/*