aboutsummaryrefslogtreecommitdiff
path: root/scripts/scheduler.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/scheduler.sh')
-rwxr-xr-xscripts/scheduler.sh64
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;
+