dotfiles.git

commit a553c6c568dbf01263066d3116af84c697272991

Author: Adam Pioterek <apioterek@consdata.com>

water syncing

 .config/sh/functions | 42 ++++++++++++++++++++++++++++++++++++++++--


diff --git a/.config/sh/functions b/.config/sh/functions
index 789fe8e4cee6b431d4ca8258ae0b3bd2ed042a61..6458e3ef4638dfc5c9956949befb6aa96fa6958c 100644
--- a/.config/sh/functions
+++ b/.config/sh/functions
@@ -1277,12 +1277,48 @@ 	then
 		sqlite3 "$HOME/.local/state/water/water.db" "create table devices (device_id text, device_type text)"
 		meID=$(uuidgen -r)
 		sqlite3 "$HOME/.local/state/water/water.db" "insert into devices values('$meID', 'me')"
-		sqlite3 "$HOME/.local/state/water/water.db" "create table intakes (date text, time text, amount int, drink text, device_id text)"
+		sqlite3 "$HOME/.local/state/water/water.db" "create table intakes (date text, time text, amount int, drink text, device_id text, clock int)"
 	fi
 }
 
 drunk() {
 	waterInit
+
+	if [ "$1" = 'sync' ]
+	then
+		meID=$(sqlite3 "$HOME/.local/state/water/water.db" -noheader "select device_id from devices where device_type = 'me'" 2>/dev/null)
+
+		worldView=$(sqlite3 "$HOME/.local/state/water/water.db" -noheader "select 'h:' || device_id || ':' || max(clock) group by device_id from intakes" 2>/dev/null)
+		world=$(curl -XPUT https://monitoring.apiote.xyz/life -H"Authorization: $lifeToken" -d "$worldView")
+
+		intakeUpdates=""
+		for line in $world
+		do
+			case "$line" in
+				w*)
+					deviceID=$(echo "$line" | cut -d ':' -f 2)
+					clock=$(echo "$line" | cut -d ':' -f 3)
+					intakes=$(sqlite3 "$HOME/.local/state/water/water.db" -noheader "select 'u:' || device_id || ':' || clock || ':' || date || 'T' || time || ':' || amount || ':' || drink from intakes where device_id = '$deviceID' and clock >= $clock" 2>/dev/null)
+					intakeUpdates="${intakeUpdates}${intakes}"  # TODO with \n ?
+				;;
+				u*)
+					deviceID=$(echo "$line" | cut -d ':' -f 2)
+					clock=$(echo "$line" | cut -d ':' -f 3)
+					datetime=$(echo "$line" | cut -d ':' -f 4)
+					date=$(echo "$datetime" | cut -d 'T' -f 1)
+					time=$(echo "$datetime" | cut -d 'T' -f 2)
+					amount=$(echo "$line" | cut -d ':' -f 5)
+					drink=$(echo "$line" | cut -d ':' -f 6)
+					sqlite3 "$HOME/.local/state/water/water.db" "insert into intakes values('$date', '$time', $amount, '$drink', '$deviceID', '$clock')" 2>/dev/null
+				# TODO insert into devices
+				;;
+			esac
+		done
+
+		curl -XPUT https://monitoring.apiote.xyz/life -H"Authorization: $lifeToken" -d "$intakeUpdates"
+
+		exit
+	fi
 
 	if [ -z "$1" ]
 	then
@@ -1329,7 +1365,9 @@ 		date=$(echo "$3" | cut -c -8)
 		time="$(echo "$3" | cut -c 9-12)00"
 	fi
 	meID=$(sqlite3 "$HOME/.local/state/water/water.db" -noheader "select device_id from devices where device_type = 'me'" 2>/dev/null)
-	sqlite3 "$HOME/.local/state/water/water.db" "insert into intakes values('$date', '$time', $amount, '$2', '$meID')" 2>/dev/null
+	clock=$(sqlite3 "$HOME/.local/state/water/water.db" -noheader "select max(clock)+1 from intakes where device_id = '$meID'" 2>/dev/null)
+	[ -z "$clock" ] && clock=1
+	sqlite3 "$HOME/.local/state/water/water.db" "insert into intakes values('$date', '$time', $amount, '$2', '$meID', '$clock')" 2>/dev/null
 	echo "ok, drank ${amount} ml $2"
 }