Files
msv-webcam-backend/post_upload.sh

68 lines
2.2 KiB
Bash

#!/bin/bash
BASE_DIR="/files"
CURRENT_DIR="$BASE_DIR/current"
mkdir -p "$CURRENT_DIR"
# Store last SHA256 checksums and last update timestamps for each camera
declare -A LAST_SHA
declare -A LAST_UPDATE
# How long to wait before deleting stale images (in seconds)
STALE_TIMEOUT=$((15 * 60))
echo "[Watcher] Starting to monitor subfolders in $BASE_DIR ..."
while true; do
NOW=$(date +%s)
for CAM_DIR in "$BASE_DIR"/msvcam*; do
[ -d "$CAM_DIR" ] || continue
CAM_NAME=$(basename "$CAM_DIR")
OUT_FILE="$CURRENT_DIR/${CAM_NAME}.avif"
# Find the newest image
NEWEST_FILE=$(find "$CAM_DIR" -type f \
\( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.bmp" -o -iname "*.tif" -o -iname "*.tiff" \) \
-printf "%T@ %p\n" 2>/dev/null | sort -n | tail -1 | awk '{print $2}')
if [ -n "$NEWEST_FILE" ]; then
# Calculate SHA256 of the newest image
SHA=$(sha256sum "$NEWEST_FILE" | awk '{print $1}')
# Check if this file has already been converted
if [ "${LAST_SHA[$CAM_NAME]}" != "$SHA" ]; then
echo "[Watcher] New or changed file detected for $CAM_NAME: $NEWEST_FILE"
if avifenc "$NEWEST_FILE" "$OUT_FILE"; then
sync
LAST_SHA[$CAM_NAME]="$SHA"
LAST_UPDATE[$CAM_NAME]=$NOW
echo "[Watcher] Conversion successful: $OUT_FILE"
else
echo "[Watcher][ERROR] Conversion failed for $NEWEST_FILE"
fi
else
echo "[Watcher] No change detected for $CAM_NAME, skipping conversion."
fi
fi
# Check for staleness
if [ -n "${LAST_UPDATE[$CAM_NAME]}" ]; then
ELAPSED=$((NOW - LAST_UPDATE[$CAM_NAME]))
if [ $ELAPSED -ge $STALE_TIMEOUT ]; then
if [ -f "$OUT_FILE" ]; then
echo "[Watcher] No new image for $CAM_NAME in $((STALE_TIMEOUT/60)) minutes. Removing $OUT_FILE"
rm -f "$OUT_FILE"
fi
fi
fi
done
# Sleep before next check
SLEEP_INTERVAL="${SLEEP_INTERVAL:-5}"
sleep "$SLEEP_INTERVAL"
done