#!/bin/sh set -e # Commander reads optional flags from env (e.g. PROXY="") — empty values crash grab. for var in PROXY DAYS TIMEOUT LANG OUTPUT GZIP JSON CURL; do eval "val=\$$var" if [ -z "$val" ]; then unset "$var" 2>/dev/null || true fi done grab_epg() { cmd="npm run grab --" if [ -n "$SITES" ]; then if [ -n "$OUTPUT" ]; then output="$OUTPUT" else output='guides/{site}.xml' fi cmd="$cmd --sites=$SITES --output=$output" else cmd="$cmd --channels=public/channels.xml --output=${OUTPUT:-public/guide.xml}" fi if [ -n "$MAX_CONNECTIONS" ]; then cmd="$cmd --maxConnections=$MAX_CONNECTIONS" fi if [ -n "$DAYS" ]; then cmd="$cmd --days=$DAYS" fi if [ -n "$TIMEOUT" ]; then cmd="$cmd --timeout=$TIMEOUT" fi if [ -n "$DELAY" ] && [ "$DELAY" != "0" ]; then cmd="$cmd --delay=$DELAY" fi if [ -n "$LANG" ]; then cmd="$cmd --lang=$LANG" fi if [ -n "$PROXY" ]; then cmd="$cmd --proxy=$PROXY" fi if [ "$GZIP" = "true" ]; then cmd="$cmd --gzip" fi if [ "$JSON" = "true" ]; then cmd="$cmd --json" fi if [ "$CURL" = "true" ]; then cmd="$cmd --curl" fi echo "Running: $cmd" eval $cmd } if [ "$1" = "grab" ]; then if ! mkdir /tmp/epg-grab.lock 2>/dev/null; then echo "EPG grab already running, skipping" exit 0 fi trap 'rmdir /tmp/epg-grab.lock 2>/dev/null || true' EXIT INT TERM grab_epg exit 0 fi mkdir -p /app/guides if [ -n "$SITES" ]; then echo "Starting initial EPG data grab for sites: $SITES" grab_epg fi if [ -n "$SITES" ] && [ "${GRAB_INTERVAL_HOURS:-0}" -gt 0 ] 2>/dev/null; then echo "Scheduling EPG grab every ${GRAB_INTERVAL_HOURS} hours" ( while true; do sleep $((GRAB_INTERVAL_HOURS * 3600)) echo "Starting scheduled EPG grab at $(date -u '+%Y-%m-%d %H:%M:%S UTC' 2>/dev/null || date)" /app/entrypoint.sh grab done ) & elif [ -n "$CRON_SCHEDULE" ]; then echo "WARNING: CRON_SCHEDULE is deprecated, use GRAB_INTERVAL_HOURS instead (ignored)" fi echo "Starting server on port 3000 to serve EPG files from /app/guides" npx serve -p 3000 /app/guides & tail -f /dev/null