93 lines
2.3 KiB
Bash
Executable File
93 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
ScriptName=${0##*/}
|
|
TimerPIDFile="/tmp/dclock.pids"
|
|
|
|
# MenuItems
|
|
AddTimer="1. Add timer"
|
|
RemTimer="2. Remove timer"
|
|
ListTimers="3. List timers"
|
|
StartStopWatch="4. Start Stopwatch"
|
|
StopStopWatch="5. Stop Stopwatch"
|
|
ListStopWatch="6. Show Stopwatch"
|
|
ResetStopWatch="7. Reset Stopwatch"
|
|
|
|
_pid_file_cleanup() {
|
|
# Get timer PIDs
|
|
readarray -t timer_PIDs < $TimerPIDFile
|
|
|
|
[ "${timer_PIDs[0]}" = "" ] && return 1
|
|
|
|
# Remove no longer present timers
|
|
for PID in "${timer_PIDs[@]}"
|
|
do
|
|
[ "$(ps -p "$picked_PID" -o comm=)" = "" ] \
|
|
&& timer_PIDs=("${timer_PIDs[@]/$PID}")
|
|
done
|
|
|
|
# Save new PIDs
|
|
touch $TimerPIDFile
|
|
echo ${timer_PIDs[@]} > $TimerPIDFile
|
|
}
|
|
|
|
_timer_add() {
|
|
sleep $1 &
|
|
|
|
# Save pid
|
|
PID=$!
|
|
echo $PID >> $TimerPIDFile
|
|
|
|
notify-send "$ScriptName" "Added timer with duration: $duration, with \
|
|
PID: $PID"
|
|
}
|
|
|
|
_timer_remove() {
|
|
# Get timer PIDs
|
|
readarray -t timer_PIDs < $TimerPIDFile
|
|
|
|
# Get timers as menuitem
|
|
declare -a timers_duration
|
|
declare -a timers_took
|
|
declare -a timers
|
|
for PID in "${timer_PIDs[@]}"
|
|
do
|
|
sleep_duration=$(ps -o cmd= -fp $PID | sed 's/^sleep //' -)
|
|
durations+=($sleep_duration)
|
|
sleeped_duration=$(ps -o lstart= -p $PID \
|
|
| sed 's/^sleep //' -)
|
|
timers+="$PID timer $sleep_duration out of $sleep_duration"
|
|
done
|
|
|
|
# Prompt user to pick
|
|
picked_PID=$(echo ${timers[@]} \
|
|
| dmenu -i -l 10 -p "Pick timer to delete:" \
|
|
| awk 'BEGIN {FS=" "} ; {print $1}')
|
|
|
|
# Kill sleep process
|
|
[ "$(ps -p "$picked_PID" -o comm=)" = "sleep" ] && kill -9 $(awk '{print $1}')
|
|
|
|
# Check and notify if timer still active
|
|
[ "$(ps -p "$picked_PID" -o comm=)" = "sleep" ] \
|
|
&& notify-send "$ScriptName" "Failed to stop timer with PID: $picked_PID" && exit
|
|
|
|
# Remove unset PIDs from $TimerPIDFile
|
|
_pid_file_cleanup
|
|
|
|
notify-send "$ScriptName" "Stopped timer with PID: $picked_PID"
|
|
}
|
|
|
|
_pid_file_cleanup
|
|
|
|
ChosenMenu=$(printf '**Timers\n%s\n%s\n%s\n**Stopwatch\n%s\n%s\n%s\n%s' \
|
|
"$AddTimer" "$RemTimer" "$ListTimers" \
|
|
"$StartStopWatch" "$StopStopWatch" "$ListStopWatch" "$ResetStopWatch" \
|
|
| dmenu -i -l 7 -p "$ScriptName")
|
|
|
|
if [ "$ChosenMenu" = "$AddTimer" ]; then
|
|
duration=$(printf "h = hours\nm = minutes\ns = seconds" \
|
|
| dmenu -i -l 3 -p \ "Timer Duration:")
|
|
_timer_add $duration
|
|
elif [ "$ChosenMenu" = "$RemTimer" ]; then
|
|
_timer_remove
|
|
fi
|