diff options
-rw-r--r-- | debian/impressive-display.default | 4 | ||||
-rwxr-xr-x | impressive-display/bin/impressive-display | 187 |
2 files changed, 109 insertions, 82 deletions
diff --git a/debian/impressive-display.default b/debian/impressive-display.default index 4855bf8..a2d69ab 100644 --- a/debian/impressive-display.default +++ b/debian/impressive-display.default @@ -43,3 +43,7 @@ SLAVE_RESOLUTION= # screensaver settings, see "man 1 xset" for possible options SCREENSAVER_SETTINGS="" + +# impressive fading options +# on GL systems use: --supersample -k --transition PagePeel +IMPRESSIVE_OPTIONS="--transition None" diff --git a/impressive-display/bin/impressive-display b/impressive-display/bin/impressive-display index 5bd2a28..22a584a 100755 --- a/impressive-display/bin/impressive-display +++ b/impressive-display/bin/impressive-display @@ -1,6 +1,6 @@ #!/bin/bash -# set -x +set -x # Copyright (C) 2012-2016 by Debian Edu project, http://wiki.debian.org/DebianEdu # Mike Gabriel <mike.gabriel@das-netzwerkteam.de> @@ -74,6 +74,9 @@ DOWNLOAD_INTERVAL="600" # show each slide for 20 seconds by default SLIDE_DURATION="20" +# option for impressive fading... +IMPRESSIVE_OPTIONS="--transition None" + if [ -r $HOME/.impressive-display-secrets ]; then . $HOME/.impressive-display-secrets fi @@ -86,6 +89,15 @@ if [ -r $HOME/.impressive-display ]; then . $HOME/.impressive-display fi +workdir="$HOME/.impressive-display-data" +mkdir -p "$workdir" +pdffile_previous="$workdir/impressive-pdffile-previous.pdf" +pdffile_downloaded="$workdir/impressive-pdffile-downloaded.pdf" +pdffile_display="$workdir/impressive-pdffile-display.pdf" + +session_lock="$workdir/.session-lock.$$" +impressive_lock="$workdir/.impressive-lock" + # provide pulseaudio support in the browser session, if not # already available... #if ! pacmd stat 1>/dev/null 2>/dev/null; then @@ -146,16 +158,14 @@ if [ -n "$HTTP_PROXY_URL" ]; then export ftp_proxy="$HTTP_PROXY_URL" fi -IMPRESSIVE_PID="" - -WORKDIR="$HOME/.impressive-display-data" -LOOPFILE="$WORKDIR/PDFFILE_DOWNLOAD_LOOP_ACTIVE" -mkdir -p "$WORKDIR" - function cleanup { - rm -f "$WORKDIR/PDFDOWNLOAD_LOOP" - rm -f "$WORKDIR/IMPRESSIVE_ACTIVE" - rm -f "$WORKDIR/IMPRESSIVE_EXIT" + if [ -e "$impressive_lock" ]; then + rm "$impessive_lock" + fi + + if [ -e "$session_lock" ]; then + rm "$session_lock" + fi } function pdf_is_portrait { @@ -180,125 +190,138 @@ function pdf_is_portrait { # something went wrong with the provided file name... return -1 fi + } function merge_portrait_documents { - if which pdfnup 1>/dev/null && pdf_is_portrait "$WORKDIR/impressive-pdffile.pdf"; then - cd $WORKDIR && pdfnup "$WORKDIR/impressive-pdffile.pdf" && cd - 1>/dev/null - mv "$WORKDIR/impressive-pdffile-nup.pdf" "$WORKDIR/impressive-pdffile-display.pdf" + + if which pdfnup 1>/dev/null ; then + if pdf_is_portrait "$pdffile_downloaded"; then + cd $(dirname "$pdffile_downloaded") && pdfnup "$pdffile_downloaded" && cd - 1>/dev/null + mv "${pdffile_downloaded/.pdf/-nup.pdf}" "$pdffile_display" + else + cp "$pdffile_downloaded" "$pdffile_display" + fi else - cp "$WORKDIR/impressive-pdffile.pdf" "$WORKDIR/impressive-pdffile-display.pdf" + echo "WARNING: The pdfnup tool is not installed." + cp "$pdffile_downloaded" "$pdffile_display" + fi + +} + +function local_pdffile { + + cp $PDF_FILE $WORKDIR/$(basename $PDF_FILE) + + # is the PDF file gzipped? + if echo $(basename $PDF_FILE) | grep -E ".*\.gz"; then + PDF_FILE=${PDF_FILE/.gz/} + gunzip $WORKDIR/$(basename $PDF_FILE).gz fi + mv $WORKDIR/$(basename $PDF_FILE) "$pdffile_downloaded" + + merge_portrait_documents + + pdffile="$pdffile_display" + } function download_pdffile { - if [ -r "$WORKDIR/impressive-pdffile.pdf" ]; then - cp "$WORKDIR/impressive-pdffile.pdf" "$WORKDIR/impressive-pdffile-previous.pdf" + + if [ -r "$pdffile_downloaded" ]; then + cp "$pdffile_downloaded" "$pdffile_previous" fi if [ -n "$PDF_URL_CREDS" ]; then creds="-u $PDF_URL_CREDS" fi - curl $creds "$PDF_URL" 1> "$WORKDIR/impressive-pdffile.pdf" 2>/dev/null + curl $creds "$PDF_URL" 1> "$pdffile_downloaded" 2>/dev/null + merge_portrait_documents - cmp -s "$WORKDIR/impressive-pdffile.pdf" "$WORKDIR/impressive-pdffile-previous.pdf"> /dev/null + cmp -s "$pdffile_downloaded" "$pdffile_previous"> /dev/null if [ $? -eq 1 ]; then - rm -f "$WORKDIR/IMPRESSIVE_ACTIVE" + echo -n "RELOAD" > $impressive_lock fi -} -function reloadable_impressive { - - # on GL systems add: --supersample -k - if which impressive 1>/dev/null; then + pdffile=$pdffile_display - fade_options="--transition None" +} - while [ ! -e "$WORKDIR/IMPRESSIVE_EXIT" ]; do - impressive ${fade_options} --fake-fullscreen --wrap -a ${SLIDE_DURATION} --nologo "${pdffile}" 1>/dev/null & - IMPRESSIVE_PID=$! +function download_loop { - touch "$WORKDIR/IMPRESSIVE_ACTIVE" - while [ -e "$WORKDIR/IMPRESSIVE_ACTIVE" ]; do - sleep 1 - - if [ -e "$WORKDIR/IMPRESSIVE_EXIT" ]; then - break - fi + # do an initial PDF retrieval.. + download_pdffile + if [ "x$DOWNLOAD_INTERVAL" != "x0" ]; then + ( + while [ -e "$session_lock" ]; do + sleep $DOWNLOAD_INTERVAL + download_pdffile done - kill $IMPRESSIVE_PID - rm "$WORKDIR/IMPRESSIVE_ACTIVE" - done + ) & fi + } -function close_other_impressive_display { +function reloadable_impressive { - # if we see another active impressive-display instance, trigger its exit... - if [ -e "$WORKDIR/IMPRESSIVE_ACTIVE" ]; then - touch "$WORKDIR/IMPRESSIVE_EXIT" - fi + if which impressive 1>/dev/null; then - # wait for other impressive-display instance to disappear - while [ -e "$WORKDIR/IMPRESSIVE_ACTIVE" ]; do - sleep 1 - done -} + while [ -e "$session_lock" ]; do -# do an initial PDF retrieval.. -if [ -n "$PDF_URL" ]; then + impressive ${IMPRESSIVE_OPTIONS} --fake-fullscreen --wrap -a ${SLIDE_DURATION} --nologo "${pdffile}" 1>/dev/null & + impressive_pid=$! - download_pdffile + echo -n $impressive_pid > "$impressive_lock" - trap "cleanup" SIGINT SIGTERM ERR - - if [ "x$DOWNLOAD_INTERVAL" != "x0" ]; then - touch $LOOPFILE - ( - while true; do - if [ ! -e $LOOPFILE ] || [ -e $WORKDIR/IMPRESSIVE_EXIT ]; then - break - else - sleep $DOWNLOAD_INTERVAL - fi - download_pdffile + while [ "$(cat $impressive_lock)" != "RELOAD" ] && [ -e "$session_lock" ]; do + sleep 1 done - ) & + kill $impressive_pid + + done + + else + echo "ERROR: The impressive application is not installed." fi - pdffile="$WORKDIR/impressive-pdffile-display.pdf" +} -elif [ -n "$PDF_FILE" ]; then - # FIXME: provide options for displaying a single / local PDF file - cp $PDF_FILE $WORKDIR/$(basename $PDF_FILE) +function create_lock { - # is the PDF file gzipped? - if echo $(basename $PDF_FILE) | grep -E ".*\.gz"; then - PDF_FILE=${PDF_FILE/.gz/} - gunzip $WORKDIR/$(basename $PDF_FILE).gz - fi - mv $WORKDIR/$(basename $PDF_FILE) "$WORKDIR/impressive-pdffile.pdf" + trap "cleanup" SIGINT SIGTERM ERR - merge_portrait_documents + touch "$session_lock" - pdffile="$WORKDIR/impressive-pdffile-display.pdf" +} -fi +### MAIN ### +if [ -n "$PDF_URL" ]; then -if [ -n "$pdffile" ]; then + echo "INFO: PDF_URL is configured. Using PDF file from given URL." + create_lock + download_loop + pdffile="$pdffile_display" - fade_options="--transition None" +elif [ -n "$PDF_FILE" ]; then - close_other_impressive_display + echo "INFO: PDF_FILE is configured. Using local PDF." + create_lock + local_pdffile + pdffile="$pdffile_display" - reloadable_impressive +else - cleanup + echo "ERROR: Neither PDF_FILE nor PDF_URL has been configured. Doing nothing." + exit 0 fi +reloadable_impressive + +cleanup + exit 0 |