From 00eed206cb945647dc215515aa09a3c1b2831d28 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Thu, 22 Oct 2020 18:26:43 -0700 Subject: [PATCH 1/2] Update typo, import from js library --- data/static/basic.js | 51 +++++++++++++++++++++++++++++++++++ data/static/index.html.gz | Bin 75 -> 212 bytes data/static/meshtastic.js.gz | Bin 22464 -> 23599 bytes src/meshwifi/meshhttp.cpp | 2 +- 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 data/static/basic.js diff --git a/data/static/basic.js b/data/static/basic.js new file mode 100644 index 00000000..38fd5078 --- /dev/null +++ b/data/static/basic.js @@ -0,0 +1,51 @@ +var meshtasticClient; +var connectionOne; + + +// run init when DOM is ready +document.addEventListener("DOMContentLoaded", function() { + + // Create new client instance + meshtasticClient = new meshtasticjs.Client; + +}); + + +// Important: the connect action must be called from a user interaction (e.g. button press), otherwise the browsers won't allow the connect +function connect() { + + // Create new connection + connectionOne = meshtasticClient.createBLEConnection(); + + // Add event listeners that get called when a new packet is received / state of device changes + connectionOne.addEventListener('dataPacket', function(packet) { console.log(packet)}); + connectionOne.addEventListener('userPacket', function(packet) { console.log(packet)}); + connectionOne.addEventListener('positionPacket', function(packet) { console.log(packet)}); + connectionOne.addEventListener('connected', function() { console.log('connected!')}); + connectionOne.addEventListener('disconnected', function() { console.log('disconnected!')}); + + // Connect to the device async, then send a text message + connectionOne.connect() + .then(result => { + + // This gets called when the connection has been established + // -> send a message over the mesh network. If no recipient node is provided, it gets sent as a broadcast + return connectionOne.sendText('meshtastic is awesome'); + + }) + .then(result => { + + // This gets called when the message has been sucessfully sent + console.log('Message sent!');}) + + .catch(error => { console.log(error); }); + +} + + + + + + + + diff --git a/data/static/index.html.gz b/data/static/index.html.gz index 56af1fcad025e8b80d20d43703ea9aa3a77684a1..4880f9cab18fbcb2e384ad21f7b10462ad4a11cf 100644 GIT binary patch literal 212 zcmV;_04x6=iwFpVFp^&c18Ht#Wq2-VbZu+^bx<*m0x=Bi_Z2=@cLkT0B1uEd8&K9U zY#^JUwL#+dWQjzBsAe=X){Ja_VkLcC877^xAM6T1Ifytcb#oSk9LmWd`k}cTq8|Y4 z%o>2Eun4Qen;th?d>NWFv$v+>uu4Kpx+=&*4vlEgL}q50G)SZWt)k_7$bZX^K|Z3^ ztaH{`V~vmAHQrQfffOB5Erm%BT|%gZa-z%I`29n_>lC!Y{=Eny-xIMl{jzOpRlTB- O*Pos{G623B89a4B88&- c{1PBPH&vk^F+Ek!Mjxn1@9*_vnhXpK0MRTNy#N3J diff --git a/data/static/meshtastic.js.gz b/data/static/meshtastic.js.gz index 9dc9aacd215ce22f0c20d7186d692db2536530f3..3f02faf026953e9b0acf38ff292acc1d806a2448 100644 GIT binary patch literal 23599 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 GRRI8P3Ti+A literal 22464 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 P!?yo7T>1}Vokalvg;gQw diff --git a/src/meshwifi/meshhttp.cpp b/src/meshwifi/meshhttp.cpp index eb90a8d3..3577c9c0 100644 --- a/src/meshwifi/meshhttp.cpp +++ b/src/meshwifi/meshhttp.cpp @@ -323,7 +323,7 @@ void handleStaticBrowse(HTTPRequest *req, HTTPResponse *res) } res->println("

Upload new file

"); - res->println("

This interface is experemntal!

"); + res->println("

*** This interface is experimental ***

"); res->println("

This form allows you to upload files. Keep your filenames very short and files small. Big filenames and big " "files are a known problem.

"); res->println("
"); From 5981831bc045951fea2decf45675819815694e99 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Thu, 22 Oct 2020 18:43:54 -0700 Subject: [PATCH 2/2] Fixed typo. Updated js library. Update root file handler. Typo fixed. I placed the latest javascript library files into the static folder. Updated the root file handler to be able to serve both compressed and uncompressed files. --- data/static/index.html | 18 ++++++++++++++++++ data/static/index.html.gz | Bin 212 -> 0 bytes src/meshwifi/meshhttp.cpp | 33 ++++++++++++++++++++++++++++++--- 3 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 data/static/index.html delete mode 100644 data/static/index.html.gz diff --git a/data/static/index.html b/data/static/index.html new file mode 100644 index 00000000..66320301 --- /dev/null +++ b/data/static/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/static/index.html.gz b/data/static/index.html.gz deleted file mode 100644 index 4880f9cab18fbcb2e384ad21f7b10462ad4a11cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212 zcmV;_04x6=iwFpVFp^&c18Ht#Wq2-VbZu+^bx<*m0x=Bi_Z2=@cLkT0B1uEd8&K9U zY#^JUwL#+dWQjzBsAe=X){Ja_VkLcC877^xAM6T1Ifytcb#oSk9LmWd`k}cTq8|Y4 z%o>2Eun4Qen;th?d>NWFv$v+>uu4Kpx+=&*4vlEgL}q50G)SZWt)k_7$bZX^K|Z3^ ztaH{`V~vmAHQrQfffOB5Erm%BT|%gZa-z%I`29n_>lC!Y{=Eny-xIMl{jzOpRlTB- O*Posprint("" + String(file.name()).substring(1) + ""); } else { - res->print("" + String(file.name()).substring(1) + ""); + res->print("" + String(file.name()).substring(1) + + ""); } res->println(""); res->println(""); @@ -699,9 +700,35 @@ void handleAPIv1ToRadio(HTTPRequest *req, HTTPResponse *res) void handleRoot(HTTPRequest *req, HTTPResponse *res) { res->setHeader("Content-Type", "text/html"); - res->setHeader("Content-Encoding", "gzip"); - File file = SPIFFS.open("/static/index.html.gz"); + std::string filename = "/static/index.html"; + std::string filenameGzip = "/static/index.html.gz"; + + if (!SPIFFS.exists(filename.c_str()) && !SPIFFS.exists(filenameGzip.c_str())) { + // Send "404 Not Found" as response, as the file doesn't seem to exist + res->setStatusCode(404); + res->setStatusText("Not found"); + res->println("404 Not Found"); + res->printf("

File not found: %s

\n", filename.c_str()); + return; + } + + // Try to open the file from SPIFFS + File file; + + if (SPIFFS.exists(filename.c_str())) { + file = SPIFFS.open(filename.c_str()); + if (!file.available()) { + DEBUG_MSG("File not available - %s\n", filename.c_str()); + } + + } else if (SPIFFS.exists(filenameGzip.c_str())) { + file = SPIFFS.open(filenameGzip.c_str()); + res->setHeader("Content-Encoding", "gzip"); + if (!file.available()) { + DEBUG_MSG("File not available\n"); + } + } // Read the file from SPIFFS and write it to the HTTP response body size_t length = 0;