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 0000000..5c9f021 Binary files /dev/null and b/installers/desktop/splash.png differ diff --git a/web/package-lock.json b/web/package-lock.json index 8cf2eff..889106d 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "loremind-web", - "version": "0.17.2", + "version": "0.17.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "loremind-web", - "version": "0.17.2", + "version": "0.17.3", "dependencies": { "@angular/animations": "^21.2.16", "@angular/common": "^21.2.16", diff --git a/web/package.json b/web/package.json index 7c4e96f..275ed97 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "loremind-web", - "version": "0.17.2", + "version": "0.17.3", "description": "LoreMind Frontend - Angular", "scripts": { "ng": "ng",