diff options
Diffstat (limited to 'scripts/scheduler.sh')
| -rwxr-xr-x | scripts/scheduler.sh | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/scripts/scheduler.sh b/scripts/scheduler.sh new file mode 100755 index 0000000..2ea1dc2 --- /dev/null +++ b/scripts/scheduler.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash + +source "$HOME/scripts/modules/utils.sh"; + +SCH_PATH="$HOME/.config/vimwiki/schedule/"; +SCH_TAG="SCH_AUTO_GENERATED"; +CRON_PATH="$HOME/.config/crontab/crontab"; + +get_schedule_files() { + ls "$SCH_PATH" | sed -e '/index.md$/d' | awk "{print \"$SCH_PATH\" \$0}"; +} + +get_time() { awk -F'|' '{print $2}' | trim_line; } +get_label() { awk -F'|' '{print $3}' | trim_line; } +get_level() { + local l=$(awk -F'|' '{print $4}' | trim_line); + case $l in + 1) echo "critical" ;; + 2) echo "normal" ;; + 3) echo "low" ;; + *) echo "" ;; + esac +} + +parse_schedule() { + local days="$1"; + + sed -e '/^#/d' -e '/^\s*$/d' | while read line; do + local time=$(echo "$line" | get_time); + local level=$(echo "$line" | get_level); + + if [[ ! $time == "-" ]] && [[ ! $level == "" ]]; then + local label=$(echo "$line" | get_label); + local time_cron=$(echo $time | awk '{print $2 " " $1}'); + # TODO: Use notify sub command + local command="notify-send '$label' -u $level -a Schedule -t 10000"; + + echo "$time_cron $days $command ##$SCH_TAG"; + fi; + done; +} + +generate_crontab() { + get_schedule_files | while read file; do + days=$(cat $file | awk -F'#' '/^# / {print $2}' | head -n 1 | trim_line) + parse_schedule "$days" < $file; + done +} + +update_crontab() { + cat $CRON_PATH | sed -e "/##$CRON_TAG/d"; + generate_crontab; +} + +# TODO: Make generate and notify sub commands +# case "$1" in + # *) ;; +# esac + +tmpfile=$(mktemp /tmp/crontemp.XXX); +update_crontab > $tmpfile; +cat $tmpfile > $CRON_PATH; +rm $tmpfile; + |
