summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/impressive-display.default4
-rwxr-xr-ximpressive-display/bin/impressive-display187
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