added shack plenum script

This commit is contained in:
2026-01-22 21:00:21 +01:00
parent 6fcb47c5bc
commit 305dd464f8

View File

@@ -0,0 +1,84 @@
#!/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