Carpincho/src/gui/controlador/admin_update.js
2024-12-10 10:03:23 -03:00

173 lines
6.4 KiB
JavaScript

/**
* Archivo que brinda funciones para la actualización de EmaLibre
* Solamente para la plataforma Windows.
*
* LICENSE: This file is part of EMA Libre.
* EMA Libre is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EMA Libre is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EMA Libre. If not, see <http://www.gnu.org/licenses/>.
*
* @copyright Copyright (c) 2019 GUGLER (http://www.gugler.com.ar)
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL License
* @version 3.0
* @link http://www.gugler.com.ar
* @since File available since Release 3.0
*/
// **********************Dependencias **************************************************
var gui = require('nw.gui'); // Libreria Grafica
var fs = require('fs');
var path = require('path');
// **********************Vairales Generales********************************************
var icono_apagado = './gui_common/iconos/icono_off.png'; // Imagen del Icono Apagado
var tray = null;
var Minimizado = false; // Variables Generales
// **********************COMIENZO *****************************************************
var win = gui.Window.get(); // Se genera la ventana
var cantidadArchivosTotal = 0;
var cantidadDirecotirosTotal = -1;
var cantidadDirecotirosTotalActualizados = -1;
var cantidadArchivosActualizados = 0;
var despliegeOrigen = './';
var despliegeDestino = '../';
// **********************Iconizado ****************************************************
tray = new gui.Tray({ icon: icono_apagado });
tray.tooltip = 'Ema Libre Carpincho';
function ActualizarAPP () {
document.getElementById('barra').style.width = '0%';
DespliegeRecursivo(despliegeOrigen, despliegeDestino);
$('#botonactualizar').attr('disabled', true);
$('#botonactualizar').addClass('disabled');
$('#botonreiniciar').attr('disabled', false);
$('#botonreiniciar').removeClass('disabled');
}
function ReiniciarAPP () {
const {
spawn
} = require('child_process');
const child = spawn('../EmaLibre.exe', [], {
detached: true,
stdio: 'ignore'
});
child.unref();
gui.App.closeAllWindows();
gui.App.quit();
win.close();
process.exit(1);
}
function DespliegeRecursivo (src, dest) {
var excluir = true;
var existssrc = fs.existsSync(src);
var statssrc = existssrc && fs.statSync(src);
var isDirectorysrc = existssrc && statssrc.isDirectory();
if (src === 'tmp') {
excluir = false;
}
sleep(500).then(() => {
if (existssrc && isDirectorysrc && excluir) {
cantidadDirecotirosTotalActualizados++;
fs.readdirSync(src).forEach(function (childItemName) {
var Destino = path.join(dest, childItemName);
var Origen = path.join(src, childItemName);
// Se comprueba si el orgien es directorio
var existssrc = fs.existsSync(Origen);
var statssrc = existssrc && fs.statSync(Origen);
var isDirectoryOrigen = existssrc && statssrc.isDirectory();
// Se comprueba si el destino existe y es un directorio
var existsdesc = fs.existsSync(Destino);
var statsdesc = existsdesc && fs.statSync(Destino);
var isDirectorydesc = existsdesc && statsdesc.isDirectory();
if (existsdesc && isDirectorydesc) {
$('#nombreArchivo').html(cantidadArchivosActualizados);
DespliegeRecursivo(Origen, Destino);
} else {
try {
if (!isDirectoryOrigen && !isDirectorydesc) {
cantidadArchivosActualizados++;
$('#nombreArchivo').html(cantidadArchivosActualizados);
copyFile(Origen, Destino);
document.getElementById('barra').style.width = ((cantidadArchivosActualizados * 100) / cantidadArchivosTotal).toFixed() + '%';
document.getElementById('barra').innerHTML = ((cantidadArchivosActualizados * 100) / cantidadArchivosTotal).toFixed() + '% / ' + 100;
} else {
fs.mkdirSync(Destino);
} // Crea directorio que no existe
} catch (e) {
alert(e);
}
DespliegeRecursivo(Origen, Destino);
}
});
} else { // Listo
$('#nombreArchivo').html(cantidadArchivosActualizados + ' (' + cantidadDirecotirosTotalActualizados + ' Directorios )');
if ((cantidadArchivosActualizados) >= cantidadArchivosTotal - 5) {
$('#botonreiniciar').removeClass('hidden');
$('#botonactualizar').addClass('hidden');
$('#texto').html('Actualización realizada con exito!!');
}
}
});
}
function copyFile (source, target) {
return new Promise(function (resolve, reject) {
var rd = fs.createReadStream(source);
rd.on('error', rejectCleanup);
var wr = fs.createWriteStream(target);
wr.on('error', rejectCleanup);
function rejectCleanup (err) {
rd.destroy();
wr.end();
reject(err);
}
wr.on('finish', resolve);
rd.pipe(wr);
});
}
function ContarArchivos (src, dest) {
var excluir = true;
var existssrc = fs.existsSync(src);
var statssrc = existssrc && fs.statSync(src);
var isDirectorysrc = existssrc && statssrc.isDirectory();
if (src === 'tmp') {
excluir = false;
}
if (existssrc && isDirectorysrc && excluir) {
cantidadDirecotirosTotal++;
fs.readdirSync(src).forEach(function (childItemName) {
var Origen = path.join(src, childItemName);
var existssrc = fs.existsSync(Origen);
var statssrc = existssrc && fs.statSync(Origen);
var isDirectoryOrigen = existssrc && statssrc.isDirectory();
if (isDirectoryOrigen) {
ContarArchivos(Origen, '../');
} else {
cantidadArchivosTotal++;
ContarArchivos(Origen, '../');
}
});
}
$('#nombreArchivoT').html(cantidadArchivosTotal + ' (' + cantidadDirecotirosTotal + ' Directorios)');
}
function sleep (time) { return new Promise((resolve) => setTimeout(resolve, time)); }