Import initial du projet shipheart_cm5

This commit is contained in:
2026-08-13 09:19:38 +02:00
commit 53e47729fb
533 changed files with 127946 additions and 0 deletions
+773
View File
@@ -0,0 +1,773 @@
//========================================================================================================================================================================
// 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("<b>Mise à jour immédiate</b><br /><br />Si vous confirmez, cette mise à jour peut nécessiter <u>quelques minutes</u> pendant lesquelles <b>votre système ShipHeart ne sera pas accessible</b>.<br /><br />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 !<br /><br />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.<br />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("<b>Suppression de version</b><br /><br />Si vous confirmez, cette mise à jour sera définitivement supprimée.<br />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("<b>Réinitialisation Usine</b><br /><br />Si vous confirmez, tous les paramètres de ShipHeart seront complètement et définitivement effacés !<br /><br />Aucune sauvegarde ne sera conservée et tout retour en arrière sera impossible... <br /><br />Cliquez sur Annuler pour revenir en arrière si vous n'êtes pas certain de votre décision.<br /><br />Note : En cas de doute, vous pouvez effectuer une Sauvegarde et <u>la stocker sur une clé externe</u> 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 <b>%1</b> est disponible.<br /><br />Souhaitez-vous : ").arg(version_nouvelle);
break;
//-----------------------------
// Fichier dans A_CHARGER :
case shipheart_demande_maj_soft_chargement:
message = qsTr("La version <b>%1</b> est disponible.<br /><br />Elle sera automatiquement installée lors du prochain démarrage de ShipHeart.<br />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.
}
}