From 06c80b46e8de66ec4b3fd8bd600a9664990e6289 Mon Sep 17 00:00:00 2001 From: Stu Miller Date: Sun, 13 May 2018 09:05:20 +0700 Subject: audio/clockchimes: Updated for version 0.2. Signed-off-by: Willy Sudiarto Raharjo --- audio/clockchimes/README | 2 +- audio/clockchimes/clockchimes | 198 +++++++++++++++++++++++++++++++ audio/clockchimes/clockchimes.SlackBuild | 13 +- audio/clockchimes/clockchimes.info | 8 +- audio/clockchimes/doinst.sh | 42 +++++-- audio/clockchimes/slack-desc | 4 +- 6 files changed, 242 insertions(+), 25 deletions(-) create mode 100644 audio/clockchimes/clockchimes (limited to 'audio/clockchimes') diff --git a/audio/clockchimes/README b/audio/clockchimes/README index d51474364f..dd00f0fa50 100644 --- a/audio/clockchimes/README +++ b/audio/clockchimes/README @@ -1,6 +1,6 @@ Clockchimes creates a cron job that runs a sox based bash script. The script plays clock chime sound files based on the system time. -The initial release plays Westminster chimes on the 15 minute, +The initial releases play Westminster chimes on the 15 minute, 30 minute, 45 minute and top of the hour. The installation script modifies /var/spool/cron/crontabs/root file diff --git a/audio/clockchimes/clockchimes b/audio/clockchimes/clockchimes new file mode 100644 index 0000000000..fb406f9eca --- /dev/null +++ b/audio/clockchimes/clockchimes @@ -0,0 +1,198 @@ +#!/bin/sh + +# Play audio script for ClockChimes + +# Copyright 2018 - Stu Miller - Colorado, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Function - input: UC - output: LC +lowercase () { + LC=$(echo $UC | tr [:upper:] [:lower:]) +} # END lowercase + +# function - input: ARRAY, KEY - output: VALUE +read_array(){ + # indirect reference method + TMP=${ARRAY}[KEY] + VALUE=${!TMP} +} # END read_array + +# Function - input: CHIME, STRIKE - output: sox audio +play_chimestrike(){ +#echo "play_chimestrike - #1:"$chime$strike":" + # check chimestrike null + if [ "$CHIME$STRIKE" != "" ]; then + # determine user based on 1st local display + # last - reads /var/log/wtmp file + # grep - looks for ":0" followed by "still logged in" + # awk - uses 1st line and 1st field, ignores remaining lines + USER=$(last | grep -E :0.*"still logged in" | awk 'NR==1{print $1}') + + # play as default root user or user currently logged in + # for play commands, see: man sox + # functionaly equivalent to: sox -q $CHIME$STRIKE -d + if [[ "$USER" == "" || "$USER" == "root" ]]; then + # play as root + /usr/bin/play -q $CHIME$STRIKE + else + # play as user currently logged in + su -l $USER -c "/usr/bin/play -q $CHIME$STRIKE" + fi # END play as root or user + fi # END chimestrike null +#echo "play_chimestrike - :end:" +} # END play_chimestrike + +# Function - requires: read_array - input: CONTROL[], MINUTE, LOOP - output: STRIKE +set_strike(){ +#echo "START set_strike - #1:play_strike:"${CONTROL[2]}":minute:"$MINUTE":loop:"$LOOP":" + # check play strike + if [ ${CONTROL[2]} == "yes" ]; then + # check min 00 + if [[ "$MINUTE" == "00" || "$MINUTE" == "0" ]]; then + # set strike to play, minus last + while [ "$LOOP" -gt "1" ]; do + # concatenate pre & strike + ARRAY=${CONTROL[0]}; KEY="4"; read_array + STRIKE=$STRIKE" "$PRE$VALUE + # decrement loop counter + LOOP=$(($LOOP-1)) + done # END strike loop + # concatenate last pre & strike + ARRAY=${CONTROL[0]}; KEY="5"; read_array + STRIKE=$STRIKE" "$PRE$VALUE + fi # END min 00 + fi # END play strike +#echo "END set_strike - strike:"$STRIKE":" +} # END set_strikes + +# Function - requires: read_array - input: CONTROL[], MINUTE - output: CHIME +set_chime(){ +#echo "START set_chime - #1:play_chime:"${CONTROL[1]}":minute:"$MINUTE":" + # check play chimes + if [ "${CONTROL[1]}" == "yes" ]; then + # check minute on the quarter hour + if [ "$MINUTE" == "00" ]; then + ARRAY=${CONTROL[0]}; KEY="0"; read_array + CHIME=$PRE$VALUE + elif [ "$MINUTE" == "15" ]; then + ARRAY=${CONTROL[0]}; KEY="1"; read_array + CHIME=$PRE$VALUE + elif [ "$MINUTE" == "30" ]; then + ARRAY=${CONTROL[0]}; KEY="2"; read_array + CHIME=$PRE$VALUE + elif [ "$MINUTE" == "45" ]; then + ARRAY=${CONTROL[0]}; KEY="3"; read_array + CHIME=$PRE$VALUE + fi # END minute on the quarter hour + fi # END play chimes +#echo "END set_chime - chime:"$CHIME":" +} # END set_chime + +# Function - input: $1, $2, $3 - output: LOOP, MINUTE +test(){ +#echo "START test_script - #1:"$1":"$2":"$3":" + USAGE="TEST FAILED: requires 2nd & 3rd integer arguments" + # check for arguments + if [[ "$2" != "" && "$3" != "" ]]; then + USAGE="TEST FAILED: 2nd argument represents hours. It must be an integer <= 24" + # check hour argument is integer + if [ "$2" -eq "$2" ] 2>/dev/null; then + # check hour argument is -le 24 + if [ $2 -le 12 ]; then + LOOP=$2 + elif [ $2 -le 24 ]; then + LOOP=$(($2-12)) + else + echo $USAGE; exit + fi # END hour argument is -le 24 + else + echo $USAGE; exit + fi # END hour argument is integer + USAGE="TEST FAILED: 3rd argument represents minutes. It must be an integer <= 45" + # check minute argument is integer + if [ "$3" -eq "$3" ] 2>/dev/null; then + # check minute argument -le 45 + if [ $3 -le 45 ]; then + MINUTE=$3 + else + echo $USAGE; exit + fi # END minute argument -le 45 + else + echo $USAGE; exit + fi # END minute argument is integer + else + echo $USAGE; exit + fi # END check for arguments +#echo "END test_script - loop:"$LOOP":minute:"$MINUTE":" + echo "NOTE: requires logged in user password if NOT running as root" +} # END test + +# source config file +. /etc/clockchimes.conf + +# sound directory +SND_DIR="/usr/share/sounds/clockchimes/" + +# prefix volume factor, sound directory & chime name +UC=${CONTROL[0]}; lowercase +PRE="-v "${CONTROL[3]}" "$SND_DIR$LC"/" + +# system minute +MINUTE=$(date +"%M") + +# system hour, 12 hour clock +HOUR=$(date +"%I") + +# loop counter, strip leading "0" from system hour +LOOP=$((10#$HOUR)) + +# version language +VERSION="clockchimes v0.2 +Copyright 2018 - Stu Miller - Colorado, USA +All rights reserved." + +# usage language +USAGE="Usage: $0 [OPTION] +Play clock chimes and hour strikes. + + --help display this help and exit + --test test sample time, add hour & minute + --version display version information and exit + +Report bugs to ." + +# Main routine +# check for options +case $1 in + '--help') + printf '%s\n' "$USAGE" || exit + ;; + '--test') + # must pass script arguments to funtions + test $1 $2 $3 + ;; + '--version') + printf '%s\n' "$VERSION" || exit + ;; +esac + +set_chime +set_strike +play_chimestrike diff --git a/audio/clockchimes/clockchimes.SlackBuild b/audio/clockchimes/clockchimes.SlackBuild index 59a679c788..6abc4603dc 100644 --- a/audio/clockchimes/clockchimes.SlackBuild +++ b/audio/clockchimes/clockchimes.SlackBuild @@ -23,7 +23,7 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PRGNAM=clockchimes -VERSION=${VERSION:-0.1} +VERSION=${VERSION:-0.2} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} @@ -70,14 +70,17 @@ find -L . \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION -cp -a README $PKG/usr/doc/$PRGNAM-$VERSION/ +cp -a CHANGELOG README $PKG/usr/doc/$PRGNAM-$VERSION/ cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild -mkdir -p $PKG/usr/share/sounds/$PRGNAM -cp -a sounds/* $PKG/usr/share/sounds/$PRGNAM/ +mkdir -p $PKG/usr/share/sounds/$PRGNAM/westminster +cp -a westminster/* $PKG/usr/share/sounds/$PRGNAM/westminster + +mkdir -p $PKG/etc +cp -a clockchimes.conf.new $PKG/etc/ mkdir -p $PKG/usr/bin -cp -a clockchimes.sh $PKG/usr/bin/ +cp -a clockchimes $PKG/usr/bin/ mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc diff --git a/audio/clockchimes/clockchimes.info b/audio/clockchimes/clockchimes.info index de48a2779c..e3070c8fb0 100644 --- a/audio/clockchimes/clockchimes.info +++ b/audio/clockchimes/clockchimes.info @@ -1,8 +1,8 @@ PRGNAM="clockchimes" -VERSION="0.1" -HOMEPAGE="https://www.go4it2day.com" -DOWNLOAD="https://www.go4it2day.com/downloads/clockchimes-0.1.tar.gz" -MD5SUM="ad552bde6ccc9ec001d762d2f3469ac3" +VERSION="0.2" +HOMEPAGE="https://www.go4it2day.com/news/clockchimes-0.2.html" +DOWNLOAD="https://www.go4it2day.com/downloads/clockchimes-0.2.tar.gz" +MD5SUM="5f7311e89c0cedf17225c19d76cc50b0" DOWNLOAD_x86_64="" MD5SUM_x86_64="" REQUIRES="" diff --git a/audio/clockchimes/doinst.sh b/audio/clockchimes/doinst.sh index 30a7850b47..8aa71f082f 100644 --- a/audio/clockchimes/doinst.sh +++ b/audio/clockchimes/doinst.sh @@ -1,27 +1,43 @@ # doinst.sh for clockchimes -# focus is on making sure cron is managing clockchime script -# negative test: check if root crontab exists +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +config etc/clockchimes.conf.new + +# root crontab missing? if [ ! -e /var/spool/cron/crontabs/root ]; then - # true: does not exist, create root crontab and set permissions + # true: crontab missing, create crontab and set permissions touch /var/spool/cron/crontabs/root chmod 0600 /var/spool/cron/crontabs/root -fi +fi # END crontab missing -# negative test: check if root crontab previously modified +# root crontab not updated? grep "# clockchimes" /var/spool/cron/crontabs/root 1> /dev/null if [ $? -ne 0 ]; then - -# true: not previously modified -cat << EOF >> /var/spool/cron/crontabs/root + # true: crontab not updated, update with clockchimes + cat << EOF >> /var/spool/cron/crontabs/root # clockchimes -0,15,30,45 * * * * /usr/bin/clockchimes.sh 1> /dev/null +0,15,30,45 * * * * /usr/bin/clockchimes 1> /dev/null EOF - # positive test: check if crond is running + # crond running? ps -C crond 1>/dev/null if [ $? -eq 0 ]; then - # true: reload crond + # true: crond running, reload crond crontab /var/spool/cron/crontabs/root 1> /dev/null - fi -fi + else + # false: crond not running, start crond + /usr/sbin/crond -l notice + fi # END crond running +fi # END crontab not updated diff --git a/audio/clockchimes/slack-desc b/audio/clockchimes/slack-desc index fe704aa186..173e25f844 100644 --- a/audio/clockchimes/slack-desc +++ b/audio/clockchimes/slack-desc @@ -10,10 +10,10 @@ clockchimes: clockchimes (plays clock chimes based on the system time) clockchimes: clockchimes: Clockchimes creates a cron job that runs a sox based bash script. clockchimes: The script plays clock chime sound files based on the system time. -clockchimes: The initial release plays Westminster chimes on the 15 minute, +clockchimes: The initial releases play Westminster chimes on the 15 minute, clockchimes: 30 minute, 45 minute and top of the hour. clockchimes: -clockchimes: Home: http://www.go4it2day.com +clockchimes: Home: https://www.go4it2day.com/news/clockchimes-0.2.html clockchimes: clockchimes: clockchimes: -- cgit v1.2.3