Ajoute l'auto-mise a jour et regroupe les menus sous "Imposition Pro"
Module 8 : verifie/installe les mises a jour directement depuis le menu Acrobat (compare version.txt sur Gitea a CDImp.VERSION, retelecharge les .js si plus recent). Tous les items de menu sont desormais regroupes dans un sous-menu "Edition > Imposition Pro" (Ouvrir le panneau, Gerer la licence, Verifier les mises a jour, A propos) plutot que disperses directement dans le menu Edition.
This commit is contained in:
228
acrobat-plugin/src/Imposition-08-MiseAJour.js
Executable file
228
acrobat-plugin/src/Imposition-08-MiseAJour.js
Executable file
@@ -0,0 +1,228 @@
|
||||
// Imposition-08-MiseAJour.js
|
||||
// ---------------------------------------------------------------------------
|
||||
// Suite d'imposition professionnelle - Folder-Level Script pour Adobe Acrobat Pro
|
||||
// Module 8 : Verification et installation des mises a jour, depuis le menu
|
||||
// Acrobat lui-meme (pas besoin de relancer un installeur externe pour les
|
||||
// mises a jour ulterieures ; l'installeur externe ne sert plus qu'au tout
|
||||
// premier deploiement).
|
||||
//
|
||||
// Depend de Imposition-00-Core.js et Imposition-00b-Licence.js (reutilise
|
||||
// CDImp.Licence._lireFluxReponse pour lire les reponses Net.HTTP).
|
||||
//
|
||||
// AVERTISSEMENTS TECHNIQUES - a tester dans Acrobat Pro reel :
|
||||
// - Le parametre cFile de Net.HTTP.request() (telechargement direct vers
|
||||
// un fichier disque) est suppose exister par analogie avec d'autres
|
||||
// usages documentes du Network Object, mais n'a pas pu etre verifie ici.
|
||||
// Si indisponible, ecrire le fichier autrement (ex: lire le flux comme
|
||||
// pour la licence, puis l'ecrire avec un mecanisme de fichier - a
|
||||
// determiner selon les API reellement exposees par votre version
|
||||
// d'Acrobat).
|
||||
// - L'enumeration des dossiers Acrobat installes evite volontairement
|
||||
// l'objet `Enumerator` (specifique a JScript/WSH, probablement absent du
|
||||
// moteur JS d'Acrobat) : on teste une liste de noms de version connus
|
||||
// via FolderExists() plutot que d'enumerer dynamiquement le contenu du
|
||||
// dossier %APPDATA%\Adobe\Acrobat. Completer CONFIG.versionsConnues si
|
||||
// une version recente n'y figure pas.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
if (typeof CDImp === "undefined") {
|
||||
throw new Error("Imposition-08-MiseAJour.js : CDImp.Core doit etre charge avant ce fichier.");
|
||||
}
|
||||
|
||||
CDImp.MiseAJour = CDImp.MiseAJour || {};
|
||||
|
||||
CDImp.MiseAJour.CONFIG = {
|
||||
urlBaseRaw: "https://git.copydev.fr/jules/copydev-imposing-tool/raw/branch/master/acrobat-plugin/",
|
||||
fichierVersion: "version.txt",
|
||||
dossierSrc: "src/",
|
||||
fichiers: [
|
||||
"Imposition-00-Core.js",
|
||||
"Imposition-00b-Licence.js",
|
||||
"Imposition-01-UI.js",
|
||||
"Imposition-02-Livret.js",
|
||||
"Imposition-03-NUp.js",
|
||||
"Imposition-04-Decoupe.js",
|
||||
"Imposition-05-Marges.js",
|
||||
"Imposition-06-Reperes.js",
|
||||
"Imposition-07-Auto.js",
|
||||
"Imposition-08-MiseAJour.js"
|
||||
],
|
||||
versionsConnues: ["DC", "2024", "2023", "2022", "2021", "2020", "11.0"]
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Comparaison de versions "x.y.z"
|
||||
// -----------------------------------------------------------------------
|
||||
/**
|
||||
* @returns {Number} 1 si b > a, -1 si b < a, 0 si egales
|
||||
*/
|
||||
CDImp.MiseAJour._comparerVersions = function (a, b) {
|
||||
var pa = String(a).split(".").map(Number);
|
||||
var pb = String(b).split(".").map(Number);
|
||||
var n = Math.max(pa.length, pb.length);
|
||||
for (var i = 0; i < n; i++) {
|
||||
var va = pa[i] || 0;
|
||||
var vb = pb[i] || 0;
|
||||
if (vb > va) { return 1; }
|
||||
if (vb < va) { return -1; }
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Detection des dossiers JavaScripts d'Acrobat installes
|
||||
// -----------------------------------------------------------------------
|
||||
CDImp.MiseAJour._trouverDossiersJavaScripts = function () {
|
||||
var dossiers = [];
|
||||
try {
|
||||
var shell = new ActiveXObject("WScript.Shell");
|
||||
var fso = new ActiveXObject("Scripting.FileSystemObject");
|
||||
var racine = shell.ExpandEnvironmentStrings("%APPDATA%") + "\\Adobe\\Acrobat";
|
||||
|
||||
for (var i = 0; i < CDImp.MiseAJour.CONFIG.versionsConnues.length; i++) {
|
||||
var dossierVersion = racine + "\\" + CDImp.MiseAJour.CONFIG.versionsConnues[i];
|
||||
if (fso.FolderExists(dossierVersion)) {
|
||||
var dossierJS = dossierVersion + "\\JavaScripts";
|
||||
if (!fso.FolderExists(dossierJS)) {
|
||||
fso.CreateFolder(dossierJS);
|
||||
}
|
||||
dossiers.push(dossierJS);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
// ActiveXObject indisponible : on ne peut pas detecter les dossiers
|
||||
// automatiquement (cas hors Windows, ou scripts non-privilegies).
|
||||
}
|
||||
return dossiers;
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Requete HTTP GET -> texte (reutilise la lecture de flux de Licence.js)
|
||||
// -----------------------------------------------------------------------
|
||||
CDImp.MiseAJour._telechargerTexte = function (url) {
|
||||
var resultat = { erreur: null, texte: null };
|
||||
try {
|
||||
Net.HTTP.request({
|
||||
cVerb: "GET",
|
||||
cURL: url,
|
||||
oHandler: {
|
||||
response: function (msgStream, status) {
|
||||
if (status && status >= 400) {
|
||||
resultat.erreur = "HTTP " + status;
|
||||
} else {
|
||||
resultat.texte = CDImp.Licence._lireFluxReponse(msgStream);
|
||||
}
|
||||
},
|
||||
error: function (msg, err) {
|
||||
resultat.erreur = (err || msg || "Erreur reseau inconnue").toString();
|
||||
}
|
||||
},
|
||||
bAsync: false
|
||||
});
|
||||
} catch (e) {
|
||||
resultat.erreur = e.toString();
|
||||
}
|
||||
return resultat;
|
||||
};
|
||||
|
||||
/**
|
||||
* Telecharge url directement vers le fichier cheminDest (ecrase si present).
|
||||
*/
|
||||
CDImp.MiseAJour._telechargerVersFichier = function (url, cheminDest) {
|
||||
var resultat = { erreur: null };
|
||||
try {
|
||||
Net.HTTP.request({
|
||||
cVerb: "GET",
|
||||
cURL: url,
|
||||
cFile: cheminDest,
|
||||
oHandler: {
|
||||
response: function (msgStream, status) {
|
||||
if (status && status >= 400) {
|
||||
resultat.erreur = "HTTP " + status;
|
||||
}
|
||||
},
|
||||
error: function (msg, err) {
|
||||
resultat.erreur = (err || msg || "Erreur reseau inconnue").toString();
|
||||
}
|
||||
},
|
||||
bAsync: false
|
||||
});
|
||||
} catch (e) {
|
||||
resultat.erreur = e.toString();
|
||||
}
|
||||
return resultat;
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Point d'entree : verifie puis propose d'installer la mise a jour
|
||||
// -----------------------------------------------------------------------
|
||||
CDImp.MiseAJour.verifier = function () {
|
||||
var reponse = CDImp.MiseAJour._telechargerTexte(
|
||||
CDImp.MiseAJour.CONFIG.urlBaseRaw + CDImp.MiseAJour.CONFIG.fichierVersion);
|
||||
|
||||
if (reponse.erreur || !reponse.texte) {
|
||||
CDImp.Util.erreur("Impossible de verifier les mises a jour (reseau indisponible ou serveur inaccessible) :\n" + (reponse.erreur || ""));
|
||||
return;
|
||||
}
|
||||
|
||||
var versionDistante = reponse.texte.replace(/[\r\n\s]+/g, "");
|
||||
var comparaison = CDImp.MiseAJour._comparerVersions(CDImp.VERSION, versionDistante);
|
||||
|
||||
if (comparaison <= 0) {
|
||||
CDImp.Util.info("Vous avez deja la derniere version (v" + CDImp.VERSION + ").");
|
||||
return;
|
||||
}
|
||||
|
||||
var confirmer = app.alert({
|
||||
cMsg: "Une mise a jour est disponible : v" + versionDistante + " (vous avez v" + CDImp.VERSION + ").\nInstaller maintenant ?",
|
||||
cTitle: "Mise a jour disponible",
|
||||
nIcon: 2, // question
|
||||
nType: 2 // Oui/Non
|
||||
});
|
||||
if (confirmer !== 4) { // 4 = "Oui" pour nType 2 dans Acrobat JS
|
||||
return;
|
||||
}
|
||||
|
||||
var dossiers = CDImp.MiseAJour._trouverDossiersJavaScripts();
|
||||
if (dossiers.length === 0) {
|
||||
CDImp.Util.erreur("Aucun dossier JavaScripts d'Acrobat detecte automatiquement.\nMise a jour annulee : utilisez l'installeur externe si besoin.");
|
||||
return;
|
||||
}
|
||||
|
||||
var erreurs = [];
|
||||
CDImp.Util.avecPrivileges(function () {
|
||||
for (var d = 0; d < dossiers.length; d++) {
|
||||
for (var f = 0; f < CDImp.MiseAJour.CONFIG.fichiers.length; f++) {
|
||||
var nomFichier = CDImp.MiseAJour.CONFIG.fichiers[f];
|
||||
var url = CDImp.MiseAJour.CONFIG.urlBaseRaw + CDImp.MiseAJour.CONFIG.dossierSrc + nomFichier;
|
||||
var cheminDest = dossiers[d] + "\\" + nomFichier;
|
||||
var resultatTelechargement = CDImp.MiseAJour._telechargerVersFichier(url, cheminDest);
|
||||
if (resultatTelechargement.erreur) {
|
||||
erreurs.push(nomFichier + " (" + dossiers[d] + ") : " + resultatTelechargement.erreur);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (erreurs.length > 0) {
|
||||
CDImp.Util.erreur("Mise a jour partielle, erreurs sur " + erreurs.length + " fichier(s) :\n" + erreurs.join("\n"));
|
||||
} else {
|
||||
CDImp.Util.info("Mise a jour vers v" + versionDistante + " installee avec succes.\nRedemarrez Acrobat Pro pour l'appliquer.");
|
||||
}
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Entree de menu "Verifier les mises a jour..."
|
||||
// -----------------------------------------------------------------------
|
||||
CDImp.Util.avecPrivileges(function () {
|
||||
try {
|
||||
app.addMenuItem({
|
||||
cName: "CDImpVerifierMAJ",
|
||||
cParent: "ImpositionPro",
|
||||
cExec: "CDImp.MiseAJour.verifier();",
|
||||
nPos: 2
|
||||
});
|
||||
} catch (e) {
|
||||
// Item deja present (rechargement de script) : ignore.
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user