From fa0fa1fcb494483020a736a2bc2c5c639a2bd870 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Mon, 26 May 2025 17:05:36 +0200 Subject: Progress with web version --- web/storage.cpp | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'web/storage.cpp') diff --git a/web/storage.cpp b/web/storage.cpp index 4d0959f..cbf9e9c 100644 --- a/web/storage.cpp +++ b/web/storage.cpp @@ -13,13 +13,12 @@ std::string getprefix() { } EM_ASYNC_JS(int, loadfs, (), { - const dir = '/tables'; const inBrowser = typeof window !== 'undefined'; const inWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope; + console.assert(inBrowser || inWorker, "Non-browsers not supported"); - if (!(inBrowser || inWorker)) - return; + const dir = '/tables'; if (!FS.analyzePath(dir).exists) FS.mkdir(dir); @@ -38,6 +37,30 @@ EM_ASYNC_JS(int, loadfs, (), { } }); +EM_ASYNC_JS(int, download_and_store, (const char *key, const char *url), { + const inBrowser = typeof window !== 'undefined'; + const inWorker = typeof WorkerGlobalScope !== 'undefined' && + self instanceof WorkerGlobalScope; + console.assert(inBrowser || inWorker, "Non-browsers not supported"); + + url = UTF8ToString(url); + key = UTF8ToString(key); + let response = await fetch(url); + if (!response.ok) { + console.log("Error downloading data for " + key); + console.log("" + response.status + ": " + response.statusText); + return 0; + } + + console.log("Data for " + key + " downloaded, writing to storage..."); + let data = await response.bytes(); + var stream = FS.open("/tables/" + key, "w+"); + FS.write(stream, data, 0, data.length, 0); + FS.close(stream); + console.log("Data for " + key + " stored (" + data.length + " bytes)"); + return 1; +}); + bool storage::read(std::string key, size_t data_size, char *data) { loadfs(); @@ -65,3 +88,9 @@ bool storage::write(std::string key, size_t data_size, const char *data) return !ofs.fail(); } + +int storage::download(std::string key, std::string url) +{ + loadfs(); + return download_and_store(key.c_str(), url.c_str()); +} -- cgit v1.3