Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #/bin/bash
- # Author : Quentin Manfroi
- # Year : 2013
- DEFAULT_DELAY=900
- DEFAULT_WALL_DIR=${HOME}/.wallpapers/
- DB_DIR="${HOME}/.random_wallpapers"
- DELAY=
- DIRECTORIES=
- VERB=1
- CLEAN=0
- usage()
- {
- cat << EOF
- Usage : $0 [-dr] [WALLPAPERS DIRECTORIES LIST]
- OR: $0 -n [WALLPAPERS DIRECTORIES LIST]
- OR: $0 -c [WALLPAPERS DIRECTORIES LIST]
- Script to set a random wallpaper for OpenBox environment.
- Prerequites : nitrogen
- Note : each wallpaper directory must be a absolute path separated by a space
- example : $0 /path/rep1 /path/rep2 ... /path/repN
- OPTIONS:
- -h Show this help message
- -n Set a random wallpaper just once
- -d Set the delay between each change in seconds
- -c Clean the database
- -s Run script in silence without prompt message
- -r Enable recursion to list directories
- EOF
- }
- init()
- {
- if [[ -z $DELAY ]] #|| [[ -z $SERVER ]] || [[ -z $PASSWD ]]
- then
- DELAY=$DEFAULT_DELAY
- fi
- DIRECTORIES=$@
- if [[ -z $DIRECTORIES ]]
- then
- DIRECTORIES=$DEFAULT_WALL_DIR
- else
- TMP_DIRECTORIES=
- for DIRECTORY in $DIRECTORIES
- do
- if [[ -d $DIRECTORY ]]
- then
- TMP_DIRECTORIES="$TMP_DIRECTORIES $DIRECTORY"
- elif [[ $CLEAN == 0 ]]
- then
- TMP_DIRECTORIES="$TMP_DIRECTORIES $DIRECTORY"
- fi
- done
- if [[ -z $TMP_DIRECTORIES ]]
- then
- echo "None of directories specified exists"
- exit -1
- else
- DIRECTORIES=$TMP_DIRECTORIES
- fi
- fi
- if [[ ! -d $DB_DIR ]]
- then
- mkdir -p $DB_DIR
- fi
- }
- parse()
- {
- DB_NAME=
- for DIRECTORY in $DIRECTORIES
- do
- if [[ `echo $DIRECTORY | head -c 2` == "~/" ]]
- then
- TMP_DB_NAME=${DIRECTORY:2}
- else
- TMP_DB_NAME=$DIRECTORY
- fi
- TMP_DB_NAME=${TMP_DB_NAME//\//-}
- TMP_DB_NAME=${TMP_DB_NAME//~/-}
- if [[ `echo $TMP_DB_NAME | tail -c 2` == "-" ]]
- then
- TMP_DB_NAME=${TMP_DB_NAME%?}
- fi
- while [[ `echo $TMP_DB_NAME | head -c 1` == "-" ]]
- do
- TMP_DB_NAME=${TMP_DB_NAME:1}
- done
- if [[ `echo $TMP_DB_NAME | head -c 1` == "." ]]
- then
- TMP_DB_NAME=${TMP_DB_NAME:1}
- fi
- DB_NAME="$DB_NAME-$TMP_DB_NAME"
- done
- echo $DB_NAME
- }
- change()
- {
- DB_FILE="$DB_DIR/$(parse).db"
- WALLPAPER=
- if [[ $RECURSIVE -eq 1 ]]
- then
- WALLPAPERS=`for i in $DIRECTORIES ; do find $i -type f -regex '.*\.\(jpeg\|jpg\)$' ; done`
- else
- WALLPAPERS=`for i in $DIRECTORIES ; do find $i -maxdepth 1 -type f -regex '.*\.\(jpeg\|jpg\)$' ; done`
- fi
- if [[ ! -f $DB_FILE ]]
- then
- WALLPAPER=`echo $WALLPAPERS | sed -e 's/ /\n/g' | sort -R | head -1`
- else
- if [[ `echo $WALLPAPERS | sed -e 's/ /\n/g'` == `sort $DB_FILE` ]]
- then
- WALLPAPER=`echo $WALLPAPERS | sed -e 's/ /\n/g' | sort -R | head -1`
- rm -f $DB_FILE
- else
- WALLPAPER=`comm -23 <(echo $WALLPAPERS | sed -e 's/ /\n/g' | sort) <(sort $DB_FILE) | sort -R | head -1`
- fi
- fi
- nitrogen --set-scaled $WALLPAPER
- echo $WALLPAPER >> $DB_FILE
- }
- clean()
- {
- if [[ $VERB -eq 1 ]]
- then
- read -p "Are you sure to would delete database for : $DIRECTORIES ? [y/n] " rep
- case $rep in
- [Nn]* )
- exit 0
- ;;
- esac
- fi
- rm -f $DB_DIR/$(parse).db
- }
- ARGS=0
- while getopts "hrncsid:" OPTION
- do
- case $OPTION in
- h)
- usage
- exit 1
- ;;
- d)
- DELAY=$OPTARG
- ARGS="$(($ARGS+2))"
- ;;
- n)
- shift
- init $@
- change
- exit 0
- ;;
- c)
- ARGS="$(($ARGS+1))"
- CLEAN=1
- ;;
- s)
- ARGS="$(($ARGS+1))"
- VERB=0
- ;;
- r)
- RECURSIVE=1
- ARGS="$(($ARGS+1))"
- ;;
- ?)
- usage
- exit
- ;;
- esac
- done
- if [[ $CLEAN -eq 1 ]]
- then
- if [[ $1 == "-sc" ]] || [[ $1 == "-cs" ]]
- then
- let "ARGS = $ARGS - 1"
- fi
- for i in `seq 1 $ARGS`
- do
- shift
- done
- init $@
- clean
- exit 0
- else
- if [[ $1 == "-rd" ]]
- then
- shift $(($ARGS-1))
- else
- shift $ARGS
- fi
- init $@
- fi
- while :
- do
- change
- sleep $DELAY
- done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement