From 5460351c834d619e7d03cd8f06b549059df24ed4 Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Thu, 24 Mar 2016 23:20:45 +0100 Subject: impressive-display: Work around buggy impressive polling feature. --- impressive-display/bin/impressive-display | 74 ++++++++++++++++++++++++++----- 1 file changed, 62 insertions(+), 12 deletions(-) diff --git a/impressive-display/bin/impressive-display b/impressive-display/bin/impressive-display index a9a0512..5bd2a28 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 @@ -47,7 +47,6 @@ PDF_URL_SLAVES="" PDF_URL_MASTERS_CREDS="" PDF_URL_SLAVES_CREDS="" - PDF_FILE_MASTERS="" PDF_FILE_SLAVES="" @@ -147,12 +146,16 @@ 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 stop_pdfdownload_loop { - rm -f ~/PDFDOWNLOAD_LOOP +function cleanup { + rm -f "$WORKDIR/PDFDOWNLOAD_LOOP" + rm -f "$WORKDIR/IMPRESSIVE_ACTIVE" + rm -f "$WORKDIR/IMPRESSIVE_EXIT" } function pdf_is_portrait { @@ -184,16 +187,63 @@ function merge_portrait_documents { cd $WORKDIR && pdfnup "$WORKDIR/impressive-pdffile.pdf" && cd - 1>/dev/null mv "$WORKDIR/impressive-pdffile-nup.pdf" "$WORKDIR/impressive-pdffile-display.pdf" else - mv "$WORKDIR/impressive-pdffile.pdf" "$WORKDIR/impressive-pdffile-display.pdf" + cp "$WORKDIR/impressive-pdffile.pdf" "$WORKDIR/impressive-pdffile-display.pdf" fi } function download_pdffile { + if [ -r "$WORKDIR/impressive-pdffile.pdf" ]; then + cp "$WORKDIR/impressive-pdffile.pdf" "$WORKDIR/impressive-pdffile-previous.pdf" + 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 merge_portrait_documents + + cmp -s "$WORKDIR/impressive-pdffile.pdf" "$WORKDIR/impressive-pdffile-previous.pdf"> /dev/null + if [ $? -eq 1 ]; then + rm -f "$WORKDIR/IMPRESSIVE_ACTIVE" + fi +} + +function reloadable_impressive { + + # on GL systems add: --supersample -k + if which impressive 1>/dev/null; then + + 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=$! + + touch "$WORKDIR/IMPRESSIVE_ACTIVE" + while [ -e "$WORKDIR/IMPRESSIVE_ACTIVE" ]; do + sleep 1 + + if [ -e "$WORKDIR/IMPRESSIVE_EXIT" ]; then + break + fi + + done + kill $IMPRESSIVE_PID + rm "$WORKDIR/IMPRESSIVE_ACTIVE" + done + fi +} + +function close_other_impressive_display { + + # if we see another active impressive-display instance, trigger its exit... + if [ -e "$WORKDIR/IMPRESSIVE_ACTIVE" ]; then + touch "$WORKDIR/IMPRESSIVE_EXIT" + fi + + # wait for other impressive-display instance to disappear + while [ -e "$WORKDIR/IMPRESSIVE_ACTIVE" ]; do + sleep 1 + done } # do an initial PDF retrieval.. @@ -201,13 +251,13 @@ if [ -n "$PDF_URL" ]; then download_pdffile - trap "stop_pdfdownload_loop" SIGINT SIGTERM ERR + trap "cleanup" SIGINT SIGTERM ERR if [ "x$DOWNLOAD_INTERVAL" != "x0" ]; then touch $LOOPFILE ( while true; do - if [ ! -e $LOOPFILE ]; then + if [ ! -e $LOOPFILE ] || [ -e $WORKDIR/IMPRESSIVE_EXIT ]; then break else sleep $DOWNLOAD_INTERVAL @@ -243,11 +293,11 @@ if [ -n "$pdffile" ]; then fade_options="--transition None" - # on GL systems add: --supersample -k - if which impressive 1>/dev/null; then - impressive ${fade_options} --fake-fullscreen --wrap --poll 30 -a ${SLIDE_DURATION} --nologo "${pdffile}" 1>/dev/null - fi - stop_pdfdownload_loop + close_other_impressive_display + + reloadable_impressive + + cleanup fi -- cgit v1.2.3