Files
SwipeAnything/scripts/seed-demo.sh
T
ilia ce43c5de6d
CI / Gitleaks (pull_request) Successful in 17s
CI / Unit tests (pull_request) Successful in 21s
Add organize folders, details sheet, and richer previews.
Map keys 0–9 to destinations, inspect files before deciding, and preview
PDF/RAW/ZIP/video with an OLED dark UI polish plus demo seed and tests.
2026-07-26 21:38:36 -04:00

128 lines
4.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Seed /tmp/swipe-demo with a mix of preview types for local QA.
set -euo pipefail
DEST="${1:-/tmp/swipe-demo}"
mkdir -p "$DEST"
echo "Meeting notes — keep or toss?" >"$DEST/meeting-notes.txt"
echo "Random screenshot memo" >"$DEST/screenshot-memo.txt"
printf 'item,status\nbeach photo,keep?\nfood photo,keep?\nclip,review\n' >"$DEST/inbox.csv"
# Solid PNGs (no Pillow required)
python3 - <<'PY' "$DEST"
import struct, zlib, sys
from pathlib import Path
dest = Path(sys.argv[1])
def chunk(tag: bytes, data: bytes) -> bytes:
return struct.pack(">I", len(data)) + tag + data + struct.pack(">I", zlib.crc32(tag + data) & 0xFFFFFFFF)
def solid_png(w: int, h: int, r: int, g: int, b: int) -> bytes:
raw = b"".join(b"\x00" + bytes([r, g, b]) * w for _ in range(h))
return (
b"\x89PNG\r\n\x1a\n"
+ chunk(b"IHDR", struct.pack(">IIBBBBB", w, h, 8, 2, 0, 0, 0))
+ chunk(b"IDAT", zlib.compress(raw, 9))
+ chunk(b"IEND", b"")
)
(dest / "photo-beach.png").write_bytes(solid_png(320, 200, 56, 120, 200))
(dest / "photo-food.png").write_bytes(solid_png(320, 200, 200, 90, 60))
print(f"wrote PNGs into {dest}")
PY
if command -v ffmpeg >/dev/null 2>&1; then
ffmpeg -y -hide_banner -loglevel error \
-f lavfi -i "color=c=#38bdf8:s=320x180:d=2" \
-f lavfi -i "sine=f=440:d=2" \
-c:v libx264 -pix_fmt yuv420p -c:a aac -shortest \
"$DEST/clip-demo.mp4"
echo "wrote clip-demo.mp4"
else
echo "ffmpeg not found — skipping video seed" >&2
fi
# One-page PDF with visible Helvetica text (so Quick Look / iframe aren't blank)
python3 - <<'PY' "$DEST"
from pathlib import Path
import sys
content = b"BT /F1 22 Tf 40 200 Td (Receipt scan demo) Tj 0 -36 Td (Keep or toss?) Tj ET"
stream = b"<< /Length %d >>stream\n" % len(content) + content + b"\nendstream"
parts = []
def add(obj: bytes):
parts.append(obj)
return sum(len(p) for p in parts[:-1])
# Build with xref
objs = []
objs.append(b"1 0 obj<< /Type /Catalog /Pages 2 0 R >>endobj\n")
objs.append(b"2 0 obj<< /Type /Pages /Kids [3 0 R] /Count 1 >>endobj\n")
objs.append(
b"3 0 obj<< /Type /Page /Parent 2 0 R /MediaBox [0 0 400 300] "
b"/Contents 4 0 R /Resources<< /Font<< /F1 5 0 R >> >> >>endobj\n"
)
objs.append(b"4 0 obj" + stream + b"\nendobj\n")
objs.append(b"5 0 obj<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>endobj\n")
out = bytearray(b"%PDF-1.4\n")
offsets = [0]
for obj in objs:
offsets.append(len(out))
out.extend(obj)
xref_pos = len(out)
out.extend(f"xref\n0 {len(offsets)}\n".encode())
out.extend(b"0000000000 65535 f \n")
for off in offsets[1:]:
out.extend(f"{off:010d} 00000 n \n".encode())
out.extend(f"trailer<< /Size {len(offsets)} /Root 1 0 R >>\nstartxref\n{xref_pos}\n%%EOF\n".encode())
Path(sys.argv[1], "receipt-scan.pdf").write_bytes(out)
print("wrote receipt-scan.pdf")
PY
# Small zip with a couple of files inside (list-only preview)
rm -f "$DEST/bundle-demo.zip"
(
cd "$DEST"
printf 'hello from zip\n' > /tmp/swipe-zip-a.txt
printf 'item,qty\nwidgets,3\n' > /tmp/swipe-zip-b.csv
zip -q bundle-demo.zip /tmp/swipe-zip-a.txt /tmp/swipe-zip-b.csv 2>/dev/null \
|| python3 - <<'PY'
import zipfile, pathlib
z = pathlib.Path("/tmp/swipe-demo/bundle-demo.zip")
with zipfile.ZipFile(z, "w") as zf:
zf.writestr("readme.txt", "hello from zip\n")
zf.writestr("data/rows.csv", "item,qty\nwidgets,3\n")
print("wrote", z)
PY
)
# Prefer tidy names inside the archive when zip CLI used absolute paths
if command -v zip >/dev/null 2>&1; then
rm -f "$DEST/bundle-demo.zip"
mkdir -p /tmp/swipe-zip-seed/data
printf 'hello from zip\n' > /tmp/swipe-zip-seed/readme.txt
printf 'item,qty\nwidgets,3\n' > /tmp/swipe-zip-seed/data/rows.csv
(cd /tmp/swipe-zip-seed && zip -qr "$DEST/bundle-demo.zip" readme.txt data)
echo "wrote bundle-demo.zip"
fi
# Optional: copy a real RAW from the user library if present (can't synthesize these)
if ! compgen -G "$DEST/sample-raw.*" >/dev/null 2>&1; then
sample="$(find "$HOME/Pictures" "$HOME/Desktop" "$HOME/Downloads" \
\( -iname '*.dng' -o -iname '*.cr2' -o -iname '*.cr3' -o -iname '*.nef' -o -iname '*.arw' \) \
-type f 2>/dev/null | head -n 1 || true)"
if [[ -n "${sample}" ]]; then
ext="${sample##*.}"
cp "$sample" "$DEST/sample-raw.${ext}"
echo "copied RAW sample from $sample"
else
echo "no RAW found under Pictures/Desktop/Downloads — drop a .dng/.cr2 into $DEST to try"
fi
fi
echo "Demo ready: $DEST"
ls -la "$DEST"