Skip to content

feat(desktop): compagnon Windows pour consulter, ranger et récupérer ses photos - #3

Merged
antoinnneee merged 1 commit into
mainfrom
worktree-windows-companion
Jul 26, 2026
Merged

feat(desktop): compagnon Windows pour consulter, ranger et récupérer ses photos#3
antoinnneee merged 1 commit into
mainfrom
worktree-windows-companion

Conversation

@antoinnneee

@antoinnneee antoinnneee commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Nouveau module :desktop : une application de bureau Compose Multiplatform qui
accompagne 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 Web
    Mercator, 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.
  • Parcours complet exécuté contre un faux backend local : connexion,
    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 le
menu contextuel. S'y ajoutent les raccourcis (Ctrl+1..6, Ctrl+A, Ctrl+F,
Ctrl+E, F5, Suppr, Échap), des vignettes redimensionnables et un rail
laté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/auth
et ui/theme sont 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.kt et Type.kt, liés au framework Android, sont
exclus 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

  • Jetons de session. Windows n'offre pas d'équivalent à
    EncryptedSharedPreferences accessible 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.
  • packageMsi exige WiX Toolset, non installé ici : seul
    createDistributable a donc été vérifié.
  • Rôles surfaceContainer*. Material 3 les a ajoutés après l'écriture du
    thè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

…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
antoinnneee marked this pull request as ready for review July 26, 2026 09:12
@antoinnneee
antoinnneee merged commit 50c5821 into main Jul 26, 2026
2 checks passed
@antoinnneee
antoinnneee deleted the worktree-windows-companion branch July 26, 2026 09:19
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant