This commit is contained in:
team3
2026-09-19 20:59:47 +02:00
parent 45a6ecf654
commit 4548178a7c
20 changed files with 832 additions and 23 deletions

View File

@@ -28,7 +28,9 @@ unter allen Fenstern, über dem Wallpaper.
- `notes.js` – Ordnerbaum, Markdown-Anzeige, Inline-Editor, Kontextmenü
- `widgets.js` – Popover (Grab, Esc, Tab, Klick daneben), Kontextmenü, Datums- und Zeitauswahl
- `markdown.js`, `dates.js` – reine Logik, ohne Shell testbar
- `store.js` – Ablage
- `store.js` – Ablage, Tombstones, Übernahme vom Server
- `sync.js` – Abgleich mit dem Server (Soup, Timer)
- `backend/` – Sync-Server (FastAPI, SQLite), `Dockerfile`, `docker-compose.yml`
- `dev/` – Test-Werkzeuge
## Daten
@@ -38,6 +40,41 @@ unter allen Fenstern, über dem Wallpaper.
- `events.json` – Termine
- `todos.json` – Todos
- `notes/` – Notizen als `.md`, Ordner beliebig verschachtelt (Obsidian kann den Ordner öffnen)
- `deleted-notes.json` – gelöschte Notizen mit Zeitpunkt, damit der Sync sie auch woanders löscht
- `sync.json` – Server-Zugang, siehe Sync
- `sync-state.json` – letzter Server-Stand
Gelöschte Termine und Todos bleiben mit `deleted: true` in der Datei und werden nur ausgeblendet.
## Sync
Der Server (`backend/`, FastAPI + SQLite) hält den Kern. Jedes Gerät gleicht alle paar Sekunden ab:
eigene Änderungen hoch, fremde Änderungen runter. Bei Konflikten gewinnt der Eintrag mit dem
neueren `updated` (Notizen: Änderungszeit der Datei, ganze Datei). Offline geht weiter, beim
Wiederverbinden wird nachgeliefert. Eine gerade offene Notiz wird nicht von außen überschrieben.
Zugang auf jedem Gerät in `~/.local/share/desktop-app/sync.json`:
```
{"url": "https://planer.marha.de", "token": "<SYNC_TOKEN aus .env>", "interval": 5}
```
Ohne diese Datei läuft die Extension rein lokal.
Server-API (alle Aufrufe mit `Authorization: Bearer <SYNC_TOKEN>`):
- `POST /api/sync` – `{"since": <cursor>, "events": [...], "todos": [...], "notes": [...]}`; Antwort: Änderungen seit `since` plus neuer `cursor`
- `GET /api/events`, `/api/todos`, `/api/notes` – aktueller Stand ohne Gelöschte, für andere Anwendungen
### Server starten
```
cp .env.example .env # SYNC_TOKEN setzen
make dev # lokal, http://localhost:8040 (anderer Port: make dev PORT=8050)
make prod # auf dem Server: Docker Compose hinter Traefik, https://planer.marha.de
make stop | make logs | make down
make test # Server-Tests
```
## Installation
@@ -56,6 +93,7 @@ gjs -m dev/tests/run.js # Unit-Tests für dates.js und markdown.js
dev/restart.sh # Test-Shell als Fenster starten (zum Selbst-Ausprobieren)
dev/restart.sh headless # Test-Shell unsichtbar, für simulierte Eingaben
dev/tests/input.sh # Ablauf-Tests mit echter Maus und Tastatur (headless)
dev/tests/sync.sh # Sync-Test: lokaler Server plus headless Shell, beide Richtungen
dev/eval.sh dev/seed.js # Testdaten einspielen
dev/eval.sh 'js' # JavaScript in der Test-Shell ausführen (oder Dateipfad)
dev/shot.sh [datei.png] # Screenshot der Test-Shell