#!/bin/sh # File: /usr/bin/irfanview # Author: bgstack15@gmail.com # Startdate: 2016-01-29 # Title: Wrapper script for passing files to Irfanview # Purpose: Converts file paths to a wine format and also handles compressed files # History: 2016-01-29 Initial quick script written. It used a bunch of sed commands to transform paths to a wine format. # Usage: irfan /path/to/image /another/image/file # Reference: # Ideas for zip expansion and winepath https://github.com/Zykr/IrfanViewLinux/blob/master/irfanview # Improve: IV_DEFAULT_FILE=/etc/sysconfig/irfanview # prepend IV_ to variables from defaults file and apply them if test -r "${IV_DEFAULT_FILE}" ; then IV_tmpfile="$( mktemp )" sed -r -e 's/^\s*(.*=.*)/IV_\1/;' < "${IV_DEFAULT_FILE}" > "${IV_tmpfile}" source "${IV_tmpfile}" rm -f "${IV_tmpfile}" fi # load variables test -z "${IV_WINEPREFIX}" && export IV_WINEPREFIX="$HOME/.wine" test -n "${IV_WINEPREFIX}" && export WINEPREFIX="${IV_WINEPREFIX}" || export WINEPREFIX=$HOME/.wine test -z "${IV_DEVTTY}" && export IV_DEVTTY=/dev/null test -z "${IV_EXEC_NAME}" && export IV_EXEC_NAME="i_view32.exe" test -z "${IV_EXEC_PATH}" && export IV_EXEC_PATH="/usr/share/irfanview/i_view32.exe" IV_VERSION="2018-09-02a" # Define functions expandword() { # call: expandword "${word}" # if file, add it # if directory, expand it # if tarball, extract it and operate on the directory like normal local _word="$( echo "${@}" | sed -e 'sF\/\/F\/Fg;' )" if test -d "${_word}"; then # loop through all files in the directory for _newword in "${_word}"/*; do expandword "${_newword}"; done elif test -f "${_word}"; then # file exists so check if tarball case "${_word}" in *.tgz|*.tar.gz) # extract it and expand the temporary directory _tmpdir="$( mktemp -d )"; alltempdirs="${alltempdirs} ${_tmpdir}" echo "tmpdir ${_tmpdir}" 1>${IV_DEVTTY} tar -zx -C "${_tmpdir}" -f "${_word}" 1>${IV_DEVTTY} 2>&1 expandword "${_tmpdir}" ;; *.zip) _tmpdir="$( mktemp -d )"; alltempdirs="${alltempdirs} ${_tmpdir}" echo "tmpdir ${_tmpdir}" 1>${IV_DEVTTY} echo "7za e -w${_tmpdir} ${_word}" 1>${IV_DEVTTY} 2>&1 ( cd "${_tmpdir}"; 7za e "${_word}" 1>${IV_DEVTTY} 2>&1; ) expandword "${_tmpdir}" ;; *) # assume it is readable and add it to list of files to open echo "File ${_word}" 1>${IV_DEVTTY} thisfile="$( getwinepath "${_word}" )" irfanfiles="${irfanfiles} \"${thisfile}\"" ;; esac fi } getwinepath() { # call: getwinepath "$foo" winepath -w "${@}" } # Define variables alltempdirs="" # prepare files irfanargs= irfanfiles= for word in "${@}"; do expandword "${word}" done irfanfiles="${irfanfiles## }" # run wine cd $WINEPREFIX echo "${irfanfiles}" | xargs echo wine "${IV_EXEC_PATH}" ${irfanargs} > ${IV_DEVTTY} echo "${irfanfiles}" | xargs wine "${IV_EXEC_PATH}" ${irfanargs} & #wait $( pgrep -P $$ ${IV_EXEC_NAME} ) # WORKHERE try wait with: wait %1 for thistempdir in ${alltempdirs}; do rm -rf "${thistempdir}" 1>${IV_DEVTTY} done