#!/bin/bash export LC_ALL=C.UTF-8 export LANG=C.UTF-8 # --- CONFIGURATION HEADER --- TARGET_DIR="/data/privat/s/shackspace.de/data/plenum/agenda_files" API_URL='https://api.shackspace.de/v1/plena/next' WIKI_BASE="https://wiki.shackspace.de/plenum" TODAY=$(date +%Y-%m-%d) TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S) GLOB_PATTERN="agenda_${TODAY}_[0-9][0-9]-[0-9][0-9]-[0-9][0-9].txt" # Default flag states SHOW_NO_PLENUM=0 SHOW_NEXT_DATE=0 FORCE_CONTENT=0 FORCE_DUMP=0 # --- PARSE FLAGS --- while getopts "pnvf" opt; do case $opt in p) SHOW_NO_PLENUM=1 ;; n) SHOW_NEXT_DATE=1 ;; v) FORCE_CONTENT=1 ;; f) FORCE_DUMP=1 ;; *) echo "Usage: $0 [-p] [-n] [-v] [-f]"; exit 1 ;; esac done # --- DATA FETCHING --- RAW=$(curl -s "$API_URL") [[ -z "$RAW" ]] && { echo "Error: API unreachable." >&2; exit 1; } ISO_DATE=$(jq -r .date <<<"$RAW" | tr -d 'Z') FILE_DATE=$(date -d "$ISO_DATE" +%Y-%m-%d) URL_API=$(jq -r .url <<<"$RAW") # Use today's date for URL if -f is active, otherwise use API URL [[ $FORCE_DUMP -eq 1 ]] && FETCH_DATE="$TODAY" || FETCH_DATE="$FILE_DATE" [[ $FORCE_DUMP -eq 1 ]] && URL="${WIKI_BASE}/${TODAY}" || URL="$URL_API" CONTENT=$(curl -s "$URL" | w3m -dump -T text/html -I UTF-8 -O UTF-8 | sed -n "/^Plenum $FETCH_DATE/,/^Seiten-Werkzeuge/p" | sed '/^Seiten-Werkzeuge/d') [[ $(grep -q "Dieses Thema existiert noch nicht" <<< "$CONTENT"; echo $?) -eq 0 ]] && CONTENT="" # --- FILE CHECK --- EXISTING_COUNT=$(ls -la "${TARGET_DIR}"/${GLOB_PATTERN} 2>/dev/null | wc -l) # --- GIT FUNCTION (TOTALLY SILENT) --- git_sync() { local file=$1 if [[ -d "$TARGET_DIR" ]] && [[ -d "${TARGET_DIR}/.git" ]]; then pushd "$TARGET_DIR" > /dev/null git add "$file" > /dev/null 2>&1 git commit -q -m "auto: add $file" > /dev/null 2>&1 git push -q origin main > /dev/null 2>&1 popd > /dev/null fi } # --- MAIN LOGIC --- if [[ "$FORCE_DUMP" -eq 1 ]]; then # SILENT DUMP: Only if a file for today already exists if [[ $EXISTING_COUNT -gt 0 && -n "$CONTENT" ]]; then FILENAME="agenda_$TIMESTAMP.txt" echo "$CONTENT" > "${TARGET_DIR}/$FILENAME" git_sync "$FILENAME" fi elif [[ "$FILE_DATE" == "$TODAY" ]]; then # Standard daily dump (first run) if [[ $EXISTING_COUNT -eq 0 && -n "$CONTENT" ]]; then FILENAME="agenda_$TIMESTAMP.txt" echo "$CONTENT" > "${TARGET_DIR}/$FILENAME" echo "$CONTENT" git_sync "$FILENAME" fi else [[ $SHOW_NO_PLENUM -eq 1 ]] && echo "There is no Plenum today" [[ $SHOW_NEXT_DATE -eq 1 ]] && echo "Next Plenum on $(date -d "$ISO_DATE" '+%a, %Y-%m-%d')" fi if [[ $FORCE_CONTENT -eq 1 && -n "$CONTENT" && "$FETCH_DATE" != "$TODAY" ]]; then echo "--- Forced Content Output ($FETCH_DATE) ---" echo "$CONTENT" fi