aboutsummaryrefslogtreecommitdiff
path: root/core/update
diff options
context:
space:
mode:
Diffstat (limited to 'core/update')
-rw-r--r--core/update55
1 files changed, 55 insertions, 0 deletions
diff --git a/core/update b/core/update
new file mode 100644
index 0000000..04fd29c
--- /dev/null
+++ b/core/update
@@ -0,0 +1,55 @@
+#!/bin/sh
+export now="$(date +%s.%N)"
+
+update_time=0
+
+mkdir -p "$POMODORO_STATE_PATH"
+load_or_init() {
+ property="$1"
+ default_value="$2"
+ property_path="$POMODORO_STATE_PATH/$property"
+ if [ -f "$property_path" ] ; then
+ eval $property='"$(cat "$property_path")"'
+ else
+ eval $property='$default_value'
+ fi
+}
+[ -z "$lap" ] && load_or_init lap 0
+[ -z "$state" ] && load_or_init state 'reset'
+[ -z "$time" ] && load_or_init time 0.0
+[ "$time" = "0.0" ] && update_time=1
+
+# calculate remaining time on timer
+if [ -z "$remaining" ] ; then
+ remaining="$time"
+ [ "$state" = 'running' ] && remaining="$(echo "( $time - $now ) / 1" | bc)"
+fi
+
+# go to next lap if this timer expired
+if [ "$state" = 'running' ] && [ "${remaining#-}" != "${remaining}" ] ; then
+ lap=$(( $lap + 1 ))
+ state='paused'
+ update_time=1
+fi
+
+# update remaining time if in reset
+[ "$state" = 'reset' ] && update_time=1
+
+if [ $update_time -eq 1 ] ; then
+ time="$POMODORO_NORMAL_DURATION"
+ [ $(( $lap % $POMODORO_BREAK_SHORT_INTERVAL )) -eq $(( $POMODORO_BREAK_SHORT_INTERVAL - 1 )) ] && time=$POMODORO_BREAK_SHORT_DURATION
+ [ $(( $lap % $POMODORO_BREAK_LONG_INTERVAL )) -eq $(( $POMODORO_BREAK_LONG_INTERVAL - 1 )) ] && time=$POMODORO_BREAK_LONG_DURATION
+ remaining="$time"
+fi
+
+# save state
+save_state() {
+ mkdir -p "$POMODORO_STATE_PATH"
+ echo "$lap" > "$POMODORO_STATE_PATH/lap"
+ echo "$state" > "$POMODORO_STATE_PATH/state"
+ echo "$time" > "$POMODORO_STATE_PATH/time"
+}
+
+# export state variables
+export lap state time
+