Le problème
Faire évoluer une application native sans dupliquer le métier
La lecture d’un chapitre doit fonctionner depuis le système de fichiers, via une API locale ou depuis un cache offline. Si l’interface connaît chaque mode, la navigation et la progression se retrouvent dupliquées. `ScanDataSource` fournit donc un contrat unique au-dessus des implémentations locales et HTTP.
Le projet traite également le travail de fond : téléchargement, progression, pause, reprise, annulation et retry, sans bloquer la boucle GTK.
Architecture
Un client natif au-dessus de sources interchangeables
GTKmm
+ DownloadQueue
ou API HTTP
+ PostgreSQL
Le serveur local réalise son routage HTTP sur sockets POSIX, indexe les scans et sert images, progression, profils, favoris et recherche. Ce choix rend visible le fonctionnement d’une API sans dépendre d’un framework web moderne.
Décisions d’ingénierie
Préserver l’usage tout en structurant le code
Trois modes, un contrat
L’interface consomme la même API en local direct, serveur local ou offline.
Queue de téléchargements
Les tâches longues exposent progression et annulation et ne bloquent pas le thread UI.
Serveur borné au local
Contrôle anti path traversal, CORS configurable et refus des routes admin hors contexte local.
PostgreSQL pour l’index
Scans, chapitres, pages, progression, favoris, historique et OCR disposent d’un modèle persistant.
Démonstration réelle
Validation du domaine sans dépendances graphiques
La capture exécute la suite légère couvrant session de lecture, repository JSON, source de fichiers, synchronisation offline, queue de téléchargement et parsing HTTP. La partie GTK reste séparée afin que le cœur soit testable sur une machine sans affichage.
cmake -S . -B build -DSCANGUI_BUILD_GUI=OFF -DSCANGUI_BUILD_SERVER=OFF
cmake --build build --target ScanGUITests
ctest --test-dir build --output-on-failurePreuves techniques
Ce que le dépôt permet de vérifier
- Interface native GTKmm : bibliothèque, favoris, recherche, progression et modes de lecture.
- Serveur HTTP C++ local, sockets POSIX, contrôleur API et accès PostgreSQL.
- Abstractions `FileSystemScanDataSource` et `ApiScanDataSource` derrière le même contrat.
- Documentation API et guide technique complet en Markdown, LaTeX et PDF.