view plugins/random-image/geeqie-random-image @ 2879:c8147f1d5fc3

Fix #516: Shortcut/Feature: Select random image https://github.com/BestImageViewer/geeqie/issues/516 Implemented as a plugin. The random image is selected from all files in all collections plus all images in the current folder.
author Colin Clark <colin.clark@cclark.uk>
date Sat, 05 Jan 2019 16:22:05 +0000
parents
children
line wrap: on
line source

#!/bin/bash

# Select and display a random image from a list of all images
# in Collections and the currently displayed folder

# get list of images in all collections
collection_list=$(geeqie --remote --get-collection-list)
OLDIFS=$IFS
while IFS= read -r line
do
	collection=$(geeqie --remote --get-collection:"$line")
	list="$list""$collection"$'\n'
done <<< "$collection_list"
IFS=$OLDIFS

# get list of images in current folder
file_list=$(geeqie --remote --get-filelist:)
OLDIFS=$IFS
while IFS= read -r line
do
	class_whitespace="${line##*Class:}"
	class="${class_whitespace#"${class_whitespace%%[![:space:]]*}"}"

	if [ "$class" == "Image" ]
	then
		list="$list""${line%%Class*}"$'\n'
	fi

	if [ "$class" == "RAW Image" ]
	then
		list="$list""${line%%Class*}"$'\n'
	fi
done <<< "$file_list"
IFS=$OLDIFS

# remove blank lines
files_no_blanks=$(echo "$list" | sed -e 's/^[[:blank:]]*$//')
# remove leading trailing whitespace
files_no_spaces=$(echo "$files_no_blanks" | sed 's/^[ \t]*//;s/[ \t]*$//')

# remove duplicate lines and select random line
display_image="$(echo "$files_no_spaces" | sort --uniq | shuf -n 1)"

# get image currently displayed
current_image_collection=$(geeqie --remote --tell)
# remove collection name, if it is there
current_image_spaces="${current_image_collection%%Collection:*}"
# remove leading trailing whitespace
curent_image=$(echo "$current_image_spaces" | sed 's/^[ \t]*//;s/[ \t]*$//')

# if the selected random image is currently displayed, try again
if [ "$current_image" == "$display_image" ]
then
	display_image="$(echo "$files_no_spaces" | sort --uniq | shuf -n 1)"
fi

geeqie --remote file:"$display_image"