···11+#!/usr/bin/env bash
22+# alarma-simple.sh - The simplest possible calendar query
33+# Just runs a hardcoded SQL query against EDS cache databases
44+55+set -euo pipefail
66+77+# Hardcoded paths
88+EDS_CACHE_PATH="$HOME/.cache/evolution/calendar"
99+QUERY_FILE="$(dirname "$0")/events-query.sql"
1010+1111+echo "Querying Evolution Data Server calendar cache..."
1212+echo
1313+1414+# Find all cache databases and run the query
1515+for cache_db in "$EDS_CACHE_PATH"/*/cache.db; do
1616+ if [ -f "$cache_db" ]; then
1717+ echo "=== $(basename "$(dirname "$cache_db")") ==="
1818+ sqlite3 -header -column "$cache_db" < "$QUERY_FILE" 2>/dev/null || true
1919+ echo
2020+ fi
2121+done
+31
events-query.sql
···11+-- Query Evolution Data Server calendar cache for events
22+-- Hardcoded date range: 2025-12-25 to 2026-03-31 (extended to catch recurring events)
33+-- This query works against ~/.cache/evolution/calendar/{hash}/cache.db
44+55+SELECT
66+ ECacheUID,
77+ summary,
88+ -- Use occur_start if available (for recurring events),
99+ -- otherwise parse DTSTART from the iCalendar object
1010+ CASE
1111+ WHEN occur_start != '' THEN occur_start
1212+ ELSE substr(
1313+ substr(ECacheOBJ, instr(ECacheOBJ, 'DTSTART')),
1414+ instr(substr(ECacheOBJ, instr(ECacheOBJ, 'DTSTART')), ':') + 1,
1515+ 15
1616+ )
1717+ END as event_start,
1818+ -- Extract location from iCalendar object if present
1919+ CASE
2020+ WHEN instr(ECacheOBJ, 'LOCATION:') > 0 THEN
2121+ rtrim(substr(
2222+ substr(ECacheOBJ, instr(ECacheOBJ, 'LOCATION:')),
2323+ 10,
2424+ instr(substr(ECacheOBJ, instr(ECacheOBJ, 'LOCATION:')), char(10)) - 10
2525+ ))
2626+ ELSE ''
2727+ END as location
2828+FROM ECacheObjects
2929+WHERE substr(event_start, 1, 8) BETWEEN '20251225' AND '20260115'
3030+ AND event_start != ''
3131+ORDER BY event_start;