#!/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 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 "$CRON_SCHEDULE" ] && [ -n "$SITES" ]; then echo "Setting up cron job with schedule: $CRON_SCHEDULE" # Cron runs with a minimal env — bake grab-related vars into a wrapper script. { echo '#!/bin/sh' echo 'cd /app' for var in SITES OUTPUT MAX_CONNECTIONS DAYS TIMEOUT DELAY LANG PROXY GZIP JSON CURL; do eval "val=\$$var" if [ -n "$val" ]; then printf "export %s='%s'\n" "$var" "$(printf '%s' "$val" | sed "s/'/'\\\\''/g")" fi done echo 'exec /app/entrypoint.sh grab' } >/app/run-grab.sh chmod +x /app/run-grab.sh echo "$CRON_SCHEDULE /app/run-grab.sh >> /proc/1/fd/1 2>&1" >/etc/crontabs/root chmod 600 /etc/crontabs/root crond -b -l 2 fi echo "Starting server on port 3000 to serve EPG files from /app/guides" npx serve -p 3000 /app/guides & tail -f /dev/null