/** * 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 . * * @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)); }