Files

92 lines
2.3 KiB
Bash

#!/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