06 · Application desktop / API

ScanGUI lecteur C++/GTK

Un lecteur desktop natif pour bibliothèques d’images, devenu un terrain d’architecture complet : mode local, client API, synchronisation offline, serveur HTTP C++ sans framework et indexation PostgreSQL.

C++20GTKmmHTTP/POSIXPostgreSQLOfflineCTest
SCANGUI / DATA SOURCE
mode          Local / API / Offline
library       covers · search · favorites
reader        single · double · webtoon
progress      local profile + server sync
background    download queue
server        C++ HTTP + PostgreSQL

source: ScanDataSource abstraction

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

Interface
GTKmm
ScanDataSource
+ DownloadQueue
Fichiers / cache
ou API HTTP
Serveur C++
+ 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

01 / PORTABILITY

Trois modes, un contrat

L’interface consomme la même API en local direct, serveur local ou offline.

02 / RESPONSIVENESS

Queue de téléchargements

Les tâches longues exposent progression et annulation et ne bloquent pas le thread UI.

03 / SECURITY

Serveur borné au local

Contrôle anti path traversal, CORS configurable et refus des routes admin hors contexte local.

04 / DATA

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.

ScanGUI core unit testsSuite exécutée avec succès sans serveur ni écran
cmake -S . -B build -DSCANGUI_BUILD_GUI=OFF -DSCANGUI_BUILD_SERVER=OFF
cmake --build build --target ScanGUITests
ctest --test-dir build --output-on-failure

Preuves 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.
Revenir au projet phareStation sol de télémétrie spatiale