120 lines
5.1 KiB
Bash
Executable File
120 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
DB="$HOME/.local/share/mindwtr/mindwtr.db"
|
|
|
|
if [ ! -f "$DB" ]; then
|
|
echo "Fehler: Datenbank nicht gefunden: $DB" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "=== Mindwtr-Statistik ==="
|
|
echo
|
|
|
|
# ── 1. Aufgaben-Übersicht ──
|
|
echo "── Aufgaben (aktiv) ──────────────────"
|
|
sqlite3 "$DB" "
|
|
SELECT status, COUNT(*) AS count
|
|
FROM tasks WHERE deletedAt IS NULL
|
|
GROUP BY status
|
|
ORDER BY CASE status
|
|
WHEN 'inbox' THEN 1 WHEN 'next' THEN 2
|
|
WHEN 'someday' THEN 3 WHEN 'done' THEN 4
|
|
END;" | awk -F'|' '{ printf " %-12s %5s\n", $1, $2 }'
|
|
|
|
active=$(sqlite3 "$DB" "SELECT COUNT(*) FROM tasks WHERE deletedAt IS NULL AND status != 'done';")
|
|
total=$(sqlite3 "$DB" "SELECT COUNT(*) FROM tasks WHERE deletedAt IS NULL;")
|
|
echo " ─────────────────"
|
|
printf " %-12s %5s\n" "Aktiv (o. done)" "$active"
|
|
printf " %-12s %5s\n" "Gesamt" "$total"
|
|
echo
|
|
|
|
# ── 2. Fälligkeiten ──
|
|
echo "── Fälligkeiten ──────────────────────"
|
|
due_overdue=$(sqlite3 "$DB" "
|
|
SELECT COUNT(*) FROM tasks
|
|
WHERE deletedAt IS NULL AND status != 'done'
|
|
AND dueDate IS NOT NULL AND dueDate != '' AND dueDate < datetime('now');")
|
|
due_week=$(sqlite3 "$DB" "
|
|
SELECT COUNT(*) FROM tasks
|
|
WHERE deletedAt IS NULL AND status != 'done'
|
|
AND dueDate IS NOT NULL AND dueDate != ''
|
|
AND dueDate >= datetime('now') AND dueDate < datetime('now', '+7 days');")
|
|
due_today=$(sqlite3 "$DB" "
|
|
SELECT COUNT(*) FROM tasks
|
|
WHERE deletedAt IS NULL AND status != 'done'
|
|
AND dueDate IS NOT NULL AND dueDate != ''
|
|
AND date(dueDate) = date('now');")
|
|
printf " %-20s %5s\n" "Überfällig" "$due_overdue"
|
|
printf " %-20s %5s\n" "Diese Woche" "$due_week"
|
|
printf " %-20s %5s\n" "Heute" "$due_today"
|
|
echo
|
|
|
|
# ── 3. Heutige Aktivität ──
|
|
echo "── Heute & diese Woche ───────────────"
|
|
created_today=$(sqlite3 "$DB" "SELECT COUNT(*) FROM tasks WHERE date(createdAt) = date('now');")
|
|
updated_today=$(sqlite3 "$DB" "SELECT COUNT(*) FROM tasks WHERE date(updatedAt) = date('now');")
|
|
done_today=$(sqlite3 "$DB" "SELECT COUNT(*) FROM tasks WHERE date(completedAt) = date('now') AND deletedAt IS NULL;")
|
|
done_week=$(sqlite3 "$DB" "SELECT COUNT(*) FROM tasks WHERE completedAt >= datetime('now', '-7 days') AND deletedAt IS NULL;")
|
|
printf " %-20s %5s\n" "Heute erstellt" "$created_today"
|
|
printf " %-20s %5s\n" "Heute aktualisiert" "$updated_today"
|
|
printf " %-20s %5s\n" "Heute erledigt" "$done_today"
|
|
printf " %-20s %5s\n" "Diese Woche erledigt" "$done_week"
|
|
echo
|
|
|
|
# ── 4. Aufgaben-Merkmale ──
|
|
echo "── Aufgaben mit ──────────────────────"
|
|
sqlite3 "$DB" "
|
|
SELECT 'Priorität', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND priority IS NOT NULL AND priority != ''
|
|
UNION ALL
|
|
SELECT 'Energielevel', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND energyLevel IS NOT NULL AND energyLevel != ''
|
|
UNION ALL
|
|
SELECT 'Fälligkeitsdatum', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND dueDate IS NOT NULL AND dueDate != ''
|
|
UNION ALL
|
|
SELECT 'Checkliste', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND checklist IS NOT NULL AND checklist != '[]'
|
|
UNION ALL
|
|
SELECT 'Wiederkehrend', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND recurrence IS NOT NULL AND recurrence != ''
|
|
UNION ALL
|
|
SELECT 'Notizen', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND description IS NOT NULL AND description != ''
|
|
UNION ALL
|
|
SELECT 'Zeitschätzung', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND timeEstimate IS NOT NULL AND timeEstimate != ''
|
|
UNION ALL
|
|
SELECT 'Heute fokussiert', COUNT(*) FROM tasks WHERE deletedAt IS NULL AND isFocusedToday = 1;" | awk -F'|' '{ printf " %-20s %5s\n", $1, $2 }'
|
|
echo
|
|
|
|
# ── 5. Top-Kontexte ──
|
|
echo "── Top-Kontexte ──────────────────────"
|
|
sqlite3 "$DB" "
|
|
SELECT j.value AS context, COUNT(*) AS count
|
|
FROM tasks t, json_each(t.contexts) j
|
|
WHERE t.deletedAt IS NULL
|
|
GROUP BY j.value ORDER BY count DESC;" | awk -F'|' '{ printf " %-20s %5s\n", $1, $2 }'
|
|
echo
|
|
|
|
# ── 6. Top-Schlagwörter ──
|
|
echo "── Top-Schlagwörter ──────────────────"
|
|
sqlite3 "$DB" "
|
|
SELECT j.value AS tag, COUNT(*) AS count
|
|
FROM tasks t, json_each(t.tags) j
|
|
WHERE t.deletedAt IS NULL
|
|
GROUP BY j.value ORDER BY count DESC LIMIT 15;" | awk -F'|' '{ printf " %-20s %5s\n", $1, $2 }'
|
|
echo
|
|
|
|
# ── 7. Projekte ──
|
|
echo "── Projekte ──────────────────────────"
|
|
sqlite3 "$DB" "
|
|
SELECT COALESCE(p.title, '(kein Projekt)') AS project, COUNT(*) AS tasks
|
|
FROM tasks t LEFT JOIN projects p ON t.projectId = p.id
|
|
WHERE t.deletedAt IS NULL AND (p.deletedAt IS NULL OR p.id IS NULL)
|
|
GROUP BY project ORDER BY tasks DESC;" | awk -F'|' '{ printf " %-30s %5s\n", $1, $2 }'
|
|
echo
|
|
|
|
# ── 8. Unvollständige Aufgaben ──
|
|
echo "── Unvollständige Aufgaben ───────────"
|
|
incomplete=$(sqlite3 "$DB" "
|
|
SELECT COUNT(*) FROM tasks t
|
|
WHERE deletedAt IS NULL
|
|
AND ((contexts IS NULL OR contexts = '[]') OR (tags IS NULL OR tags = '[]'))
|
|
AND status != 'done';")
|
|
echo " $incomplete Aufgaben ohne Kontext und/oder Schlagwort"
|
|
echo " (Details: ./incomplete.sh)"
|