commit d506146c55ffa28ed8f5ba2d7ebd496e60e6a8d4
parent 9902b66c098b51ac91785eb5d929a73b981ce08c
Author: Sebastiano Tronto <sebastiano.tronto@gmail.com>
Date: Wed, 22 Dec 2021 09:10:09 +0100
added a script to check past events and notify
Diffstat:
7 files changed, 169 insertions(+), 0 deletions(-)
diff --git a/scripts-build/sdep-add b/scripts-build/sdep-add
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+# Adds a line to /home/sebastiano/.local/share/sdep/once. It is possible to specify a date, which will be
+# read by date -d and prepended to the input text.
+# -d is a non-portable option of GNU date. On some other systems one can
+# accomplish the same with the -j option.
+
+# Usage: sdep-add [date]
+# Example: sdep-add "next monday"
+
+file="/home/sebastiano/.local/share/sdep/once"
+date=""
+
+[ -n "$1" ] && date=$(date -d "$1" +%Y-%m-%d)
+
+[ -n "$date" ] && printf "$date "
+
+read text
+
+if [ -n "$text" ]; then
+ printf "${date}\t${text}\n" >> "$file"
+else
+ echo "Event not saved"
+fi
diff --git a/scripts-build/sdep-checknow b/scripts-build/sdep-checknow
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+# Run this every minute (for example using cron) to receive a notification
+# when an event happens.
+#
+# The events are read from the following files in /home/sebastiano/.local/share/sdep folder:
+# once: events that only happen once; full date needs to be specified
+# daily: events that happen every day; only specify the time in HH:MM format
+# weekly: only specify Weekday + time
+# monthly: only specify day of the month + time
+
+# Requires: notify-send; the weekly part uses the non-portable -d option of
+# GNU date, which you might have to change if you are not on Linux (on some
+# systems you can accomplish the same with -j).
+
+notify="notify-send -t 3600000"
+title="$(date +%H:%M)"
+
+sdepnotify() {
+ sdep -w "" -s "" | while read text; do $notify "$title" "$text"; done
+}
+
+# One-off events
+sdepnotify <"/home/sebastiano/.local/share/sdep/once"
+
+# Daily events
+sed "s/^/$(date +%Y-%m-%d) /" <"/home/sebastiano/.local/share/sdep/daily" | sdepnotify
+
+# Weekly events - needs GNU date (try -j intead of -d on BSD)
+while read line; do
+ weekday=$(echo "$line" | sed "s/ .*$//")
+ echo "$line" | sed "s/^[ ]*[^ ]* /$(date -d $weekday +%Y-%m-%d) /"
+done <"/home/sebastiano/.local/share/sdep/weekly" | \
+sdepnotify
+
+# Monthly events
+sed "s/^[ ]*/$(date +%Y-%m-)/" <"/home/sebastiano/.local/share/sdep/daily" | sdepnotify
diff --git a/scripts-build/sdep-clear b/scripts-build/sdep-clear
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Removes old events from specified file (default: /home/sebastiano/.local/share/sdep/once).
+
+# Usage: sdep-clear [file]
+
+file="/home/sebastiano/.local/share/sdep/${1:-once}"
+temp=$(mktemp)
+
+sdep -t <"$file" >"$temp"
+mv "$temp" "$file"
diff --git a/scripts-build/sdep-edit b/scripts-build/sdep-edit
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Open specified file in sdep folder in editor.
+
+# Usage: sdep-edit [file]
+# No options = once
+
+file="/home/sebastiano/.local/share/sdep/${1:-once}"
+editor=${VISUAL:-vi}
+
+$editor "$file"
diff --git a/scripts-build/sdep-list b/scripts-build/sdep-list
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+# Lists events happening in a specific time range.
+# Recurring events are listed at most once, and only if their first occurrence
+# is in the range.
+#
+# The events are read from the following files in the /home/sebastiano/.local/share/sdep folder:
+# once: events that only happen once; full date needs to be specified
+# daily: events that happen every day; only specify the time in HH:MM format
+# weekly: only specify Weekday + time
+# monthly: only specify day of the month + time
+
+# This script uses relies on the non-portable -d option of GNU date.
+
+# Usage: sdep-list [today|tomorrow|week|nextweek|past|future]
+# No options = all
+
+from=""
+to=""
+w="%d %b %H:%M"
+
+case $1 in
+ today)
+ from="$(date +%Y-%m-%d) 0:00"
+ to="$(date +%Y-%m-%d) 23:59"
+ w="%H:%M"
+ ;;
+ tomorrow)
+ from="$(date -d tomorrow +%Y-%m-%d) 0:00"
+ to="$(date -d tomorrow +%Y-%m-%d) 23:59"
+ w="%H:%M"
+ ;;
+ week)
+ from="$(date -d 'last monday' +%Y-%m-%d) 0:00"
+ to="$(date -d sunday +%Y-%m-%d) 23:59"
+ w="%a %H:%M"
+ ;;
+ nextweek)
+ from="$(date -d 'next monday' +%Y-%m-%d) 0:00"
+ to="$(date -d 'next monday + 6 days' +%Y-%m-%d) 23:59"
+ w="%a %H:%M"
+ ;;
+ past)
+ to="$(date +'%Y-%m-%d %H:%M')"
+ ;;
+ future)
+ from="$(date +'%Y-%m-%d %H:%M')"
+ ;;
+ *)
+ ;;
+esac
+
+tempfile=$(mktemp)
+
+cat "/home/sebastiano/.local/share/sdep/once" > "$tempfile"
+sed "s/^/$(date +%Y-%m-%d) /" <"/home/sebastiano/.local/share/sdep/daily" | >> "$tempfile"
+while read line; do
+ weekday=$(echo "$line" | sed "s/ .*$//")
+ echo "$line" | sed "s/^[ ]*[^ ]* /$(date -d $weekday +%Y-%m-%d) /"
+done <"/home/sebastiano/.local/share/sdep/weekly" >> "$tempfile"
+sed "s/^[ ]*/$(date +%Y-%m-)/" <"/home/sebastiano/.local/share/sdep/daily" >> "$tempfile"
+
+sdep -w "$w" -f "$from" -t "$to" <"$tempfile"
+
+rm "$tempfile"
diff --git a/scripts/sdep-checkpast b/scripts/sdep-checkpast
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+# Run this at boot to receive a notification about past events that you might
+# have missed
+#
+# The events are read from the following files in SDEPDATA folder:
+# once: events that only happen once; full date needs to be specified
+# daily: events that happen every day; only specify the time in HH:MM format
+# weekly: only specify Weekday + time
+# monthly: only specify day of the month + time
+
+# Requires: notify-send.
+
+notify="notify-send -t 3600000"
+
+sdep-list past | \
+while read text; do
+ date=$(echo "$text" | sed 's/\t.*//')
+ event=$(echo "$text" | sed 's/.*\t//')
+ $notify "$date" "$event"
+done
diff --git a/sdep.o b/sdep.o
Binary files differ.