NWJS-AUTO-UPLOADER/package.nw/index.html
a2101c8e
 <!DOCTYPE html>
 
   <html lang="en">
 
   <head>
     <meta charset="UTF-8">
     <title>Auto Upload SpotRep - K9RCP</title>
 <style>
 html { 
   background: url('images/bg.jpg') no-repeat center center fixed; 
   -webkit-background-size: cover;
   -moz-background-size: cover;
   -o-background-size: cover;
   background-size: cover;
 }
 
 #status-bar {
     position: absolute;
     margin: 0 0 0 0;
     left: 0px;
     bottom: 0px;
     z-index: 1;
     padding: 0px;
     width: 100%;
 	background-color: white;
 }
 #main{
   -moz-border-radius:10px;
   -webkit-border-radius:10px;
   border-radius:10px;
   background: #fff; /* fallback for browsers that don't understand rgba */
   border: solid 10px #000; /* fallback for browsers that don't understand rgba */
   background-color: rgba(255,255,255,0.8); /* slighly transparent white */
   border-color: rgba(0,0,0,0.2); /*Very transparent black*/
 }
 </style>
   </head>
 
   <body>
  
     <div id="main"><center>
 <table style="width:100%">
   <tr>
     <td>Callsign: <input type="text" id="callsign" onkeyup="updateCall()" name="name" required
        minlength="3" maxlength="8" size="10" /><span id="file-status"></span></td>
     <td><center><div id="status"></div></center></td>
   </tr>
   
 </table>
 <button onclick="gui.Shell.openExternal('http://k9rcp-server.local.mesh/spotrep/');">View Data</button>
 	</center>
 	</div>
 	<div id="status-bar"> Status: </div>
 	<script src="./md5.js"></script>
     <script>
 	      var gui = require('nw.gui');
         var win = gui.Window.get();
         win.on('new-win-policy', function (frame, url, policy) {
             policy.forceNewPopup();
         });
 	function mf(formato) {
     var hor, hor2, x;
     var fechai = new Date();
     var ano = fechai.getYear() + 1900;
     var ano2 = ("" + (fechai.getYear() + 1900)).slice(-2);
     var mes = ("0" + (fechai.getMonth() + 1)).slice(-2);
     var dia = ("0" + fechai.getDate()).slice(-2);
     hor = hor2 = ("0" + fechai.getHours()).slice(-2);
     hor2 = fechai.getHours();
 	if (fechai.getHours() > 12) {
         hor2 = fechai.getHours() - 12;
 	}
 	
 	
     if (fechai.getHours() > 11) {
              x = "PM";
     } else {
         x = "AM";
     }
     var min = ("0" + fechai.getMinutes()).slice(-2);
     var seg = ("0" + fechai.getSeconds()).slice(-2);
     var fecha = formato.reemplaza("YyMDHhISx".split(''), [ano, ano2, mes, dia, hor, hor2, min, seg, x]);
     return fecha;
 }
 String.prototype.reemplaza = function(busca, reemplaza) {
     var b = Array.isArray(busca);
     var r = Array.isArray(reemplaza);
     var ret = this;
     if (b) {
         for (var i in busca) {
             var c = r ? (reemplaza[i] ? reemplaza[i] : "") : reemplaza;
             ret = ret.replace(new RegExp(busca[i], 'g'), c);
         }
     } else {
         var c = r ? reemplaza[0] : reemplaza;
         ret = ret.replace(new RegExp(busca, 'g'), c);
     }
     return ret;
 }
 
 function memorySizeOf(obj) {
     var bytes = 0;
 
     function sizeOf(obj) {
         if(obj !== null && obj !== undefined) {
             switch(typeof obj) {
             case 'number':
                 bytes += 8;
                 break;
             case 'string':
                 bytes += obj.length * 2;
                 break;
             case 'boolean':
                 bytes += 4;
                 break;
             case 'object':
                 var objClass = Object.prototype.toString.call(obj).slice(8, -1);
                 if(objClass === 'Object' || objClass === 'Array') {
                     for(var key in obj) {
                         if(!obj.hasOwnProperty(key)) continue;
                         sizeOf(obj[key]);
                     }
                 } else bytes += obj.toString().length * 2;
                 break;
             }
         }
         return bytes;
     };
 
     function formatByteSize(bytes) {
         if(bytes < 1024) return bytes + " bytes";
         else if(bytes < 1048576) return(bytes / 1024).toFixed(3) + " KiB";
         else if(bytes < 1073741824) return(bytes / 1048576).toFixed(3) + " MiB";
         else return(bytes / 1073741824).toFixed(3) + " GiB";
     };
 
     return formatByteSize(sizeOf(obj));
 };
 
 var updateXml, lastMd,callSign;
 
 function updateCall() {
 	callSign = document.getElementById("callsign").value.toUpperCase();
 	document.getElementById("callsign").value = document.getElementById("callsign").value.toUpperCase();
 	console.error(document.getElementById("callsign").value.toUpperCase());
   if (fs.existsSync('/RMS Express/'+callSign+'/FormData/SPOTREP-2.txt')) {
     		document.getElementById("file-status").innerHTML = ' <img src="./images/good.png" width="24px" />';
 		  		clearInterval(updateXml);
 		runapipull();
 		lastMd = 0;
 
 }
 if (!fs.existsSync('/RMS Express/'+callSign+'/FormData/SPOTREP-2.txt')) {
 document.getElementById("file-status").innerHTML = ' <img src="./images/bad.png" width="24px" />';
 document.getElementById("status-bar").innerHTML = 'Error: File does not exist: C:\\RMS Express\\'+callSign+'\\FormData\\SPOTREP-2.txt';
 		document.getElementById("status").innerHTML = '<h2>Upload Status</h2><img src="./images/bad.png" width="64px" />';
   console.error(err);
   		clearInterval(updateXml);
 }
 	
 	
 }
 const fs = require('fs')
 
 function runapipull() {
 
 try {
   if (fs.existsSync('/RMS Express/'+callSign+'/FormData/SPOTREP-2.txt')) {
     //file exists
   }
 } catch(err) {
   console.error(err)
 }
 
 fs.readFile('/RMS Express/'+callSign+'/FormData/SPOTREP-2.txt', 'utf8' , (err, data) => {
   if (err) {
     console.error(err)
     return
   }
 if (md5(data) != lastMd) {
   var formData = new FormData();
   formData.append('spotrep', data);
   formData.append('callsign', callSign);
 
 
     // Set up the request
     var xhr = new XMLHttpRequest();
 
     // Open the connection
     xhr.open('POST', 'http://k9rcp-server.local.mesh/spotrep/upload.php', true);
 
     // Set up a handler for when the task for the request is complete
     xhr.onload = function () {
 	document.getElementById("status").innerHTML = '<h2>Upload Status</h2><img src="./images/upload.png" width="64px" />';
       if (xhr.status == 200) {
         console.log('Upload copmlete!');
 		document.getElementById("status-bar").innerHTML = 'Status: Last upload - '+mf("h:Ix")+' - '+memorySizeOf(data)+' - '+md5(data);
 		document.getElementById("status").innerHTML = '<h2>Upload Status</h2><img src="./images/good.png" width="64px" />';
 		lastMd = md5(data);
 		clearInterval(updateXml);
 		updateXml = setInterval( function(){ runapipull(); }, 5000 );
       } else {
         document.getElementById("status-bar").innerHTML = 'Status: Error with Status code: '+xhr.status;
 		document.getElementById("status").innerHTML = '<h2>Upload Status</h2><img src="./images/bad.png" width="64px" />';
 		clearInterval(updateXml);
 		updateXml = setInterval( function(){ runapipull(); }, 5000 );
       }
     };
     // Send the data.
 		document.getElementById("status").innerHTML = '<h2>Upload Status</h2><img src="./images/bad.png" width="64px" />';
         document.getElementById("status-bar").innerHTML = 'Status: Error Can\'t Access k9rcp-server.local.mesh';
         xhr.send(formData);
 
 }})
 }
         document.getElementById("status-bar").innerHTML = 'Please type your RMS Callsign in to Start';
 </script>
   </body>
 
 </html>