v0.6.15 : un refus d'installation n'est plus definitif

Le drapeau .install_declined (0.6.11) supprimait la question POUR TOUJOURS :
apres un Non, plus aucun moyen d'installer AJEAN, meme en relancant le fichier
telecharge. Un refus vaut « pas maintenant » : la question revient au prochain
lancement, et la fenetre l'annonce.

Verifie au banc d'essai : refus, relance, question reposee, acceptation,
installation + raccourcis + demarrage.
This commit is contained in:
nathaninline committed 2026-08-04 13:34:28 +02:00
1 parent 26ce8a9a14
commit c1d58b19f2
6 files changed
+22 -36

No files matched your search

+1 -1
View File
@@ -10,7 +10,7 @@ import (
"strings"
)
const Version = "0.6.14"
const Version = "0.6.15"
// Main est le vrai main() du binaire (cmd/jean ne fait que l'appeler).
func Main() {
+13 -18
View File
@@ -29,10 +29,11 @@ import (
//
// Maintenant, deux cas seulement :
//
// 1. AJEAN n'est pas installé. On DEMANDE, une bonne fois : c'est le seul moment
// où l'utilisateur gagne à savoir ce qu'on pose sur sa machine et où. Puis
// copie + PATH + raccourcis, et on démarre depuis la copie installée. Un refus
// est mémorisé, on ne repose pas la question.
// 1. AJEAN n'est pas installé. On DEMANDE : c'est le seul moment où
// l'utilisateur gagne à savoir ce qu'on pose sur sa machine et où. Puis
// copie + PATH + raccourcis, et on démarre depuis la copie installée. Un
// refus vaut « pas maintenant » et la question revient au prochain lancement
// du fichier : mémorisé, il ne laissait AUCUN moyen d'installer AJEAN.
//
// 2. AJEAN est déjà installé. Le fichier téléchargé se comporte en installeur de
// mise à jour, avec trois situations bien distinctes (voir runAsInstaller) :
@@ -102,20 +103,21 @@ func appFirstRun() bool {
// Première installation : là, une question. C'est le seul moment où
// l'utilisateur a intérêt à savoir ce qui va être posé sur sa machine, et
// c'est l'absence de cette question qui rendait le double-clic illisible.
if declinedInstall() {
return false
}
//
// Un refus n'est PAS mémorisé. Il l'a été en 0.6.11 pour éviter de reposer la
// question à chaque lancement, mais il devenait alors définitif : plus aucun
// moyen d'installer AJEAN, même en relançant le fichier téléchargé. Un « non »
// veut dire « pas maintenant », jamais « plus jamais » : c'est le comportement
// de n'importe quel installeur, qui repropose tant qu'on le relance.
if messageBox(
"Installer AJEAN sur cet ordinateur ?\n\n"+
"• le programme sera copié dans :\n "+target+"\n"+
"• un raccourci sera ajouté au menu Démarrer et au Bureau\n"+
"• vos réglages et modèles seront rangés dans :\n "+JeanHome()+"\n\n"+
"Vous pourrez ensuite supprimer le fichier que vous venez de télécharger.\n\n"+
"Répondre Non lance AJEAN sans rien installer.",
"Répondre Non démarre AJEAN sans rien installer. La question reviendra\n"+
"au prochain lancement de ce fichier.",
"Installation d'AJEAN", mbYesNo|mbIconQuestion) != idYes {
// Refus mémorisé : reposer la question à chaque double-clic serait
// ignorer la réponse déjà donnée.
_ = os.WriteFile(declineFlag(), []byte("non\n"), 0o644)
return false
}
@@ -133,13 +135,6 @@ func appFirstRun() bool {
return launch(target)
}
func declineFlag() string { return filepath.Join(JeanHome(), ".install_declined") }
func declinedInstall() bool {
_, err := os.Stat(declineFlag())
return err == nil
}
// launch démarre la copie installée et demande à l'appelant de rendre la main.
// Renvoie false si le lancement échoue, auquel cas l'exécutable courant prend le
// relais : mieux vaut démarrer depuis le mauvais dossier que pas du tout.