mirror of
https://github.com/wahyd4/kb.git
synced 2026-08-08 21:06:27 +10:00
94 lines
2.5 KiB
Bash
Executable File
94 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# KB Inbox — list raw files with status: inbox
|
|
# Usage: ./scripts/inbox.sh [--count] [--recent N] [--month YYYY-MM]
|
|
|
|
set -euo pipefail
|
|
|
|
KB_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
COUNT_ONLY=false
|
|
RECENT=0
|
|
MONTH=""
|
|
|
|
# Check dependencies
|
|
if ! command -v rg &>/dev/null; then
|
|
echo "❌ ripgrep (rg) is required. Install: apt install ripgrep / brew install ripgrep" >&2
|
|
exit 1
|
|
fi
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case $1 in
|
|
--count)
|
|
COUNT_ONLY=true ;;
|
|
--recent)
|
|
if [[ ! "${2-}" =~ ^[0-9]+$ ]]; then
|
|
echo "Error: --recent requires a number" >&2
|
|
exit 1
|
|
fi
|
|
RECENT="$2"; shift ;;
|
|
--month)
|
|
MONTH="$2"; shift ;;
|
|
*)
|
|
echo "Unknown option: $1" >&2
|
|
echo "Usage: ./scripts/inbox.sh [--count] [--recent N] [--month YYYY-MM]" >&2
|
|
exit 1 ;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
cd "$KB_DIR"
|
|
|
|
# Use frontmatter-only match: status: inbox in the YAML header
|
|
match_inbox() {
|
|
rg -l --glob '*.md' '^status:\s*inbox\s*$' "$@"
|
|
}
|
|
|
|
if $COUNT_ONLY; then
|
|
if [ -n "$MONTH" ]; then
|
|
count=$(match_inbox "raw/${MONTH}/" 2>/dev/null | wc -l)
|
|
echo "📥 Inbox ($MONTH): $count items pending"
|
|
else
|
|
count=$(match_inbox raw/ 2>/dev/null | wc -l)
|
|
echo "📥 Inbox total: $count items pending"
|
|
fi
|
|
exit 0
|
|
fi
|
|
|
|
echo "📥 KB Inbox — pending review"
|
|
echo "============================"
|
|
echo ""
|
|
|
|
# Collect items safely
|
|
search_path="raw/"
|
|
[ -n "$MONTH" ] && search_path="raw/${MONTH}/"
|
|
|
|
mapfile -t items < <(match_inbox "$search_path" 2>/dev/null | sort -r)
|
|
if [ "$RECENT" -gt 0 ] && [ "${#items[@]}" -gt "$RECENT" ]; then
|
|
items=("${items[@]:0:$RECENT}")
|
|
fi
|
|
|
|
if [ "${#items[@]}" -eq 0 ]; then
|
|
echo "✅ No inbox items — all caught up!"
|
|
exit 0
|
|
fi
|
|
|
|
for f in "${items[@]}"; do
|
|
# Extract frontmatter fields
|
|
title=$(awk '/^---/{f++;next} f==1 && /^title:/{gsub(/^title: *"?/,""); gsub(/"$/,""); print; exit}' "$f" 2>/dev/null)
|
|
url=$(awk '/^---/{f++;next} f==1 && /^source_url:/{gsub(/^source_url: *"?/,""); gsub(/"$/,""); print; exit}' "$f" 2>/dev/null)
|
|
ingested=$(awk '/^---/{f++;next} f==1 && /^ingested:/{gsub(/^ingested: */,""); print; exit}' "$f" 2>/dev/null)
|
|
|
|
if [ -z "$title" ]; then
|
|
title=$(basename "$f" .md | sed 's/^[0-9-]*//' | tr '-' ' ' | sed 's/^ *//')
|
|
fi
|
|
|
|
echo "[${ingested:-?}] 📄 ${title:0:80}"
|
|
if [ -n "$url" ]; then
|
|
echo " 🔗 ${url:0:100}"
|
|
fi
|
|
echo " 📁 $f"
|
|
echo ""
|
|
done
|
|
|
|
echo "---"
|
|
echo "Total: ${#items[@]} inbox items"
|