aboutsummaryrefslogtreecommitdiff
path: root/scripts/scheduler.sh
blob: 2ea1dc2e553b0f81bb090e3bf8963f70f3b66691 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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;