diff --git a/scripts/pull_feedback.sh b/scripts/pull_feedback.sh index 346ec8e..a7f3a78 100755 --- a/scripts/pull_feedback.sh +++ b/scripts/pull_feedback.sh @@ -6,17 +6,70 @@ set -e VPS=${1:?Usage: $0 user@host} REMOTE=/var/bincio/data/_feedback LOCAL=$(dirname "$0")/../feedback +SEEN="$LOCAL/.seen" mkdir -p "$LOCAL" echo "Syncing feedback from $VPS:$REMOTE → $LOCAL" -rsync -avz --progress "${VPS}:${REMOTE}/" "$LOCAL/" +rsync -az "${VPS}:${REMOTE}/" "$LOCAL/" -echo "" -echo "=== Feedback summary ===" -for f in "$LOCAL"/*.json; do - [[ -f "$f" ]] || continue - handle=$(basename "$f" .json) - count=$(python3 -c "import json,sys; d=json.load(open('$f')); print(len(d) if isinstance(d, list) else 1)" 2>/dev/null || echo "?") - echo " @$handle: $count submission(s)" -done +python3 - "$LOCAL" "$SEEN" <<'EOF' +import json, sys, os +from datetime import datetime, timezone + +local_dir, seen_file = sys.argv[1], sys.argv[2] + +seen = set() +if os.path.exists(seen_file): + seen = set(json.loads(open(seen_file).read())) + +new_entries = [] +all_ids = [] + +for fname in sorted(os.listdir(local_dir)): + if not fname.endswith('.json') or fname.startswith('.'): + continue + handle = fname[:-5] + try: + entries = json.load(open(os.path.join(local_dir, fname))) + if not isinstance(entries, list): + entries = [entries] + except Exception: + continue + for e in entries: + eid = e.get('id', '') + all_ids.append(eid) + if eid not in seen: + new_entries.append((handle, e)) + +if new_entries: + print(f'\n\033[1;32m=== {len(new_entries)} new submission(s) ===\033[0m') + for handle, e in new_entries: + ts = e.get('submitted_at', '')[:10] + text = e.get('text', '').replace('\n', ' ') + images = e.get('images', []) + img_note = f' [{len(images)} image(s)]' if images else '' + print(f'\n \033[1m@{handle}\033[0m {ts}') + if text: + print(f' {text[:200]}{"…" if len(text) > 200 else ""}') + if img_note: + print(f' {img_note}') +else: + print('\n=== No new feedback ===') + +# Print totals +print('\n--- totals ---') +for fname in sorted(os.listdir(local_dir)): + if not fname.endswith('.json') or fname.startswith('.'): + continue + handle = fname[:-5] + try: + entries = json.load(open(os.path.join(local_dir, fname))) + count = len(entries) if isinstance(entries, list) else 1 + print(f' @{handle}: {count}') + except Exception: + pass + +# Save updated seen set +open(seen_file, 'w').write(json.dumps(list(set(all_ids)))) +EOF