talking-clock/talking-clock-gui/talking-clock-gui

200 lines
6.2 KiB
Bash
Executable File

#!/bin/bash
#GUI for the talking-clock program
#Written by Storm Dragon
#Tuesday, August 28, 2012
#license GPL
chime_settings()
{
#get how often the clock should chime.
chimeInterval=$(yad --form --field="Chime:cb" --separator="" --title="Talking Clock" --text="Please select how often you would like talking-clock to chime:" 'Disable!Hourly!Every Half Hour!Every Quarter Hour')
case "$chimeInterval" in
'Disable')
chimeInterval=0
;;
'Hourly')
chimeInterval=1
;;
'Every Half Hour')
chimeInterval=2
;;
'Every Quarter Hour')
chimeInterval=4
;;
esac
#if [[ $chimeInterval -ge 1 && $chimeInterval -le 4 ]] ; then
echo "talking-clock --cron $chimeInterval"
#fi
}
read_settings()
{
#Initialize variables to defaults before reading existing settings if any
chime="true"
speak="true"
voice=espeak
if [ -e "$confFile" ] ; then
if [ -w "$confFile" ] ; then
bell="$(grep -i 'bell=' "$confFile" | cut -d = -f 2)"
prepend="$(grep -i 'prepend=' "$confFile" | cut -d = -f 2)"
quarter="$(grep -i 'quarter=' "$confFile" | cut -d = -f 2)"
sound="$(grep -i 'sound=' "$confFile" | cut -d = -f 2)"
soundpack="$(grep -i 'soundpack=' "$confFile" | cut -d = -f 2)"
voice="$(grep -i 'voice=' "$confFile" | cut -d = -f 2)"
zipcode="$(grep -i 'zipcode=' "$confFile" | cut -d = -f 2)"
else
yad --error --title="Talking Clock" --text="There was an error reading the settings file. Exiting."
exit 1
fi
fi
}
sound_settings()
{
#Initialize soundMenu variable
soundMenu=0
while [ $soundMenu -ne 7 ] ; do
#Set soundMenu variable e so it will exit properly if nothing is chosen.
soundMenu=7
#get current setting of speak and chime options to make menu display correctly.
if [ "$chime" == "true" ] ; then
chimeSetting="Disable"
else
chimeSetting="Enable"
fi
if [ "$speak" == "true" ] ; then
speakSetting="Disable"
else
speakSetting="Enable"
fi
#Generate the menu for all sound options
yad --title="Talking Clock Sound Settings" --text="select an option:" --button="$chimeSetting _Chimes:1" --button="$speakSetting _Speech:2" --button="_Bell:3" --button="_Quarter Hour:4" --button="_Prepend:5" --button="_Soundpack:6" --button="_Main Menu:7"
soundMenu=$?
#adjust sounds preferences based on the above menu option.
case $soundMenu in
1)
if [ "$chime" == "true" ] ; then
chime="false"
else
chime="true"
fi
;;
2)
if [ -n "$zipcode" ] ; then
yad --error --title="Talking Clock" --text="You must clear the postal code before disabling speech. To do so, select weather from the main menu, and leave the postal code field blank."
fi
if [ "$speak" == "true" -a -z "$zipcode" ] ; then
speak="false"
else
speak="true"
fi
;;
3)
bell="$(yad --file-selection --title="Select An Hourly chime sound" --file-filter="*.ogg")"
if [ -n "$bell" ] ; then
soundpack=""
fi
;;
4)
quarter="$(yad --file-selection --title="Select A Quarter Hour chime sound" --file-filter="*.ogg")"
if [ -n "$quarter" ] ; then
soundpack=""
fi
;;
5)
prepend="$(yad --file-selection --title="Select a sound to play before each chime" --file-filter="*.ogg")"
;;
6)
soundpack="$(yad --file-selection --title="Select the directory that contains the soundpack" --directory)"
if [ -n "$soundpack" ] ; then
bell=""
quarter=""
fi
;;
esac
done
}
voice_settings()
{
voice="$(yad --form --separator="" --field="voice:cb" --title="Talking Clock" --text="Please select a voice for Talking Clock to use:" 'cepstral!espeak!festival!pico!custom')"
echo "$voice"
if [ "$voice" == "custom" ] ; then
voice="$(yad --entry --title="Talking Clock" --text="Please enter custom voice command:")"
fi
}
weather_settings()
{
zipcode="$(yad --entry --title="Talking Clock Weather Settings" --text="Please enter your postal code:")"
if [ -n "$zipcode" ] ; then
speak="true"
fi
}
write_settings()
{
#Make sure the file either doesn't exist, or we have write permissions
if [ ! -e "$confFile" -o -r "$confFile" ] ; then
echo -e "chime=$chime\nspeak=$speak" > $confFile
if [ -n "$bell" ] ; then
echo "bell=$bell" >> $confFile
fi
if [ -n "$prepend" ] ; then
echo -e "prepend=$prepend" >> $confFile
fi
if [ -n "$quarter" ] ; then
echo -e "quarter=$quarter" >> $confFile
fi
if [ -n "$sound" ] ; then
echo -e "sound=$sound" >> $confFile
fi
if [ -n "$soundpack" ] ; then
echo -e "soundpack=$soundpack" >> $confFile
fi
if [ -n "$voice" ] ; then
echo -e "voice=$voice" >> $confFile
fi
if [ -n "$zipcode" ] ; then
echo -e "zipcode=$zipcode" >> $confFile
fi
fi
}
#Main section loop
#find out if changes are system wide, or fo local user.
if [ "$(whoami)" == "root" ] ; then
confFile="/etc/talking-clockrc"
else
confFile="$HOME/.talking-clockrc"
fi
#initialize settings
read_settings
#initialize menu variable
menu=0
while [ $menu -lt 5 ] ; do
#Set menu to exit code incase the window is closed without an option being selected
menu=5
yad --title="Talking Clock" --text="Select an option:" --button="_Chime Settings:1" --button="_Sounds and Soundpacks:2" --button="_Voice:3" --button="_Weather:4" --button="Cance_l:5" --button="S_ave Settings:6"
menu=$?
case "$menu" in
1)
chime_settings
;;
2)
sound_settings
;;
3)
voice_settings
;;
4)
weather_settings
;;
6)
write_settings
;;
*)
exit 0
esac
done