From cdc008e36190d948f7334f18721c28e42bd155fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=84min=20Baumeler?= Date: Thu, 12 Jun 2025 14:57:36 +0200 Subject: [PATCH] bugfix: corrected week calculation (iso) --- src/awk/merge.awk | 26 ++++++++++++++++++-------- src/main.sh | 22 +++++++++++----------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/awk/merge.awk b/src/awk/merge.awk index b8fb670..edd5034 100644 --- a/src/awk/merge.awk +++ b/src/awk/merge.awk @@ -1,17 +1,27 @@ -BEGIN { FS="|"; i=0; dlt = -259200; spw = 604800; } +BEGIN { FS="|" } NR == FNR { i = i + 1; - from[i] = int(($1 + dlt)/ spw); + from_year[i] = $1 + from_week[i] = $2 getline; - to[i] = int(($1 + dlt) / spw); + to_year[i] = $1 + to_week[i] = $2 next } # Load start and end week numbers from first file { - if (from[FNR] > to[FNR]) - print "FNR", FNR, ":", from[FNR],"-",to[FNR], " ",$0; - for(i=from[FNR]; i<=to[FNR]; i++) { - week[i] = week[i] " " $5 + year_i = from_year[FNR] + week_i = from_week[FNR] + year_end = to_year[FNR] + week_end = to_week[FNR] + while(year_i <= year_end && (year_i < year_end || week_i <= week_end)) { + label = year_i"|"week_i + week[label] = week[label] " " $5 + week_i++ + if (week_i > 53) { + week_ = 1 + year_i++ + } } } -END { for (i in week) print i week[i]; } +END { for (label in week) print label week[label]; } diff --git a/src/main.sh b/src/main.sh index abb7c03..21420c4 100755 --- a/src/main.sh +++ b/src/main.sh @@ -144,15 +144,14 @@ __load_approx_data() { __load_weeks() { dates=$(awk -F'|' '{ print $2; print $3 }' "$APPROX_DATA_FILE") file_dates=$(mktemp) - echo "$dates" | date --file="/dev/stdin" +"%s" >"$file_dates" + echo "$dates" | date --file="/dev/stdin" +"%G|%V" >"$file_dates" awk "$AWK_MERGE" "$file_dates" "$APPROX_DATA_FILE" rm "$file_dates" } __show_day() { - weeknr=$(date -d "$DISPLAY_DATE" +"%s") - weeknr=$(((weeknr - 259200) / 604800)) # shift, because epoch origin is a Thursday - files=$(grep "^$weeknr " "$WEEKLY_DATA_FILE" | cut -d " " -f 2-) + weeknr=$(date -d "$DISPLAY_DATE" +"%G.%V") + files=$(grep "^$weeknr\ " "$WEEKLY_DATA_FILE" | cut -d " " -f 2-) # Find relevant files in list of week files sef=$({ set -- $files @@ -199,9 +198,8 @@ __show_day() { } __list() { - weeknr=$(date -d "$DISPLAY_DATE" +"%s") - weeknr=$(((weeknr - 259200) / 604800)) # shift, because epoch origin is a Thursday - files=$(grep "^$weeknr " "$WEEKLY_DATA_FILE" | cut -d " " -f 2-) + weeknr=$(date -d "$DISPLAY_DATE" +"%G.%V") + files=$(grep "^$weeknr\ " "$WEEKLY_DATA_FILE" | cut -d " " -f 2-) dayofweek=$(date -d "$DISPLAY_DATE" +"%u") delta=$((1 - dayofweek)) startofweek=$(date -d "$DISPLAY_DATE -$delta days" +"%D") @@ -388,6 +386,7 @@ if [ "${1:-}" = "--new" ]; then if awk -v uid="$uuid" "$AWK_NEW" "$filetmp" >"$filenew"; then mv "$filenew" "$fpath" __refresh_data + start=$(awk -v field="DTSTART" "$AWK_GET" "$fpath" | grep -o '[0-9]\{8\}') else rm -f "$filenew" err "Failed to create new entry. Press to continue." @@ -395,6 +394,7 @@ if [ "${1:-}" = "--new" ]; then fi fi rm "$filetmp" + set -- "--day" "$start" fi if [ -z "${APPROX_DATA_FILE:-}" ]; then @@ -473,8 +473,8 @@ if [ "${1:-}" = "--preview" ]; then fi month_previous() { - month="$1" - year="$2" + month=$(echo "$1" | sed 's/^0//') + year=$(echo "$2" | sed 's/^0//') if [ "$month" -eq 1 ]; then month=12 year=$((year - 1)) @@ -485,8 +485,8 @@ month_previous() { } month_next() { - month="$1" - year="$2" + month=$(echo "$1" | sed 's/^0//') + year=$(echo "$2" | sed 's/^0//') if [ "$month" -eq 12 ]; then month=1 year=$((year + 1))