#!/bin/bash

. $HOME/.config/openbox/environment
wp="$1"
dur=$2
md="$3" # centred | fit | scaled | stretched | tiled
[ -n "$wp" ] && wallpaper="$wp"
[ -z "$wallpaper" ] && exit 1
pb_file=$HOME/.config/rox.sourceforge.net/ROX-Filer/pb_starbuntu
IFS=$'\n'
wp=($(find "$wallpaper" -maxdepth 1 -type f | grep -Ei "\.jpg|\.jpeg|\.png|\.webp"))
[ -z "${wp[*]}" ] && exit 1
wp_1=($(find ${wp[@]} -maxdepth 1 -type f -perm -a=r))
wp_2=($(for w in ${wp[@]}; do [[ ! ${wp_1[@]} =~ "$w" ]] && [ "$(stat -c '%U' "$w")" = $USER ] && echo "$w"; done))
wp=(${wp_1[@]} ${wp_2[@]})
l=${#wp[@]}
[ -z "${wp[*]}" ] && exit 1
id="$(pgrep -x 'variety-rox' | grep -v $$)"
[ -n "$id" ] && kill $id 2>/dev/null
ln -sfn $wallpaper ~/.wallpaper
if [ -n "$dur" ]; then duration=$dur; echo $dur > /tmp/hsperfdata_$USER/vr-duration; fi
if [ -z "$duration" ]; then [ -e "/tmp/hsperfdata_$USER/vr-duration" ] && duration=$(cat /tmp/hsperfdata_$USER/vr-duration); fi
if [ -n "$md" ]; then mode=$md; echo $md > /tmp/hsperfdata_$USER/vr-mode; else [ -e "/tmp/hsperfdata_$USER/vr-mode" ] && mode=$(cat /tmp/hsperfdata_$USER/vr-mode); fi
[ -z "$duration" ] && duration=200
[ -z "$mode" ] && mode="fit"

while true; do
    i=0
    k=$(( ((RANDOM<<15)|RANDOM) % $l ))
    [[ $(file --mime-type "${wp[$k]}") =~ image/* ]] && sed -Ei "s~(<backdrop style=\")[^\"]*(\">)[^<]*(.*)~\1$mode\2${wp[$k]}\3~" $pb_file
    sleep 0.5
    rox -n --pinboard=starbuntu &
    sleep 2
    ids=$(pgrep -x "rox")
    while [ $(echo "$ids" | wc -l) -gt 1 ]; do kill $(echo "$ids" | head -1); ids=$(pgrep -x "rox"); done
    xmllint --format "$pb_file" > /dev/null  2> /dev/null
    if [ $? -gt 0 ] || [ -z "$(grep '</backdrop>' $pb_file)" ]; then killall rox; cp ${pb_file}.bak $pb_file; get-devs; fi
    while true; do
	if [ $l -gt 1 ]; then
	    ((i++))
	    [[ $i -eq $duration ]] && break
	fi
	sleep 1
    done
done
