40 lines
1.0 KiB
Bash
Executable File
40 lines
1.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
BASE_DIR=${1:-/dev/shm/voip_rec}
|
|
INCOMING_DIR="$BASE_DIR/incoming"
|
|
READY_DIR="$BASE_DIR/ready"
|
|
FAILED_DIR="$BASE_DIR/failed"
|
|
MIN_AGE_SECONDS=${MIN_AGE_SECONDS:-15}
|
|
|
|
mkdir -p "$INCOMING_DIR" "$READY_DIR" "$FAILED_DIR"
|
|
chmod 0770 "$READY_DIR"
|
|
|
|
find "$INCOMING_DIR" -type f \( -name '*.wav' -o -name '*.mp3' \) -print0 |
|
|
while IFS= read -r -d '' source; do
|
|
if [ ! -s "$source" ]; then
|
|
continue
|
|
fi
|
|
now=$(date +%s)
|
|
mtime=$(stat -c %Y "$source")
|
|
if [ $((now - mtime)) -lt "$MIN_AGE_SECONDS" ]; then
|
|
continue
|
|
fi
|
|
if command -v fuser >/dev/null 2>&1 && fuser -s -- "$source"; then
|
|
continue
|
|
fi
|
|
rel=${source#"$INCOMING_DIR"/}
|
|
part="$READY_DIR/$rel.part"
|
|
ready="$READY_DIR/$rel.ready"
|
|
failed="$FAILED_DIR/$rel"
|
|
mkdir -p "$(dirname "$part")" "$(dirname "$failed")"
|
|
chmod 0770 "$(dirname "$part")"
|
|
if [ -e "$ready" ] || [ -e "$part" ]; then
|
|
mv -- "$source" "$failed.$(date -u +%Y%m%dT%H%M%SZ).duplicate"
|
|
continue
|
|
fi
|
|
mv -- "$source" "$part"
|
|
chmod 0640 "$part"
|
|
mv -- "$part" "$ready"
|
|
done
|