Advertisement
Guest User

random-wallpaper.sh

a guest
Jul 29th, 2013
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.95 KB | None | 0 0
  1. #/bin/bash
  2.  
  3. # Author : Quentin Manfroi
  4. # Year : 2013
  5.  
  6.  
  7. DEFAULT_DELAY=900
  8. DEFAULT_WALL_DIR=${HOME}/.wallpapers/
  9. DB_DIR="${HOME}/.random_wallpapers"
  10.  
  11. DELAY=
  12. DIRECTORIES=
  13. VERB=1
  14. CLEAN=0
  15.  
  16. usage()
  17. {
  18. cat << EOF
  19. Usage : $0 [-dr] [WALLPAPERS DIRECTORIES LIST]
  20. OR: $0 -n [WALLPAPERS DIRECTORIES LIST]
  21. OR: $0 -c [WALLPAPERS DIRECTORIES LIST]
  22.  
  23. Script to set a random wallpaper for OpenBox environment.
  24.  
  25. Prerequites : nitrogen
  26. Note : each wallpaper directory must be a absolute path separated by a space
  27. example : $0 /path/rep1 /path/rep2 ... /path/repN
  28.  
  29. OPTIONS:
  30. -h Show this help message
  31. -n Set a random wallpaper just once
  32. -d Set the delay between each change in seconds
  33. -c Clean the database
  34. -s Run script in silence without prompt message
  35. -r Enable recursion to list directories
  36.  
  37. EOF
  38. }
  39.  
  40. init()
  41. {
  42. if [[ -z $DELAY ]] #|| [[ -z $SERVER ]] || [[ -z $PASSWD ]]
  43. then
  44. DELAY=$DEFAULT_DELAY
  45. fi
  46. DIRECTORIES=$@
  47. if [[ -z $DIRECTORIES ]]
  48. then
  49. DIRECTORIES=$DEFAULT_WALL_DIR
  50. else
  51. TMP_DIRECTORIES=
  52. for DIRECTORY in $DIRECTORIES
  53. do
  54. if [[ -d $DIRECTORY ]]
  55. then
  56. TMP_DIRECTORIES="$TMP_DIRECTORIES $DIRECTORY"
  57. elif [[ $CLEAN == 0 ]]
  58. then
  59. TMP_DIRECTORIES="$TMP_DIRECTORIES $DIRECTORY"
  60. fi
  61. done
  62.  
  63. if [[ -z $TMP_DIRECTORIES ]]
  64. then
  65. echo "None of directories specified exists"
  66. exit -1
  67. else
  68. DIRECTORIES=$TMP_DIRECTORIES
  69. fi
  70. fi
  71.  
  72. if [[ ! -d $DB_DIR ]]
  73. then
  74. mkdir -p $DB_DIR
  75. fi
  76. }
  77.  
  78. parse()
  79. {
  80. DB_NAME=
  81. for DIRECTORY in $DIRECTORIES
  82. do
  83. if [[ `echo $DIRECTORY | head -c 2` == "~/" ]]
  84. then
  85. TMP_DB_NAME=${DIRECTORY:2}
  86. else
  87. TMP_DB_NAME=$DIRECTORY
  88. fi
  89. TMP_DB_NAME=${TMP_DB_NAME//\//-}
  90. TMP_DB_NAME=${TMP_DB_NAME//~/-}
  91. if [[ `echo $TMP_DB_NAME | tail -c 2` == "-" ]]
  92. then
  93. TMP_DB_NAME=${TMP_DB_NAME%?}
  94. fi
  95. while [[ `echo $TMP_DB_NAME | head -c 1` == "-" ]]
  96. do
  97. TMP_DB_NAME=${TMP_DB_NAME:1}
  98. done
  99. if [[ `echo $TMP_DB_NAME | head -c 1` == "." ]]
  100. then
  101. TMP_DB_NAME=${TMP_DB_NAME:1}
  102. fi
  103. DB_NAME="$DB_NAME-$TMP_DB_NAME"
  104. done
  105. echo $DB_NAME
  106. }
  107.  
  108. change()
  109. {
  110. DB_FILE="$DB_DIR/$(parse).db"
  111. WALLPAPER=
  112. if [[ $RECURSIVE -eq 1 ]]
  113. then
  114. WALLPAPERS=`for i in $DIRECTORIES ; do find $i -type f -regex '.*\.\(jpeg\|jpg\)$' ; done`
  115. else
  116. WALLPAPERS=`for i in $DIRECTORIES ; do find $i -maxdepth 1 -type f -regex '.*\.\(jpeg\|jpg\)$' ; done`
  117. fi
  118. if [[ ! -f $DB_FILE ]]
  119. then
  120. WALLPAPER=`echo $WALLPAPERS | sed -e 's/ /\n/g' | sort -R | head -1`
  121. else
  122. if [[ `echo $WALLPAPERS | sed -e 's/ /\n/g'` == `sort $DB_FILE` ]]
  123. then
  124. WALLPAPER=`echo $WALLPAPERS | sed -e 's/ /\n/g' | sort -R | head -1`
  125. rm -f $DB_FILE
  126.  
  127. else
  128. WALLPAPER=`comm -23 <(echo $WALLPAPERS | sed -e 's/ /\n/g' | sort) <(sort $DB_FILE) | sort -R | head -1`
  129. fi
  130. fi
  131. nitrogen --set-scaled $WALLPAPER
  132. echo $WALLPAPER >> $DB_FILE
  133. }
  134.  
  135. clean()
  136. {
  137. if [[ $VERB -eq 1 ]]
  138. then
  139. read -p "Are you sure to would delete database for : $DIRECTORIES ? [y/n] " rep
  140. case $rep in
  141. [Nn]* )
  142. exit 0
  143. ;;
  144. esac
  145.  
  146. fi
  147. rm -f $DB_DIR/$(parse).db
  148. }
  149.  
  150. ARGS=0
  151. while getopts "hrncsid:" OPTION
  152. do
  153. case $OPTION in
  154. h)
  155. usage
  156. exit 1
  157. ;;
  158. d)
  159. DELAY=$OPTARG
  160. ARGS="$(($ARGS+2))"
  161. ;;
  162. n)
  163. shift
  164. init $@
  165. change
  166. exit 0
  167. ;;
  168. c)
  169. ARGS="$(($ARGS+1))"
  170. CLEAN=1
  171. ;;
  172. s)
  173. ARGS="$(($ARGS+1))"
  174. VERB=0
  175. ;;
  176. r)
  177. RECURSIVE=1
  178. ARGS="$(($ARGS+1))"
  179. ;;
  180. ?)
  181. usage
  182. exit
  183. ;;
  184. esac
  185. done
  186.  
  187. if [[ $CLEAN -eq 1 ]]
  188. then
  189. if [[ $1 == "-sc" ]] || [[ $1 == "-cs" ]]
  190. then
  191. let "ARGS = $ARGS - 1"
  192. fi
  193. for i in `seq 1 $ARGS`
  194. do
  195. shift
  196. done
  197. init $@
  198. clean
  199. exit 0
  200. else
  201. if [[ $1 == "-rd" ]]
  202. then
  203. shift $(($ARGS-1))
  204. else
  205. shift $ARGS
  206. fi
  207. init $@
  208. fi
  209.  
  210. while :
  211. do
  212. change
  213. sleep $DELAY
  214. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement