//======================================================================================================================================================================== // CONFIG_VERSION.QML // Ce fichier traite les informations de versions de ShipHeart // La page est appelée depuis la page parametres_avances.qml, en cliquant sur "Version" //======================================================================================================================================================================== import QtQuick 2.12 import QtQuick.Controls 2.12 import qt.koriolan.shipheart 1.0 Shipheart_page { id: page_config_version // Mis en forme : readonly property double pourcentage_largeur_colonne_gauche: 0.50 readonly property double espace_colonnes_principales: 20 readonly property double pourcentage_hauteur_ligne_haut: 0.7 readonly property double espace_lignes_principales: 20 readonly property double affichage_hauteur_utile: shipheart_hauteur_page - shipheart_hauteur_bandeau_haut - shipheart_hauteur_bandeau_bas readonly property int hauteur_ligne_formulaire: 60 readonly property double pourcentage_largeur_labels_formulaire: 0.4 readonly property double proportion_hauteur_texte_droite: 0.4 readonly property int hauteur_bouton_droit: 80 readonly property int largeur_bouton_droit: 200 readonly property double pourcentage_bandeau_bas_largeur_zone_retour: 0.86 readonly property int periode_init_raffraichissement_parametres: 1 // En ms readonly property int periode_raffraichissement_parametres: 1000 // En ms readonly property int step_timer_appui_long: 30 // en ms // Affichage : property int protection_mode: 0 // Données : property int valeur_timer_appui_long: 0 property string version_actuelle: "" property string date_version_actuelle: "" property string version_nouvelle: "" property int type_version_nouvelle: 0 // 0: aucune, 1= à valider, 2= à charger property int demande_maj_soft_en_cours: shipheart_demande_maj_soft_aucune property bool flag_demande_factory_reset_en_cours: false property bool flag_demande_factory_reset: false // Modèles : // Note : les modèles chargés dans 'main.qml' n'ont pas à être rechargés dans les pages suivantes //=========================================================== // Timer periode raffraichissement parametres : //=========================================================== Timer { id: timer_raffraichissement_parametres interval: periode_init_raffraichissement_parametres triggeredOnStart: false running: true repeat: true onTriggered: { if (interval == periode_init_raffraichissement_parametres) { // Premier passage, 1ms après le premier chargement interval = periode_raffraichissement_parametres; init_page(); } else { // Si on est en cours de Factory Reset et qu'un fichier '.enc' est dispo, c'est que ça doit être le fichier // de Factory Reset généré par sauvegarde.php qui est prêt : if ((flag_demande_factory_reset) && (shipheart_nb_fichiers_a_charger > 0)) // On ne peut pas utiliser (shipheart_fichier_a_charger != "") car on ne prend pas en compte les fichiers de type 'new' (ni 'restore). { busy_indicator.running = false; rebooter(); } mise_a_jour(); } } } //=========================================================== // Timer pour gérer les appuis longs : //=========================================================== Timer { id: timer_appui_long interval: step_timer_appui_long triggeredOnStart: false repeat: true onTriggered: { if (valeur_timer_appui_long < shipheart_mouse_press_and_hold_interval_tres_long) valeur_timer_appui_long+= step_timer_appui_long; else // Le fait de ne pas utilise le OnPressandHold permet d'être sût que la sortie se fait au même moment que la fin du comptage (sinon, on peut avoir de petits décalages) { timer_appui_long.running = false; valeur_timer_appui_long = 0; shipheart_clic(); if (mousearea_installer_now.pressed) { boite_validation_securisee.niveau = 2; boite_validation_securisee.boutonOk = false boite_validation_securisee.boutonAnnuler = true boite_validation_securisee.boutonSecurise = true boite_validation_securisee.boutonSecuriseTexte = qsTr("Confirmer"); boite_validation_securisee.imageTitreSource = "/images/attention.png"; boite_validation_securisee.message = qsTr("Mise à jour immédiate

Si vous confirmez, cette mise à jour peut nécessiter quelques minutes pendant lesquelles votre système ShipHeart ne sera pas accessible.

Vous ne devez confirmer l'installation que si vous êtes en situation sûre (au port, au mouillage, ...) et que la perte de contrôle de vos systèmes de bord pendant ce laps de temps est sans aucun danger !

Cliquez sur Annuler pour revenir en arrière et effectuer cette installation ultérieurement.") boite_validation_securisee.alignementMessage = Text.AlignHCenter boite_validation_securisee.affichageAscenseur = true; boite_validation_securisee.open(); } else if (mousearea_installer_next_start.pressed) { boite_validation_securisee.niveau = 1; boite_validation_securisee.boutonOk = false boite_validation_securisee.boutonAnnuler = true boite_validation_securisee.boutonSecurise = true boite_validation_securisee.boutonSecuriseTexte = qsTr("Confirmer"); boite_validation_securisee.imageTitreSource = "/images/attention.png"; boite_validation_securisee.message = qsTr("Si vous confirmez, cette mise à jour sera marquée pour être chargée au prochain démarrage de ShipHeart.
Cliquez sur Annuler pour revenir en arrière et la conserver.") boite_validation_securisee.alignementMessage = Text.AlignHCenter boite_validation_securisee.affichageAscenseur = true; boite_validation_securisee.open(); } else if (mousearea_installer_never.pressed) { boite_validation_securisee.niveau = 1; boite_validation_securisee.boutonOk = false boite_validation_securisee.boutonAnnuler = true boite_validation_securisee.boutonSecurise = true boite_validation_securisee.boutonSecuriseTexte = qsTr("Confirmer"); boite_validation_securisee.imageTitreSource = "/images/attention.png"; boite_validation_securisee.message = qsTr("Suppression de version

Si vous confirmez, cette mise à jour sera définitivement supprimée.
Cliquez sur Annuler pour revenir en arrière et la conserver.") boite_validation_securisee.alignementMessage = Text.AlignHCenter boite_validation_securisee.affichageAscenseur = true; boite_validation_securisee.open(); } else if (mousearea_factory_reset.pressed) { flag_demande_factory_reset_en_cours = true; boite_validation_securisee.niveau = 2; boite_validation_securisee.boutonOk = false boite_validation_securisee.boutonAnnuler = true boite_validation_securisee.boutonSecurise = true boite_validation_securisee.boutonSecuriseTexte = qsTr("Réinitialiser"); boite_validation_securisee.imageTitreSource = "/images/attention.png"; boite_validation_securisee.message = qsTr("Réinitialisation Usine

Si vous confirmez, tous les paramètres de ShipHeart seront complètement et définitivement effacés !

Aucune sauvegarde ne sera conservée et tout retour en arrière sera impossible...

Cliquez sur Annuler pour revenir en arrière si vous n'êtes pas certain de votre décision.

Note : En cas de doute, vous pouvez effectuer une Sauvegarde et la stocker sur une clé externe avant d'effectuer cette réinitialisation usine.") boite_validation_securisee.alignementMessage = Text.AlignHCenter boite_validation_securisee.affichageAscenseur = true; boite_validation_securisee.open(); } } } } // Titre de la page : Shipheart_titre_1 {titre:qsTr("Version"); hauteur: shipheart_hauteur_bandeau_haut} //------------------------------------------------------- // Ecran Haut - Gauche : //------------------------------------------------------- Rectangle { id: zone_affichage_haut_gauche x: 0 y: shipheart_hauteur_bandeau_haut; width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2) height: (affichage_hauteur_utile * pourcentage_hauteur_ligne_haut) - (espace_lignes_principales / 2); color: "transparent" //------------------------------------------------------------------- // Grille pour afficher les paramètres : GridView { id: grille_informations width: parent.width height: parent.height cellWidth: parent.width; cellHeight: hauteur_ligne_formulaire snapMode: GridView.SnapToRow // L'arret de l'affichage se fera sur une rangée entière clip: true // Nécessaire pour que les Delegates s'arretent à l'intérieur de la GridView model: modele_grille_informations delegate: Rectangle { width: grille_informations.cellWidth - 10 height: grille_informations.cellHeight - 5 color: "transparent" Rectangle { // c'est le bouton proprement dit... height: parent.height width:parent.width color: "transparent" radius: shipheart_rayon_bouton anchors.bottom: parent.bottom Text { anchors.fill: parent horizontalAlignment: Qt.AlignLeft verticalAlignment: Qt.AlignVCenter leftPadding: 20 text: model.nom_champ + " : " + model.valeur_champ color: couleur_blanc_casse font.pixelSize: 18 font.bold: false wrapMode: Label.Wrap } } } ListModel { id: modele_grille_informations } } } //------------------------------------------------------- // Ecran Droite : //------------------------------------------------------- Rectangle { id: zone_affichage_droite x: zone_affichage_haut_gauche.width + espace_colonnes_principales y: shipheart_hauteur_bandeau_haut; width: (shipheart_largeur_page * (1 - pourcentage_largeur_colonne_gauche)) - (espace_colonnes_principales / 2) height: (affichage_hauteur_utile * pourcentage_hauteur_ligne_haut) - (espace_lignes_principales / 2); color: "transparent" border.color: couleur_blanc_casse_transparent border.width: 2 visible: (type_version_nouvelle > 0) Column { anchors.fill: parent spacing: 20 //========================================================================= // Texte d'introduction //========================================================================= Text { // height: parent.height * proportion_hauteur_texte_droite width: parent.width; anchors.horizontalCenter: parent.horizontalCenter horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter topPadding: 20 // Cette valeur permet d'être aligné avec la version courante... bottomPadding: 50 font.pixelSize: 18 text: { let message; switch (type_version_nouvelle) { //----------------------------- // Fichier dans A_VALIDER : case shipheart_demande_maj_soft_validation: message = qsTr("La version %1 est disponible.

Souhaitez-vous : ").arg(version_nouvelle); break; //----------------------------- // Fichier dans A_CHARGER : case shipheart_demande_maj_soft_chargement: message = qsTr("La version %1 est disponible.

