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>
|