85 lines
2.7 KiB
Bash
Executable File
85 lines
2.7 KiB
Bash
Executable File
#!/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
|