Compare commits
1 Commits
alarm-cloc
...
master
Author | SHA1 | Date |
---|---|---|
git@jonathanh.co.uk | c33e54e0b0 | 3 years ago |
2 changed files with 1 additions and 220 deletions
@ -1,219 +0,0 @@ |
|||||||
#!/usr/bin/env sh |
|
||||||
|
|
||||||
# include common definitions |
|
||||||
# shellcheck source=scripts/core/sxmo_common.sh |
|
||||||
. "$(dirname "$0")/sxmo_common.sh" |
|
||||||
|
|
||||||
RTCWAKE="$(which sxmo_rtcwake.sh)" |
|
||||||
ALARMCLOCK="$(which sxmo_alarmclock.sh)" |
|
||||||
|
|
||||||
|
|
||||||
ALARMS="$HOME/.config/sxmo/alarms.tsv" |
|
||||||
NOTIFICATION="${DEFAULT_ALARM:-/usr/share/sxmo/ring.ogg}" |
|
||||||
|
|
||||||
alarms() { |
|
||||||
cat "$ALARMS" | cut -d $'\t' -f 1,2 | sed -E "s/^([^#].*)/\1 $icon_chk/; s/^#//" |
|
||||||
} |
|
||||||
|
|
||||||
playalarm(){ |
|
||||||
message="$1" |
|
||||||
notification="${2:-$NOTIFICATION}" |
|
||||||
echo mpv --quiet --no-video --loop "$notification" & |
|
||||||
mpvid="$!" |
|
||||||
CHOICE="$( |
|
||||||
printf %b " |
|
||||||
Snooze |
|
||||||
Dismiss |
|
||||||
" | |
|
||||||
awk '{$1=$1};1' | grep '\w' | dmenu -p "$message" |
|
||||||
)" |
|
||||||
case "$CHOICE" in |
|
||||||
Snooze) |
|
||||||
notify-send "Still need to implement" |
|
||||||
;; |
|
||||||
Dismiss) |
|
||||||
kill "$mpvid" |
|
||||||
;; |
|
||||||
esac |
|
||||||
} |
|
||||||
|
|
||||||
# First argument should be the string like nyyyyyn |
|
||||||
dayscron(){ |
|
||||||
list="$1" |
|
||||||
cronlist="" |
|
||||||
for i in $(seq 0 6); do |
|
||||||
if [ "${list:$i:1}" = "y" ]; then |
|
||||||
cronlist="$cronlist$i," |
|
||||||
fi |
|
||||||
done |
|
||||||
# Remove trailing , |
|
||||||
cronlist="$(echo "$cronlist" | sed 's/,$//')" |
|
||||||
# If no days were given, assume any day |
|
||||||
[ -z "$cronlist" ] && cronlist="*" |
|
||||||
printf %s "$cronlist" |
|
||||||
} |
|
||||||
|
|
||||||
alarmcrons(){ |
|
||||||
cat "$ALARMS" | sed '/^#/d' | while read line; do |
|
||||||
hour="$(echo "$line" | awk -F '(\t|:)' '{print $1}')" |
|
||||||
minute="$(echo "$line" | awk -F '(\t|:)' '{print $2}')" |
|
||||||
message="$(echo "$line" | awk -F '(\t|:)' '{print $3}')" |
|
||||||
days="$(echo "$line" | awk -F '(\t|:)' '{print $4}')" |
|
||||||
alarm="$(echo "$line" | awk -F '(\t|:)' '{print $5}')" |
|
||||||
printf "%s\n" "$minute $hour * * $(dayscron "$days") $RTCWAKE $ALARMCLOCK playalarm \"$message\" \"$alarm\"" |
|
||||||
done |
|
||||||
} |
|
||||||
|
|
||||||
setcrons(){ |
|
||||||
( |
|
||||||
# All of the crons that aren't to do with the alarm clock |
|
||||||
crontab -l | grep -v sxmo_alarmclock |
|
||||||
# The alarm clock cron entries |
|
||||||
alarmcrons |
|
||||||
) | crontab - |
|
||||||
} |
|
||||||
|
|
||||||
togglealarm() { |
|
||||||
alarm="$1" |
|
||||||
time="$(echo "$alarm" | cut -d ' ' -f 1)" |
|
||||||
description="$(echo "$alarm" | cut -d ' ' -f 2- | sed "s/ $icon_chk//")" |
|
||||||
if echo "$alarm" | grep -q "$icon_chk\$"; then |
|
||||||
# If the alarm contains the check, it needs to be disabled |
|
||||||
sed -i -E "s/^($time\t$description)/#\1/" "$ALARMS" |
|
||||||
else |
|
||||||
# If the alarm doesn't contain the check, it needs to be enabled |
|
||||||
sed -i -E "s/^#($time\t$description)/\1/" "$ALARMS" |
|
||||||
fi |
|
||||||
setcrons |
|
||||||
} |
|
||||||
|
|
||||||
deletealarm() { |
|
||||||
CHOICE="$( |
|
||||||
printf %b "Close Menu\n$(alarms)" | awk '{$1=$1};1' | grep '\w' | |
|
||||||
dmenu -p "Delete Alarm" |
|
||||||
)" |
|
||||||
if [ "$CHOICE" = "Close Menu" ]; then |
|
||||||
return |
|
||||||
else |
|
||||||
time="$(echo "$CHOICE" | cut -d ' ' -f 1)" |
|
||||||
description="$(echo "$CHOICE" | cut -d ' ' -f 2- | sed "s/ $icon_chk//")" |
|
||||||
if echo "$CHOICE" | grep -q "$icon_chk\$"; then |
|
||||||
# If the alarm contains the check, then the line to delete will start time\tdescription |
|
||||||
sed -i -E "/^($time\t$description)/d" "$ALARMS" |
|
||||||
else |
|
||||||
# If the alarm doesn't contain the check, then the line to delete will a hash |
|
||||||
sed -i -E "/^#($time\t$description)/d" "$ALARMS" |
|
||||||
fi |
|
||||||
setcrons |
|
||||||
fi |
|
||||||
} |
|
||||||
|
|
||||||
daylist(){ |
|
||||||
list="$1" |
|
||||||
echo "Sunday $( [ "${list:0:1}" = "y" ] && echo "$icon_chk" )" |
|
||||||
echo "Monday $( [ "${list:1:1}" = "y" ] && echo "$icon_chk" )" |
|
||||||
echo "Tuesday $( [ "${list:2:1}" = "y" ] && echo "$icon_chk" )" |
|
||||||
echo "Wednesday $( [ "${list:3:1}" = "y" ] && echo "$icon_chk" )" |
|
||||||
echo "Thursday $( [ "${list:4:1}" = "y" ] && echo "$icon_chk" )" |
|
||||||
echo "Friday $( [ "${list:5:1}" = "y" ] && echo "$icon_chk" )" |
|
||||||
echo "Saturday $( [ "${list:6:1}" = "y" ] && echo "$icon_chk" )" |
|
||||||
} |
|
||||||
|
|
||||||
listtodays(){ |
|
||||||
sed "/$icon_chk/ s/.*/y/; s/...*/n/" | tr -d '\n' |
|
||||||
} |
|
||||||
|
|
||||||
toggleDay(){ |
|
||||||
# The 7 long string eg nyyyyyn |
|
||||||
days="$1" |
|
||||||
# The number to change (0 indexed) |
|
||||||
item="$2" |
|
||||||
nextItem="$(( item + 1 ))" |
|
||||||
pre="${days:0:item}" |
|
||||||
post="${days:nextItem}" |
|
||||||
current="${days:item:1}" |
|
||||||
if [ "$current" = "y" ]; then |
|
||||||
new="n" |
|
||||||
else |
|
||||||
new="y" |
|
||||||
fi |
|
||||||
echo "$pre$new$post" |
|
||||||
} |
|
||||||
|
|
||||||
newalarm() { |
|
||||||
time="$( |
|
||||||
echo "Cancel" | |
|
||||||
sxmo_dmenu_with_kb.sh -p "Time:" |
|
||||||
)" |
|
||||||
[ "$time" = "Cancel" ] && return |
|
||||||
|
|
||||||
description="$( |
|
||||||
echo "Cancel" | |
|
||||||
sxmo_dmenu_with_kb.sh -p "Description:" |
|
||||||
)" |
|
||||||
[ "$description" = "Cancel" ] && return |
|
||||||
|
|
||||||
days="nnnnnnn" |
|
||||||
|
|
||||||
while true; do |
|
||||||
daytoggle="$( |
|
||||||
printf %b "$(daylist "$days")\nSave\nCancel" | sxmo_dmenu.sh -p "Days:" |
|
||||||
)" |
|
||||||
[ "$daytoggle" = "Save" ] && break |
|
||||||
[ "$daytoggle" = "Cancel" ] && return |
|
||||||
case "$daytoggle" in |
|
||||||
"Save" ) break ;; |
|
||||||
"Cancel" ) return ;; |
|
||||||
"Sunday"* ) days="$(toggleDay "$days" 0)" ;; |
|
||||||
"Monday"* ) days="$(toggleDay "$days" 1)" ;; |
|
||||||
"Tuesday"* ) days="$(toggleDay "$days" 2)" ;; |
|
||||||
"Wednesday"* ) days="$(toggleDay "$days" 3)" ;; |
|
||||||
"Thursday"* ) days="$(toggleDay "$days" 4)" ;; |
|
||||||
"Friday"* ) days="$(toggleDay "$days" 5)" ;; |
|
||||||
"Saturday"* ) days="$(toggleDay "$days" 6)" ;; |
|
||||||
esac |
|
||||||
done |
|
||||||
|
|
||||||
printf %b "$time\t$description\t$days\n" >> "$ALARMS" |
|
||||||
|
|
||||||
setcrons |
|
||||||
} |
|
||||||
|
|
||||||
alarmclockmenu() { |
|
||||||
while true; do |
|
||||||
CHOICE="$( |
|
||||||
printf %b " |
|
||||||
$(alarms) |
|
||||||
New Alarm |
|
||||||
Delete Alarm |
|
||||||
System Menu |
|
||||||
Close Menu |
|
||||||
" | |
|
||||||
awk '{$1=$1};1' | grep '\w' | dmenu -p 'Alarms' |
|
||||||
)" |
|
||||||
[ -z "$CHOICE" ] && exit 1 |
|
||||||
case "$CHOICE" in |
|
||||||
"System Menu" ) |
|
||||||
sxmo_appmenu.sh sys && exit |
|
||||||
;; |
|
||||||
"Close Menu" ) |
|
||||||
exit |
|
||||||
;; |
|
||||||
"New Alarm" ) |
|
||||||
newalarm |
|
||||||
;; |
|
||||||
"Delete Alarm" ) |
|
||||||
deletealarm |
|
||||||
;; |
|
||||||
*) |
|
||||||
togglealarm "$CHOICE" |
|
||||||
;; |
|
||||||
esac |
|
||||||
done |
|
||||||
} |
|
||||||
|
|
||||||
if [ $# -gt 0 ]; then |
|
||||||
"$@" |
|
||||||
else |
|
||||||
alarmclockmenu |
|
||||||
fi |
|
Loading…
Reference in new issue