Elle sera automatiquement installée lors du prochain démarrage de ShipHeart.
A moins que vous ne choisissiez l'une des options ci-dessous :").arg(version_nouvelle) break; //----------------------------- // Aucun fichier ni dans A_CHARGER, ni dans A_VALIDER : case shipheart_demande_maj_soft_aucune: default: message = ""; } return message; } color: couleur_blanc_casse wrapMode: Text.Wrap } //========================================================================= // Boutons : //========================================================================= Row { height: hauteur_bouton_droit anchors.horizontalCenter: parent.horizontalCenter spacing: 20 //--------------------------------------------------------------- Rectangle { id: bouton_installer_now height: hauteur_bouton_droit width:largeur_bouton_droit color: shipheart_couleur_fond_bouton radius: shipheart_rayon_bouton visible: (type_version_nouvelle > 0) Rectangle { // Barre grandissante pour montrer durée d'appui vs tempo nécessaire : width: (valeur_timer_appui_long / shipheart_mouse_press_and_hold_interval_tres_long) * parent.width height: parent.height color: couleur_rouge_transparent radius: shipheart_rayon_bouton visible: mousearea_installer_now.pressed } Text { anchors.fill: parent horizontalAlignment: Qt.AlignHCenter verticalAlignment: Qt.AlignVCenter text: qsTr("L'installer\nmaintenant") color: couleur_blanc_casse font.pixelSize: 16 wrapMode: Label.Wrap padding: 10 } MouseArea { id: mousearea_installer_now anchors.fill: parent onPressed: { // Déclenché lors de l'appui inital timer_appui_long.running = true; valeur_timer_appui_long = 0; demande_maj_soft_en_cours = shipheart_demande_maj_soft_chargement; } onClicked: { // Déclenché si l'appui n'a pas été suffisement long pour avoir un Press&Hold : timer_appui_long.running = false; valeur_timer_appui_long = 0; } onExited: { // Déclenché si le doigt sort de la zone du bouton (sinon, on continue à compter alors qu'on est sorti de la zone et même relaché le doigt !!) timer_appui_long.running = false; valeur_timer_appui_long = 0; } } } //--------------------------------------------------------------- Rectangle { id: bouton_installer_next_start height: hauteur_bouton_droit width:largeur_bouton_droit color: shipheart_couleur_fond_bouton radius: shipheart_rayon_bouton visible: (type_version_nouvelle === 1) Rectangle { // Barre grandissante pour montrer durée d'appui vs tempo nécessaire : width: (valeur_timer_appui_long / shipheart_mouse_press_and_hold_interval_tres_long) * parent.width height: parent.height color: couleur_rouge_transparent radius: shipheart_rayon_bouton visible: mousearea_installer_next_start.pressed } Text { anchors.fill: parent horizontalAlignment: Qt.AlignHCenter verticalAlignment: Qt.AlignVCenter text: qsTr("L'installer au prochain démarrage de ShipHeart") color: couleur_blanc_casse font.pixelSize: 16 wrapMode: Label.Wrap padding: 10 } MouseArea { id: mousearea_installer_next_start anchors.fill: parent onPressed: { // Déclenché lors de l'appui inital timer_appui_long.running = true; valeur_timer_appui_long = 0; demande_maj_soft_en_cours = shipheart_demande_maj_soft_validation; } onClicked: { // Déclenché si l'appui n'a pas été suffisement long pour avoir un Press&Hold : timer_appui_long.running = false; valeur_timer_appui_long = 0; } onExited: { // Déclenché si le doigt sort de la zone du bouton (sinon, on continue à compter alors qu'on est sorti de la zone et même relaché le doigt !!) timer_appui_long.running = false; valeur_timer_appui_long = 0; } } } //--------------------------------------------------------------- Rectangle { id: bouton_installer_never height: hauteur_bouton_droit width:largeur_bouton_droit color: shipheart_couleur_fond_bouton radius: shipheart_rayon_bouton visible: (type_version_nouvelle > 0) Rectangle { // Barre grandissante pour montrer durée d'appui vs tempo nécessaire : width: (valeur_timer_appui_long / shipheart_mouse_press_and_hold_interval_tres_long) * parent.width height: parent.height color: couleur_rouge_transparent radius: shipheart_rayon_bouton visible: mousearea_installer_never.pressed } Text { anchors.fill: parent horizontalAlignment: Qt.AlignHCenter verticalAlignment: Qt.AlignVCenter text: qsTr("Ne jamais l'installer") color: couleur_blanc_casse font.pixelSize: 16 wrapMode: Label.Wrap padding: 10 } MouseArea { id: mousearea_installer_never anchors.fill: parent onPressed: { // Déclenché lors de l'appui inital timer_appui_long.running = true; valeur_timer_appui_long = 0; demande_maj_soft_en_cours = shipheart_demande_maj_soft_annulation; } onClicked: { // Déclenché si l'appui n'a pas été suffisement long pour avoir un Press&Hold : timer_appui_long.running = false; valeur_timer_appui_long = 0; } onExited: { // Déclenché si le doigt sort de la zone du bouton (sinon, on continue à compter alors qu'on est sorti de la zone et même relaché le doigt !!) timer_appui_long.running = false; valeur_timer_appui_long = 0; } } } } } } //------------------------------------------------------- // Ecran Bas : //------------------------------------------------------- Rectangle { id: zone_affichage_bas x: 0 y: shipheart_hauteur_bandeau_haut + zone_affichage_haut_gauche.height + espace_lignes_principales; width: shipheart_largeur_page height: (affichage_hauteur_utile * (1 - pourcentage_hauteur_ligne_haut)) - espace_lignes_principales; color: "transparent" Text { width: parent.width; anchors.horizontalCenter: parent.horizontalCenter horizontalAlignment: Text.AlignJustify padding: 20 // Cette valeur permet d'être aligné avec la version courante... font.pixelSize: 16 text: qsTr("Le présent produit est conçu et fabriqué par la société Koriolan qui dispose de toutes les licences et droits d'exploitation sur les images, \ logiciels et brevets utilisés tant pour sa conception que pour son fonctionnement. \ ShipHeart™, Ship2net™ et Koriolan™ sont des marques déposées par la société Koriolan. \ Pour toute question relative à ce produit, merci de vous rendre sur le site 'koriolan.tech' ou de nous contacter à l'adresse 'contact@koriolan.tech'."); color: couleur_blanc_casse wrapMode: Text.Wrap } } //------------------------------------------------------- // Bandeau bas : //------------------------------------------------------- Row { x: 0 y: shipheart_hauteur_page - shipheart_hauteur_bandeau_bas; width: shipheart_largeur_page; height: shipheart_hauteur_bandeau_bas; spacing: 5 padding: 5 //................................................. // Bouton retour //................................................. Rectangle { id: bandeau_bas_zone_retour width: (bandeau_bas_zone_bouton_factory_reset.visible) ? (parent.width * pourcentage_bandeau_bas_largeur_zone_retour - (parent.spacing / 2)) : (parent.width - (2 * parent.padding)) height: shipheart_hauteur_bandeau_bas - parent.topPadding - parent.bottomPadding; radius: shipheart_rayon_bouton color: shipheart_couleur_fond_bouton Image { source: "/images/icone_retour.png" sourceSize.height: 30 anchors { verticalCenter: parent.verticalCenter horizontalCenter: parent.horizontalCenter } } MouseArea { id: mouse_area_bandeau_bas_zone_retour anchors.fill: parent onClicked: { shipheart_clic(); shipheart_compteur_time_out_niveau_acces = shipheart_time_out_niveau_acces; // Rechargement au moment de la sortie (SDIR #187) shipheart_flag_blocage_compteurs_pendant_config = false; // Déblocage du comptage (SDIR #187) stackView.pop(stackView.get(shipheart_niveau_home)); // Retour direct à la Home Page quand on quitte les Paramètres Avancés... } } } //................................................. // Bouton Factory Reset : //................................................. Rectangle { id: bandeau_bas_zone_bouton_factory_reset width: (parent.width * (1 - pourcentage_bandeau_bas_largeur_zone_retour)) - (parent.spacing / 2) height: shipheart_hauteur_bandeau_bas - parent.topPadding - parent.bottomPadding; radius: shipheart_rayon_bouton color: shipheart_couleur_fond_bouton visible: (shipheart_type_installation === shipheart_type_installation_shipbase) Rectangle { // Barre grandissante pour montrer durée d'appui vs tempo nécessaire : width: (valeur_timer_appui_long / shipheart_mouse_press_and_hold_interval_tres_long) * parent.width height: parent.height color: couleur_rouge_transparent radius: shipheart_rayon_bouton visible: mousearea_factory_reset.pressed } Image { source: mousearea_factory_reset.pressed ? "/images/factory_reset_actif.png" : "/images/factory_reset_sombre.png" sourceSize.height: 40 anchors { verticalCenter: parent.verticalCenter horizontalCenter: parent.horizontalCenter } } MouseArea { id: mousearea_factory_reset anchors.fill: parent onPressed: { // Déclenché lors de l'appui inital valeur_timer_appui_long = 0; timer_appui_long.running = true; } onClicked: { // Déclenché si l'appui n'a pas été suffisement long pour avoir un Press&Hold : valeur_timer_appui_long = 0; timer_appui_long.running = false; } onExited: { // Déclenché si le doigt sort de la zone du bouton (sinon, on continue à compter alors qu'on est sorti de la zone et même relaché le doigt !!) valeur_timer_appui_long = 0; timer_appui_long.running = false; } } } } //--------------------------- // Busy Indicator : Shipheart_busy_indicator { id: busy_indicator } //------------------------------------------------------- // Boite d'information : //------------------------------------------------------- Shipheart_boite_dialogue_validation_securisee { id: boite_validation_securisee onClicked: { switch(bouton) { case shipheart_boite_dialogue_bouton_4: // Confirmation sécurisée : if (demande_maj_soft_en_cours !== shipheart_demande_maj_soft_aucune) { demande_maj(demande_maj_soft_en_cours); demande_maj_soft_en_cours = shipheart_demande_maj_soft_aucune; } else if (flag_demande_factory_reset_en_cours) { demande_factory_reset(); } break; case shipheart_boite_dialogue_bouton_2: // Annuler : on revient sur la page pour que l'on puisse enregistrer. demande_maj_soft_en_cours = shipheart_demande_maj_soft_aucune; flag_demande_factory_reset_en_cours = false; break; default: } boite_validation_securisee.close(); } } // Note : il est inutile de prévoir un Mousearea pour sortir de l'économiseur sur cette page puisqu'il // est systématiquement bloqué pour toutes les pages lancées depuis 'Paramètres Avancés'. //============================================================================================================= // Init de la page //============================================================================================================= function init_page() { var req, res; var nb; var i; var nom_champ, valeur_champ; //---------------------------------------------------------------------------- // Mise à jour des informations sur les différentes versions sous-jacentes : modele_grille_informations.clear(); req = 'SELECT Nom, Valeur FROM TB_Systeme ORDER BY Cle_primaire'; //console.log("req =" + req); nb = bdd.requete(req); for (i = 0; i < nb; i ++) { res = bdd.lecture_ligne(); if (!res.isEmpty) { switch(res[0]) { // case "Version_soft_package": nom_champ = qsTr("Version du package logiciel"); valeur_champ = res[1]; break; case "Version_soft_no_package": version_actuelle = res[1]; nom_champ = qsTr("Version du package logiciel"); valeur_champ = res[1]; break; case "Version_soft_application_cm3p": nom_champ = qsTr("Version de l'application"); valeur_champ = res[1]; break; case "Version_soft_application_qt": nom_champ = qsTr("Version de l'interface graphique"); valeur_champ = res[1]; break; case "Version_soft_modem": if (shipheart_generation_shipbase >= shipheart_generation_shipbase_v2) continue; nom_champ = qsTr("Version du firmware du modem"); valeur_champ = res[1].replace("Revision:", ""); break; case "No_imei": if (shipheart_generation_shipbase >= shipheart_generation_shipbase_v2) continue; nom_champ = qsTr("Numéro d'IMEI"); valeur_champ = res[1]; break; case "No_iccid": if (shipheart_generation_shipbase >= shipheart_generation_shipbase_v2) continue; nom_champ = qsTr("Numéro d'ICCID"); valeur_champ = res[1].replace("f", ""); break; case "No_imsi": if (shipheart_generation_shipbase >= shipheart_generation_shipbase_v2) continue; nom_champ = qsTr("Numéro d'IMSI"); valeur_champ = res[1]; break; default: continue; } modele_grille_informations.append({"nom_champ": nom_champ, "valeur_champ": valeur_champ}); } else break; // Ne devrait pas arriver.... } mise_a_jour(); } //============================================================================================================= // Mise à jour de l'état des fichiers disponibles : //============================================================================================================= function mise_a_jour() { var i; var fragments_new_version; version_nouvelle = ""; if (shipheart_fichier_a_charger !== "") // Si un fichier a chargé existe, on ne considère que celui-ci : { let c = shipheart_fichier_a_charger.split('.'); // Extraction de la partie avant le premier '.' fragments_new_version = c[0].split('_'); // Extractions des fragments de version type_version_nouvelle = shipheart_demande_maj_soft_chargement; } else if(shipheart_fichier_a_valider !== "") // ... sinon, on regarde si un fichier à valider existe et on le traite : { let c = shipheart_fichier_a_valider.split('.'); // Extraction de la partie avant le premier '.' fragments_new_version = c[0].split('_'); // Extractions des fragments de version type_version_nouvelle = shipheart_demande_maj_soft_validation; } else type_version_nouvelle = shipheart_demande_maj_soft_aucune; if (type_version_nouvelle > shipheart_demande_maj_soft_aucune) version_nouvelle = fragments_new_version[2] + "." + fragments_new_version[3] + "." + fragments_new_version[4]; else version_nouvelle = ""; //console.log("Version nouvelle = " + version_nouvelle) } //============================================================================================================= // Mise à jour de la valeur de Demande_maj_soft dans TB_Systeme //============================================================================================================= function demande_maj(demande_maj_soft) { var commande; switch (demande_maj_soft) { //----------------------------- // Fichier dans A_VALIDER : // Note : l'utilisation de 'sudo sh -c "commande" ' permet de lancer un shell en sudo qui, ensuite exécute la commande (en sudo donc) // Sans passer par cette astuce, l'appel se fait depuis le shell qui a lancé Qt (non-sudo donc) et le fait d'ajouter 'sudo' DANS la commande // n'est pas prise en compte. La commandes est alors exécutée en non-sudo en, selon, les droits nécessaires, peut échouer. case shipheart_demande_maj_soft_validation: commande = 'sudo sh -c "mv ' + shipheart_repertoire_versions_a_valider + '/' + shipheart_fichier_a_valider + ' ' + shipheart_repertoire_versions_a_charger + '/' + shipheart_fichier_a_valider + '" '; //console.log("Exécution de la commande [ " + commande + " ]"); systeme.commande_shell_non_bloquante(commande); break; //----------------------------- // Fichier dans A_CHARGER : case shipheart_demande_maj_soft_chargement: rebooter(); break; //------------------------------------------------------------ // Demande d'annulation : case shipheart_demande_maj_soft_annulation: // Vidage du répertoire A_VALIDER : commande = 'sudo sh -c "rm -f ' + shipheart_repertoire_versions_a_valider + '/*" '; //console.log("Exécution de la commande [ " + commande + " ]"); systeme.commande_shell(commande, ""); // Vidage du répertoire A_CHARGER : commande = 'sudo sh -c "rm -f ' + shipheart_repertoire_versions_a_charger + '/*" '; //console.log("Exécution de la commande [ " + commande + " ]"); systeme.commande_shell(commande, ""); break; //----------------------------- // Aucun fichier ni dans A_CHARGER, ni dans A_VALIDER : case shipheart_demande_maj_soft_aucune: default: break; } // Dermande de synchro rapide de l'appli : synchro_bdd(shipheart_type_synchro_data); } //============================================================================================================= // Traitement de la demande de Factory Reset : //============================================================================================================= function demande_factory_reset() { var commande; flag_demande_factory_reset_en_cours = false; // Vidage du répertoire A_CHARGER : commande = 'sudo sh -c "rm -f ' + shipheart_repertoire_versions_a_charger + '/*" '; //console.log("Exécution de la commande [ " + commande + " ]"); systeme.commande_shell(commande, ""); // Vidage du répertoire A_VALIDER : // Peut être utile pour le fonctionnement après le Factory Reset. commande = 'sudo sh -c "rm -f ' + shipheart_repertoire_versions_a_valider + '/*" '; //console.log("Exécution de la commande [ " + commande + " ]"); systeme.commande_shell(commande, ""); // Commande d'exécution du script : commande = 'sudo sh -c "php ' + shipheart_repertoire_utils + '/' + shipheart_nom_fichier_sauvegarde + ' Factory_reset" '; //console.log("Exécution de la commande [ " + commande + " ]"); systeme.commande_shell_non_bloquante(commande); // On doit sortir sans attendre la fin de l'exécution pour que le sablier fonctionne. flag_demande_factory_reset = true; // Permet de valider la recherche d'un fichier 'enc' de fin de sauvegarde busy_indicator.running = true; // Lance le sablier. } }