Files
say.sh/saygui.sh

226 lines
4.6 KiB
Bash
Executable File

#!/bin/bash
# Base paths
P2WFILE="say"
ROOTPATH="$HOME/.local/bin/say/"
SRCPATH="$ROOTPATH$P2WFILE.sh"
GUIPATH="$ROOTPATH$P2WFILEgui.sh"
CFGPATH="$ROOTPATH$P2WFILE.cfg"
# Main title
TITLE="SayGUI"
# Accepted languages
P2WLNGS=( "en-GB" "en-US" "fr-FR" "de-DE" "it-IT" "es-ES" );
P2WLNGSNAME=( 'English (GB)' 'English (US)' 'French' 'German' 'Italian' 'Spanish' );
# Load base functions
. "$SRCPATH"
sayguilngname()
{
i=0;
re='^[a-z]{2}\-[A-Z]{2}$';
if ! [ $# -eq 1 ]; then
return 0
fi
for LNG in "${P2WLNGS[@]}"; do
if [[ "$LNG" = "$1" ]]; then
echo "${P2WLNGSNAME[$i]}"
return 1
fi
i=`expr $i + 1`;
done
}
sayguimenu()
{
while true
do
WINDOW=`zenity --list \
--width=640 --height=480 \
--title="$TITLE | Main menu" \
--text="" \
--ok-label="Open" \
--cancel-label="Exit" \
--hide-column=1 \
--hide-header \
--column="Action" --column="Menu Option" \
"tts" "Say something!"\
"lng" "Language Settings" \
"vol" "Volume Settings" \
"spd" "Speed Settings" 2> /dev/null`
case $? in
0)
if [ "$WINDOW" = "tts" ]; then
sayguitts
elif [ "$WINDOW" = "lng" ]; then
sayguilng
elif [ "$WINDOW" = "vol" ]; then
sayguivol
elif [ "$WINDOW" = "spd" ]; then
sayguispd
fi;;
1)
sayguinotif "Aucune valeur sélectionnée.";
break;;
-1)
sayguinotif "Une erreur inattendue est survenue.";
break;;
esac
done
}
sayguitts()
{
while true
do
TEXT=`zenity --entry \
--width=640 --height=480 \
--title="$TITLE | Say something!" \
--text="Type anything you wish to be read:" \
--ok-label="Save" \
--cancel-label="Close" \
--entry-text "$TEXT" 2> /dev/null`
case $? in
0)
echo "$TEXT"
if ! [ "$TEXT" = "" ]; then
say "$TEXT"
fi;;
1)
sayguinotif "Aucune valeur sélectionnée.";
break;;
-1)
sayguinotif "Une erreur inattendue est survenue.";
break;;
esac
done
}
sayguilng()
{
cfg=( `cat $CFGPATH` )
lng="`sayguilngname ${cfg[0]}`"
LANGUAGE=`zenity --list \
--width=640 --height=480 \
--title="$TITLE | Language Settings" \
--text "Current language: $lng (${cfg[0]})" \
--ok-label="Save" \
--cancel-label="Close" \
--hide-column=1 \
--hide-header \
--column="" --column="Language" \
"en-US" "English (US)" \
"en-GB" "English (GB)" \
"fr-FR" "French" \
"de-DE" "German" \
"es-ES" "Spanish" \
"it-IT" "Italian" 2> /dev/null`
case $? in
0)
if ! [ "$LANGUAGE" = "" ]; then
saylng "$LANGUAGE"
sayguinotif "Vous avez choisi $LANGUAGE."
fi;;
1)
sayguinotif "Aucune valeur sélectionnée.";;
-1)
sayguidial "Une erreur inattendue est survenue." "error";;
esac
}
sayguivol()
{
cfg=( `cat $CFGPATH` )
vol=`echo "${cfg[1]} * 100" | bc`
VOLUME=`zenity --scale --title="$TITLE | Volume Settings" \
--width=640 --height=480 \
--text="Set new volume level" \
--ok-label="Save" \
--cancel-label="Close" \
--value=$vol --min-value=0 --max-value=200 --step=1 2> /dev/null`
case $? in
0)
if ! [ "$VOLUME" = "" ]; then
sayvol "`echo \"$VOLUME / 100\" | bc`"
sayguinotif "Vous avez choisi $VOLUME%."
fi;;
1)
sayguinotif "Aucune valeur sélectionnée.";;
-1)
sayguidial "Une erreur inattendue est survenue." "error";;
esac
}
sayguispd()
{
cfg=( `cat $CFGPATH` )
spd=`echo "${cfg[1]} * 100" | bc`
SPEED=`zenity --scale --title="$TITLE | Speed Settings" \
--width=640 --height=480 \
--text="Set new speed level" \
--ok-label="Save" \
--cancel-label="Close" \
--value=$spd --min-value=50 --max-value=150 --step=1 2> /dev/null`
case $? in
0)
if ! [ "$SPEED" = "" ]; then
sayspd "`echo \"$SPEED / 100\" | bc`"
sayguinotif "Vous avez choisi $SPEED%."
fi;;
1)
sayguinotif "Aucune valeur sélectionnée.";;
-1)
sayguidial "Une erreur inattendue est survenue." "error";;
esac
}
sayguinotif()
{
zenity --notification\
--window-icon="info" \
--text="$1" 2> /dev/null
}
sayguidial()
{
if [ $# -ge 1 ]; then
TYPE=$2
if [ $TYPE = "" ]; then
TYPE="info"
fi
if [ $TYPE = "info" ]; then
zenity --info --text="$1" 2> /dev/null
fi
if [ $TYPE = "warning" ]; then
zenity --warning --text="$1" 2> /dev/null
fi
if [ $TYPE = "error" ]; then
zenity --error --text="$1" 2> /dev/null
fi
if [ $TYPE = "question" ]; then
zenity --question --text="$1" 2> /dev/null
return $?
fi
fi
}
if [ $# -eq 1 ]; then
if [ $1 = "tts" ]; then
sayguitts
elif [ $1 = "lng" ]; then
sayguilng
elif [ $1 = "vol" ]; then
sayguivol
elif [ $1 = "spd" ]; then
sayguispd
else
sayguimenu
fi
else
sayguimenu
fi