From 6a06b1c14308dee4b44f67b6b88bcd6a43c92a76 Mon Sep 17 00:00:00 2001 From: Florian Schlegel Date: Sat, 29 Aug 2020 18:39:01 +0200 Subject: [PATCH] implement basic caching --- departure.sh | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/departure.sh b/departure.sh index 64d97e9..bbb637b 100755 --- a/departure.sh +++ b/departure.sh @@ -148,6 +148,7 @@ get_cvag_station_name() local -n _STATION_ID=$2 COMPLETE_STATION_LIST="$(curl --connect-timeout 5 -s "http://www.cvag.de/eza/mis/stations?minLat=0&maxLat=100&minLon=0&maxLon=100")" + [ -z "$(echo $COMPLETE_STATION_LIST | grep -oe "^{.*}$")" ] && return 1 for ((i=0; i<${#_STATION_ID[*]}; i++)); do case ${_STATION_ID[$i]} in ""|*[!0-9]*) @@ -161,6 +162,7 @@ get_cvag_station_name() done } +STATION_SCHEDULE=() get_cvag_station_info() { local -n _STATION_STOPS=$2 @@ -170,11 +172,14 @@ get_cvag_station_info() local -n _STATION_ACTUAL_DEPARTURE=$6 local -n _REALSTATION_NOW=$7 local -n _THISDATE=$8 + _ERROR=0 - STATION_SCHEDULE="$(curl --connect-timeout 5 -s "http://www.cvag.de/eza/mis/stops/station/CAG-${STATION_ID[$1]}")" + THIS_STATION_SCHEDULE="$(curl --connect-timeout 5 -s "http://www.cvag.de/eza/mis/stops/station/CAG-${STATION_ID[$1]}")" + [ ! -z "$(echo "$THIS_STATION_SCHEDULE" | grep -oe "^{.*}$")" ] && STATION_SCHEDULE[$1]=$THIS_STATION_SCHEDULE || _ERROR=1 # return data from cache + [ -z "$STATION_SCHEDULE[$1]" ] && _ERROR=2 # no data cached yet - _STATION_STOPS=$(echo "$STATION_SCHEDULE" | jq -r ".stops | .[]") - _STATION_NOW=$(echo "$STATION_SCHEDULE" | jq -r ".now") + _STATION_STOPS=$(echo "${STATION_SCHEDULE[$1]}" | jq -r ".stops | .[]") + _STATION_NOW=$(echo "${STATION_SCHEDULE[$1]}" | jq -r ".now") _STATION_DESTINATIONS=($(echo -n "$_STATION_STOPS" | jq -r ".destination")) _STATION_LINES=($(echo -n "$_STATION_STOPS" | jq -r ".line")) _STATION_ACTUAL_DEPARTURE=($(echo -n "$_STATION_STOPS" | jq -r ".actualDeparture")) @@ -183,6 +188,8 @@ get_cvag_station_info() [ ${#REALSTATION_NOWMS} -lt 3 ] && REALSTATION_NOWMS="0$REALSTATION_NOWMS" _REALSTATION_NOW=$(( "$_STATION_NOW" / 1000)) _THISDATE=$(date --date="@$_REALSTATION_NOW" +"%d.%m.%Y %T")",$REALSTATION_NOWMS" + + return $_ERROR } draw_logo_time() @@ -200,8 +207,8 @@ draw_logo_time() LOGO_LINES_POSITION=0 STATION_NAME=() while true; do - [ ${#STATION_NAME[@]} -eq 0 ] && get_cvag_station_name STATION_NAME STATION_ID - if [ ${#STATION_NAME[@]} -eq 0 -o -z "$(curl --connect-timeout 5 -s "http://www.cvag.de/eza/mis/stops/station/CAG-0" | grep -oe "^{.*}$")" ]; then + [ ${#STATION_NAME[*]} -eq 0 ] && get_cvag_station_name STATION_NAME STATION_ID + if [ ${#STATION_NAME[*]} -eq 0 ]; then clear echo -e "\\n\\n\\n\\tService unavailable!" sleep 10 @@ -212,20 +219,23 @@ while true; do for ((j=0; j<="${#STATION_ID[*]}"; j++)); do if [ ! "$j" -eq "$LOGO_LINES_POSITION" ]; then [ "$j" -gt "$LOGO_LINES_POSITION" ] && THIS_STATION_ID=$(($j-1)) || THIS_STATION_ID=$j - get_cvag_station_info $THIS_STATION_ID STATION_STOPS STATION_NOW STATION_DESTINATIONS STATION_LINES STATION_ACTUAL_DEPARTURE REALSTATION_NOW THISDATE - MYOUTPUT[$j]="${MYOUTPUT[$j]}\n\n\ + get_cvag_station_info $THIS_STATION_ID STATION_STOPS STATION_NOW STATION_DESTINATIONS STATION_LINES STATION_ACTUAL_DEPARTURE REALSTATION_NOW THISDATE + STATION_INFO_ERR=$? + if [ ! $STATION_INFO_ERR -eq 2 ]; then # FIXME: add warning, when STATION_INFO_ERR == 1 + MYOUTPUT[$j]="${MYOUTPUT[$j]}\n\n\ \t\t┌────────────────────────────────┬─────────────────────────┐ \n\ \t\t│ ${STATION_NAME[$THIS_STATION_ID]}$(printf "%-$((31-${#STATION_NAME[$THIS_STATION_ID]}))s" "")│ $THISDATE │\n\ \t\t├────────────────────┬─────┬─────┴─────────────────────────┤\n" - for ((i=0; i<"${#STATION_LINES[*]}"; i++)); do - MILLIS=$((${STATION_ACTUAL_DEPARTURE[$i]} - STATION_NOW)); [ "$MILLIS" -lt 0 ] && MILLIS=0 - SEKS=$((MILLIS / 1000)); MILLIS=$((MILLIS % 1000)); MINS=$((SEKS / 60)); SEKS=$((SEKS % 60)) - MYOUTPUT[$j]="${MYOUTPUT[$j]}\ + for ((i=0; i<"${#STATION_LINES[*]}"; i++)); do + MILLIS=$((${STATION_ACTUAL_DEPARTURE[$i]} - STATION_NOW)); [ "$MILLIS" -lt 0 ] && MILLIS=0 + SEKS=$((MILLIS / 1000)); MILLIS=$((MILLIS % 1000)); MINS=$((SEKS / 60)); SEKS=$((SEKS % 60)) + MYOUTPUT[$j]="${MYOUTPUT[$j]}\ \t\t│$(printf "%-$((3-${#MINS}))s" "")$MINS min $(printf "%-$((2-${#SEKS}))s" "")$SEKS,$(printf "%03d" $MILLIS) s │ $(printf "%-$((3-${#STATION_LINES[$i]}))s" "")${STATION_LINES[$i]} │ ${STATION_DESTINATIONS[$i]}$(printf "%-$((29-${#STATION_DESTINATIONS[$i]}))s" "") │\\n" - done - MYOUTPUT[$j]="${MYOUTPUT[$j]}\ + done + MYOUTPUT[$j]="${MYOUTPUT[$j]}\ \t\t└────────────────────┴─────┴───────────────────────────────┘" + fi fi done draw_logo_time LOGO_AND_TIME $REALSTATION_NOW