From f347dcd3574ed3d13aacfb15bbcb727a3c14e5ca Mon Sep 17 00:00:00 2001 From: "IETM_FIXE\\ietm6" Date: Mon, 22 Jun 2026 11:34:55 +0200 Subject: [PATCH] =?UTF-8?q?Passage=20=C3=A0=20la=200.17.3=20et=20ajout=20d?= =?UTF-8?q?'un=20splash=20screen=20pour=20le=20d=C3=A9marrage=20de=20l'app?= =?UTF-8?q?lication?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- brain/app/main.py | 2 +- core/pom.xml | 2 +- .../desktop/DesktopBrowserOpener.java | 21 ++++++++++++++++++ installers/desktop/build-linux.sh | 6 ++++- installers/desktop/build-windows.ps1 | 5 +++++ installers/desktop/splash.png | Bin 0 -> 26479 bytes web/package-lock.json | 4 ++-- web/package.json | 2 +- 8 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 installers/desktop/splash.png diff --git a/brain/app/main.py b/brain/app/main.py index f4005e3..4fdcf38 100644 --- a/brain/app/main.py +++ b/brain/app/main.py @@ -26,7 +26,7 @@ from app.infrastructure.ollama_model_installer import ensure_ollama_embedding_mo app = FastAPI( title="LoreMind Brain", description="Backend IA pour la génération de contenu narratif.", - version="0.17.2", + version="0.17.3", ) logger = logging.getLogger(__name__) diff --git a/core/pom.xml b/core/pom.xml index ebfef0c..fdd897b 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -14,7 +14,7 @@ com.loremind loremind-core - 0.17.2 + 0.17.3 LoreMind Core Backend Core - Architecture Hexagonale diff --git a/core/src/main/java/com/loremind/infrastructure/desktop/DesktopBrowserOpener.java b/core/src/main/java/com/loremind/infrastructure/desktop/DesktopBrowserOpener.java index 4e507df..20677a2 100644 --- a/core/src/main/java/com/loremind/infrastructure/desktop/DesktopBrowserOpener.java +++ b/core/src/main/java/com/loremind/infrastructure/desktop/DesktopBrowserOpener.java @@ -7,6 +7,8 @@ import org.springframework.context.annotation.Profile; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; +import java.awt.SplashScreen; + /** * En mode bureau (profil "local"), ouvre le navigateur par defaut sur * l'application des que le serveur est pret. L'app n'ayant pas de fenetre @@ -25,7 +27,26 @@ public class DesktopBrowserOpener { @EventListener(ApplicationReadyEvent.class) public void onReady() { + // Ferme le splash natif (affiche par la JVM via -splash des le double-clic) + // juste avant d'ouvrir le navigateur : le relais visuel est assure. + closeSplash(); log.info("[Desktop] Application prete — ouverture du navigateur."); DesktopSingleInstance.openAppInBrowser(); } + + /** + * Ferme l'ecran de demarrage si l'app a ete lancee avec {@code -splash:...} + * (cas des installeurs jpackage). No-op silencieux sinon (lancement dev sans + * splash, ou environnement sans affichage). + */ + private void closeSplash() { + try { + SplashScreen splash = SplashScreen.getSplashScreen(); + if (splash != null) { + splash.close(); + } + } catch (Exception e) { + log.debug("[Desktop] Pas de splash a fermer : {}", e.getMessage()); + } + } } diff --git a/installers/desktop/build-linux.sh b/installers/desktop/build-linux.sh index fa813ab..052facd 100644 --- a/installers/desktop/build-linux.sh +++ b/installers/desktop/build-linux.sh @@ -165,6 +165,9 @@ cp "$jar" "$STAGE_DIR/loremind-core.jar" [[ -d "$BRAIN_EMBED/python" ]] || { err "Brain introuvable (brain/dist-embed-linux). Relancez sans --skip-brain."; exit 1; } mkdir -p "$STAGE_DIR/brain" cp -r "$BRAIN_EMBED/." "$STAGE_DIR/brain/" + +# Splash : copie dans la charge utile -> atterrit dans $APPDIR/splash.png (cf. -splash plus bas). +[[ -f "$SCRIPT_DIR/splash.png" ]] && cp "$SCRIPT_DIR/splash.png" "$STAGE_DIR/splash.png" ok "Charge utile prete ($STAGE_DIR)" # --- 5. jpackage -> app-image ---------------------------------------------- @@ -191,7 +194,8 @@ jpackage \ --main-class org.springframework.boot.loader.launch.JarLauncher \ --dest "$OUT_DIR" \ --java-options '-Dspring.profiles.active=local' \ - --java-options "-Dbrain.sidecar.command=$BRAIN_CMD" + --java-options "-Dbrain.sidecar.command=$BRAIN_CMD" \ + --java-options '-splash:$APPDIR/splash.png' APPIMG_SRC="$OUT_DIR/$APP_NAME" # dossier produit par jpackage (avec espace) [[ -d "$APPIMG_SRC" ]] || { err "app-image jpackage introuvable ($APPIMG_SRC)."; exit 1; } diff --git a/installers/desktop/build-windows.ps1 b/installers/desktop/build-windows.ps1 index e3cfd98..146d462 100644 --- a/installers/desktop/build-windows.ps1 +++ b/installers/desktop/build-windows.ps1 @@ -59,6 +59,7 @@ $StageDir = Join-Path $CoreDir 'target\dist-input' # charge utile jpackage $OutDir = Join-Path $CoreDir 'target\dist-out' # .msi produit $IconFile = Join-Path $PSScriptRoot 'app-icon.ico' # icone de l'app (.msi + raccourcis) $WixDir = Join-Path $PSScriptRoot 'wix' # main.wxs surcharge (case "Lancer" en fin d'install) +$SplashFile = Join-Path $PSScriptRoot 'splash.png' # ecran de demarrage (affiche par la JVM via -splash) # --- Version (numerique pour MSI) ------------------------------------------ if (-not $Version) { @@ -192,6 +193,9 @@ if (-not (Test-Path $BrainEmbed)) { Write-Err "Brain introuvable (brain/dist-emb $stageBrain = Join-Path $StageDir 'brain' New-Item -ItemType Directory -Force -Path $stageBrain | Out-Null Copy-Item (Join-Path $BrainEmbed '*') $stageBrain -Recurse + +# Splash : copie dans la charge utile -> atterrit dans $APPDIR\splash.png (cf. -splash plus bas). +if (Test-Path $SplashFile) { Copy-Item $SplashFile (Join-Path $StageDir 'splash.png') } Write-Ok "Charge utile prete ($StageDir)" # --- 5. jpackage -> .msi --------------------------------------------------- @@ -237,6 +241,7 @@ jpackage ` --dest $OutDir ` --java-options '-Dspring.profiles.active=local' ` --java-options "-Dbrain.sidecar.command=$brainCmd" ` + --java-options '-splash:$APPDIR\splash.png' ` --win-per-user-install ` --win-upgrade-uuid 'a7c4e1d2-9b3f-4e6a-8d05-1f2c3b4a5e6d' ` --win-menu --win-menu-group 'DM Loremind' ` diff --git a/installers/desktop/splash.png b/installers/desktop/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..5c9f021169682c890d657922490ca01745497b94 GIT binary patch literal 26479 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 fX+k6Z2Z9y8Y_T(~l}gkgohKh