#!/usr/bin/env bash # Search Hey tracker by subject, sender name, sender email, or summary # Usage: tracker-search [--mailbox imbox] [--json] set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" VAULT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)" TRACKER="$VAULT_DIR/Meta/hey-tracker.jsonl" if [[ ! -f "$TRACKER" ]]; then echo "Tracker not found at $TRACKER" >&2 exit 1 fi QUERY="" MAILBOX="" JSON=false while [[ $# -gt 0 ]]; do case "$1" in --mailbox) if [[ $# -lt 2 || "$2" == --* ]]; then echo "Usage: tracker-search [--mailbox imbox] [--json]" >&2 exit 1 fi MAILBOX="$2"; shift 2 ;; --json) JSON=true; shift ;; *) QUERY="$1"; shift ;; esac done if [[ -z "$QUERY" ]]; then echo "Usage: tracker-search [--mailbox imbox] [--json]" >&2 exit 1 fi AS_JSON=$([[ "$JSON" == "true" ]] && echo "1" || echo "0") python3 - "$TRACKER" "$QUERY" "$MAILBOX" "$AS_JSON" <<'PYEOF' import json, sys tracker_path, query, mailbox_filter, as_json_flag = sys.argv[1], sys.argv[2].lower(), sys.argv[3], sys.argv[4] == "1" results = [] with open(tracker_path) as f: for line in f: try: e = json.loads(line) except Exception: continue if mailbox_filter and e.get("mailbox") != mailbox_filter: continue haystack = " ".join([ e.get("subject", ""), e.get("sender_name", ""), e.get("sender_email", ""), e.get("summary", "") ]).lower() if query not in haystack: continue results.append(e) if as_json_flag: print(json.dumps(results, indent=2)) else: for e in results: date = e.get("active_at", "")[:10] mb = e.get("mailbox", "") sender = e.get("sender_name", "")[:30] subj = e.get("subject", "")[:60] tid = e.get("topic_id", "") print(f"{date} | {mb:8} | {sender:30} | {subj} | {tid}") PYEOF