feat(desktop): compagnon Windows pour consulter, ranger et récupérer ses photos - #3
Merged
Merged
Conversation
…ses photos Ajoute le module `:desktop`, une application Compose Multiplatform qui accompagne l'app mobile sur un poste de travail : photothèque, albums, export vers un dossier, identification collaborative et carte des observations. La prise de photo reste sur mobile ; l'import de photos existantes viendra ensuite. Les contrôles sont repensés pour le PC plutôt que transposés du mobile : sélection multiple aux conventions de l'Explorateur (clic, Ctrl+clic, Maj+clic), menu contextuel au clic droit, double-clic, raccourcis clavier, vignettes redimensionnables et rail de navigation latéral. Trois décisions structurent le module : - Les packages `network/dto`, `network/api`, `network/auth` et `ui/theme` sont partagés avec `:app` plutôt que dupliqués : les contrats d'API et la charte graphique ne peuvent pas diverger entre les deux clients. Seuls les fichiers liés au framework Android sont exclus et réimplémentés (stockage des jetons, thème, typographie). - La carte dessine elle-même les tuiles raster MapTiler au lieu d'embarquer un moteur natif : MapLibre est propre à Android, et ce choix évite toute dépendance native à l'installation tout en laissant la main sur les interactions à la souris. - Aucune base locale : un poste fixe est connecté, le cache disque des images suffit à la fluidité sans dupliquer la logique de synchronisation et de résolution de conflits du mobile. Corrige au passage un défaut de la projection : `latToWorldY` pouvait renvoyer une ordonnée très légèrement négative aux limites de Mercator, ce qui écartait du rendu un marqueur situé à l'extrême nord. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
antoinnneee
marked this pull request as ready for review
July 26, 2026 09:12
antoinnneee
added a commit
that referenced
this pull request
Jul 26, 2026
Conflits limités aux deux changelogs, les deux côtés ayant écrit sous « Non publié » : les entrées du compagnon Windows sont insérées dans les sous-sections correspondantes, sans toucher aux entrées locales ni réorganiser les sections existantes. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Nouveau module
:desktop: une application de bureau Compose Multiplatform quiaccompagne l'app mobile. Elle couvre tout le périmètre demandé — voir ses
photos, gérer ses albums, récupérer ses fichiers, identifier les fleurs de ses
amis et tout revoir sur une carte — la prise de photo restant sur mobile.
Vérifié
./gradlew :desktop:test— 38 tests (sélection multiple, projection WebMercator, nommage des fichiers exportés, clé de cache des images).
./gradlew :app:testDebugUnitTest— le module Android reste vert../gradlew :desktop:createDistributable— exécutable Windows produit.photothèque (28 photos), albums, identification collaborative et carte,
chaque écran contrôlé par capture de la fenêtre.
Contrôles pensés pour le PC
Plutôt que de transposer l'interface mobile, la navigation reprend les réflexes
de l'Explorateur Windows : clic pour sélectionner,
Ctrl+clic pour ajouter,Maj+clic pour étendre une plage, double-clic pour ouvrir, clic droit pour lemenu contextuel. S'y ajoutent les raccourcis (
Ctrl+1..6,Ctrl+A,Ctrl+F,Ctrl+E,F5,Suppr,Échap), des vignettes redimensionnables et un raillatéral à la place de la barre inférieure — sur un écran 16:9, la hauteur est la
ressource rare.
Décisions notables
Sources partagées avec
:app.network/dto,network/api,network/authet
ui/themesont compilés par les deux modules au lieu d'être dupliqués : uneévolution du backend se répercute sur les deux clients à la compilation. Seuls
EncryptedTokenStore,Theme.ktetType.kt, liés au framework Android, sontexclus et réimplémentés.
Carte dessinée en Compose. Le SDK MapLibre est propre à Android. Le
compagnon rend lui-même les tuiles raster MapTiler : aucune dépendance native à
installer, et des interactions réellement faites pour la souris (glisser pour
déplacer, molette pour zoomer sur le point survolé, regroupement des marqueurs).
Pas de base locale. L'app mobile a Room et une synchronisation hors-ligne
parce qu'on photographie sur le terrain. Un poste fixe est connecté : le cache
disque des images suffit à la fluidité, sans dupliquer la logique de résolution
de conflits.
Points à trancher
EncryptedSharedPreferencesaccessible depuis la JVM sans dépendance native.Ils sont dans un fichier du profil utilisateur avec une ACL réduite au compte
courant, plutôt qu'un chiffrement dont la clé serait stockée à côté. À
requalifier si le compagnon doit sortir d'un usage personnel.
packageMsiexige WiX Toolset, non installé ici : seulcreateDistributablea donc été vérifié.surfaceContainer*. Material 3 les a ajoutés après l'écriture duthème Android, où ils ne sont pas mappés : sans valeur explicite, Material
retombe sur sa palette baseline violette. Ils sont définis côté bureau ; l'app
Android est probablement concernée par le même écart, non traité ici.
Ensuite
L'import de photos existantes, annoncé comme la suite : l'upload multipart des
variantes WebP est déjà exposé par l'API et partagé par ce module.
🤖 Generated with Claude Code