diff --git a/README.md b/README.md index 3558f4a..664a42d 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ - [🔒 Authentification](#-authentification) - [Ajouter une nouvelle vault](#-ajouter-une-nouvelle-vault) - [Build & dĂ©ploiement avec build.sh](#-build--dĂ©ploiement-avec-buildsh) +- [Desktop (Tauri) — Application native](#-desktop-tauri--application-native) - [Utilisation](#-utilisation) - [API](#-api) - [Performance](#-performance) @@ -495,6 +496,97 @@ curl -X POST http://localhost:2020/api/attachments/rescan/MonVault --- +## đŸ–„ïž Desktop (Tauri) — Application native + +ObsiGate Desktop est une application native construite avec [Tauri](https://tauri.app/) (Rust + webview systĂšme). Elle embarque le backend Python et le frontend dans un exĂ©cutable standalone — zĂ©ro Docker, zĂ©ro ligne de commande. + +> 🚧 **Version 2.0.0 — binaires en cours de stabilisation.** Pour l'instant, le build depuis les sources est recommandĂ©. + +### FonctionnalitĂ©s desktop natives + +| FonctionnalitĂ© | Web | Desktop | +|---|---|---| +| AccĂšs fichiers local | Via upload | Natif (sĂ©lecteur dossier) | +| ThĂšme systĂšme | Manuel | Auto (suit OS dark/light) | +| Notifications | Service Worker | Natif OS | +| Associations `.md` | ❌ | ✅ « Ouvrir avec ObsiGate » | +| Tray icon | ❌ | ✅ Barre des tĂąches | +| Auto-update | ❌ | ✅ VĂ©rifie les releases Gitea | +| Mode hors-ligne | LimitĂ© | Complet (backend local) | + +### TĂ©lĂ©chargement (binaires prĂ©-buildĂ©s) + +Les releases sont publiĂ©es sur [Gitea](https://git.dracodev.net/Projets/ObsiGate/releases) : + +| Plateforme | Format | +|---|---| +| **Linux** | `.deb` + `.AppImage` | +| **Windows** | `.msi` + `.exe` (NSIS) | + +#### Linux + +```bash +# .deb (Debian/Ubuntu/Deepin) +sudo dpkg -i obsigate_2.0.0_amd64.deb +# Lancer : ObsiGate depuis le menu applications ou `obsigate-desktop` + +# .AppImage (toute distrib) +chmod +x ObsiGate_2.0.0_amd64.AppImage +./ObsiGate_2.0.0_amd64.AppImage +``` + +#### Windows + +```cmd +:: Double-cliquer sur ObsiGate_2.0.0_x64.msi +:: Ou lancer ObsiGate depuis le menu DĂ©marrer +``` + +### DĂ©marrage + +1. **Lance l'application** depuis le menu ou la ligne de commande +2. Le backend Python dĂ©marre automatiquement sur `127.0.0.1:17890` +3. La fenĂȘtre s'ouvre et charge l'interface ObsiGate +4. **Premier lancement** : sĂ©lectionne le dossier de tes vaults Obsidian via le sĂ©lecteur natif +5. Pour fermer : icĂŽne tray → Quitter (arrĂȘt propre du backend) + +### Build depuis les sources + +Voir le [guide dĂ©taillĂ© dans desktop/](./desktop/README.md). + +```bash +# Linux +cd desktop +chmod +x build-linux.sh +./build-linux.sh +# → target/release/bundle/deb/obsigate_2.0.0_amd64.deb +# → target/release/bundle/appimage/ObsiGate_2.0.0_amd64.AppImage +``` + +```cmd +REM Windows +cd desktop +build-windows.bat +REM → target/release/bundle/msi/ObsiGate_2.0.0_x64.msi +``` + +### Architecture Desktop + +``` +┌────────────────────────────────────────────┐ +│ Tauri (Rust) │ +│ ├─ Webview (webview systĂšme) │ +│ │ └─ Frontend (HTML/JS/CSS) │ +│ └─ Sidecar Python │ +│ └─ uvicorn backend.main:app │ +│ └─ port 127.0.0.1:17890 │ +└────────────────────────────────────────────┘ +``` + +Cycle de vie : Tauri spawn le backend Python → health check → ouvre la webview. À la fermeture : SIGTERM → arrĂȘt propre → nettoyage. + +--- + ## ïżœđŸ“– Utilisation ### Interface web diff --git a/desktop/README.md b/desktop/README.md index edd2a58..be7dd0d 100644 --- a/desktop/README.md +++ b/desktop/README.md @@ -1,80 +1,263 @@ # ObsiGate Desktop -Application desktop native pour [ObsiGate](https://git.dracodev.net/Projets/ObsiGate) — construite avec [Tauri](https://tauri.app/). +Application desktop native pour [ObsiGate](https://git.dracodev.net/Projets/ObsiGate) — construite avec [Tauri](https://tauri.app/) (Rust + webview systĂšme). -> 🚧 **Phase de conception** — les binaires ne sont pas encore disponibles. +> 🚧 **Version 2.0.0 — les binaires sont en cours de stabilisation.** Le build depuis les sources est la mĂ©thode recommandĂ©e pour le moment. -## PrĂ©requis +## Table des matiĂšres -### Windows -- [Rust](https://rustup.rs/) (stable ≄ 1.75) -- Tauri CLI : `cargo install tauri-cli` -- NSIS (inclus dans le build) -- Python 3.11 embed (tĂ©lĂ©chargĂ© automatiquement) +- [Installation (binaires prĂ©-buildĂ©s)](#installation-binaires-prĂ©-buildĂ©s) +- [Build depuis les sources](#build-depuis-les-sources) +- [DĂ©marrage](#dĂ©marrage) +- [Configuration des vaults](#configuration-des-vaults) +- [Architecture](#architecture) +- [FonctionnalitĂ©s natives](#fonctionnalitĂ©s-desktop-natives) +- [DĂ©pannage](#dĂ©pannage) + +--- + +## Installation (binaires prĂ©-buildĂ©s) + +Les releases sont publiĂ©es sur [Gitea](https://git.dracodev.net/Projets/ObsiGate/releases). ### Linux + ```bash -sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev -cargo install tauri-cli +# .deb (Debian/Ubuntu/Deepin) — installation systĂšme +sudo dpkg -i obsigate_2.0.0_amd64.deb +# Lancement : menu applications → ObsiGate, ou : +obsigate-desktop + +# .AppImage (toute distribution) — portable, pas d'installation +chmod +x ObsiGate_2.0.0_amd64.AppImage +./ObsiGate_2.0.0_amd64.AppImage ``` -## Build +DĂ©pendances runtime (normalement dĂ©jĂ  prĂ©sentes) : +```bash +sudo apt install libwebkit2gtk-4.1-0 libgtk-3-0 libayatana-appindicator3-1 +``` ### Windows + ```cmd -cd desktop -build-windows.bat +:: .msi — installation standard +:: Double-cliquer sur ObsiGate_2.0.0_x64.msi +:: → CrĂ©e un raccourci bureau + entrĂ©e menu DĂ©marrer + +:: .exe NSIS — installateur interactif +:: MĂȘmes options, inclut le raccourci ``` -→ Produit `target/release/bundle/msi/ObsiGate_2.0.0_x64.msi` + `.exe` NSIS + +### macOS + +> Non supportĂ© pour le moment (prioritĂ© Linux/Windows). + +--- + +## Build depuis les sources + +### PrĂ©requis communs + +- [Rust](https://rustup.rs/) stable ≄ 1.75 +- Tauri CLI : `cargo install tauri-cli` +- Python 3.11+ +- Git ### Linux + ```bash -cd desktop +# 1. DĂ©pendances systĂšme +sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev curl + +# 2. Cloner le projet +git clone https://git.dracodev.net/Projets/ObsiGate.git +cd ObsiGate/desktop + +# 3. Build (tout-en-un) chmod +x build-linux.sh ./build-linux.sh ``` -→ Produit `target/release/bundle/deb/obsigate_2.0.0_amd64.deb` + `.AppImage` + +Le script s'occupe de : +1. VĂ©rifier Rust + Tauri CLI + dĂ©pendances systĂšme +2. CrĂ©er l'environnement Python (venv + requirements) +3. Copier le frontend +4. Builder Tauri en mode release + +Produits : +- `target/release/bundle/deb/obsigate_2.0.0_amd64.deb` +- `target/release/bundle/appimage/ObsiGate_2.0.0_amd64.AppImage` + +### Windows + +```cmd +:: 1. PrĂ©requis (PowerShell admin) +winget install Rustlang.Rustup +cargo install tauri-cli + +:: 2. Cloner +git clone https://git.dracodev.net/Projets/ObsiGate.git +cd ObsiGate\desktop + +:: 3. Build +build-windows.bat +``` + +Produits : +- `target\release\bundle\msi\ObsiGate_2.0.0_x64.msi` +- `target\release\bundle\nsis\ObsiGate_2.0.0_x64-setup.exe` + +--- + +## DĂ©marrage + +### Premier lancement + +1. **Lance l'application** (menu ou ligne de commande) +2. Le backend Python dĂ©marre automatiquement → health check sur `127.0.0.1:17890` +3. La fenĂȘtre s'ouvre sur l'interface ObsiGate +4. **SĂ©lectionne le dossier parent de tes vaults** Obsidian via le sĂ©lecteur natif +5. L'indexation dĂ©marre automatiquement + +### Lancements suivants + +- L'application mĂ©morise le dernier dossier configurĂ© +- Le backend dĂ©marre en ~2 secondes +- Les vaults sont rĂ©-indexĂ©es au dĂ©marrage (incrĂ©mental si inchangĂ©) + +### ArrĂȘt + +- **IcĂŽne tray → Quitter** (recommandĂ©) : SIGTERM → arrĂȘt propre du backend → fermeture webview +- **Fermeture fenĂȘtre (X)** : minimise dans le tray (backend continue de tourner) +- **Ctrl+C** dans le terminal (si lancĂ© en dev) : arrĂȘt immĂ©diat + +### Mode dĂ©veloppement + +```bash +cd desktop +cargo tauri dev +# → Lance le backend Python + ouvre la webview avec hot-reload +``` + +--- + +## Configuration des vaults + +Au premier lancement, le sĂ©lecteur de dossier natif te demande le **dossier parent** contenant tes vaults Obsidian. Exemple : + +``` +/home/bruno/Documents/ +├── Obsidian-Recettes/ ← vault #1 +├── Obsidian-IT/ ← vault #2 +└── Obsidian-Perso/ ← vault #3 +``` + +Tous les sous-dossiers contenant un dossier `.obsidian` sont automatiquement dĂ©tectĂ©s comme vaults. + +### Configuration avancĂ©e + +Le fichier de config desktop est stockĂ© dans : +- **Linux** : `~/.config/obsigate-desktop/config.json` +- **Windows** : `%APPDATA%\ObsiGate\config.json` + +```json +{ + "vaults_path": "/home/bruno/Documents", + "backend_port": 17890, + "theme": "system" +} +``` + +--- ## Architecture ``` desktop/ -├── Cargo.toml # DĂ©pendances Rust +├── Cargo.toml # DĂ©pendances Rust (Tauri 2, plugins) ├── tauri.conf.json # Config Tauri (fenĂȘtre, bundle, plugins) ├── build.rs # Script build Tauri ├── src/ │ └── main.rs # Point d'entrĂ©e Rust : spawn backend + webview ├── python-embed/ -│ ├── sidecar.py # Lance uvicorn sur 127.0.0.1:17890 -│ └── ... # Python 3.11 + site-packages (gelĂ©s) -├── build-windows.bat # Script build Windows -├── build-linux.sh # Script build Linux +│ ├── venv/ # Environnement Python isolĂ© +│ └── ... # site-packages gelĂ©s +├── build-linux.sh # Script build Linux (.deb + .AppImage) +├── build-windows.bat # Script build Windows (.msi + NSIS) └── icons/ # IcĂŽnes desktop (.ico, .png, .icns) ``` -## FonctionnalitĂ©s desktop natives - -| FonctionnalitĂ© | Web | Desktop | -|---|---|---| -| AccĂšs fichiers local | Via upload | Natif (sĂ©lecteur dossier) | -| ThĂšme systĂšme | Manuel | Auto (suit OS dark/light) | -| Notifications | Service Worker | Natif OS | -| Associations `.md` | ❌ | ✅ « Ouvrir avec ObsiGate » | -| Tray icon | ❌ | ✅ Barre des tĂąches | -| Auto-update | ❌ | ✅ VĂ©rifie releases Gitea | -| Mode hors-ligne | LimitĂ© | Complet (backend local) | - -## Cycle de vie +### Cycle de vie ``` DĂ©marrage : - 1. Tauri lance python-embed/python → uvicorn backend.main:app + 1. Tauri lance python-embed/venv/bin/python → uvicorn backend.main:app 2. Health check GET /api/health (timeout 15s) 3. Webview ouvre http://127.0.0.1:17890 -ArrĂȘt (tray → Quitter ou fermeture fenĂȘtre) : +ArrĂȘt (tray → Quitter ou Ctrl+C) : 1. SIGTERM envoyĂ© au processus Python 2. Backend s'arrĂȘte proprement (10s timeout) 3. Tauri ferme la webview 4. Processus nettoyĂ© — aucun rĂ©sidu ``` + +--- + +## FonctionnalitĂ©s desktop natives + +| FonctionnalitĂ© | Web (Docker) | Desktop (Tauri) | +|---|---|---| +| AccĂšs fichiers local | Via upload | Natif (sĂ©lecteur dossier) | +| ThĂšme | Manuel (toggle) | Auto (suit OS dark/light) | +| Notifications | Service Worker | Natif OS | +| Associations `.md` | ❌ | ✅ « Ouvrir avec ObsiGate » | +| Tray icon | ❌ | ✅ Barre des tĂąches | +| Auto-update | ❌ (docker pull) | ✅ VĂ©rifie releases Gitea | +| Mode hors-ligne | LimitĂ© | Complet (backend local) | +| RAM au repos | ~150 MB (Docker) | ~80 MB (natif) | +| DĂ©marrage Ă  froid | ~5s (Docker) | ~2s | + +--- + +## DĂ©pannage + +### Le backend ne dĂ©marre pas + +```bash +# VĂ©rifier que le port 17890 est libre +ss -tlnp | grep 17890 + +# Lancer le backend manuellement pour voir les logs +cd ObsiGate +python -m uvicorn backend.main:app --host 127.0.0.1 --port 17890 --log-level debug +``` + +### La fenĂȘtre reste blanche + +- VĂ©rifier que le backend rĂ©pond : `curl http://127.0.0.1:17890/api/health` +- Si "connection refused" → le backend n'a pas dĂ©marrĂ© (voir section prĂ©cĂ©dente) +- Si le healthcheck rĂ©pond mais la webview est blanche → problĂšme CSP ou webview + +### Erreur libwebkit2gtk non trouvĂ© + +```bash +# Ubuntu/Debian/Deepin +sudo apt install libwebkit2gtk-4.1-0 + +# Si l'erreur persiste, installer la version dev +sudo apt install libwebkit2gtk-4.1-dev +``` + +### Build Ă©choue sur Linux + +```bash +# Nettoyer et rebuild +cargo clean +rm -rf python-embed/venv +./build-linux.sh + +# Si erreur de linking, vĂ©rifier les -dev packages +sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev libssl-dev +```