#include "emscripten.hpp" #include "filesystem.h" #include "sharedstate.h" EM_JS(void, load_file_async_js, (const char* fullPathC), { Asyncify.handleSleep(function(wakeUp) { // Get argument const fullPath = UTF8ToString(fullPathC); // Make cache object if (!window.fileAsyncCache) window.fileAsyncCache = {}; // Check if already loaded if (window.fileAsyncCache.hasOwnProperty(fullPath)) return wakeUp(); // Show spinner if (window.setBusy) window.setBusy(); // Get full destination const file = "game/" + fullPath; // Get path and filename const path = "/" + file.substring(0, file.lastIndexOf("/")); const filename = file.substring(file.lastIndexOf("/") + 1); // Get target URL const iurl = "gameasync/" + fullPath; // Delete original file FS.unlink(path + "/" + filename); // Get the new file FS.createPreloadedFile(path, filename, iurl, true, true, function() { window.fileAsyncCache[fullPath] = 1; if (window.setNotBusy) window.setNotBusy(); wakeUp(); }, console.error); }); }); struct LoadOpenHandler : FileSystem::OpenHandler { LoadOpenHandler() {} bool tryRead(SDL_RWops &ops, const char *ext, const char *fullPath) { load_file_async_js(fullPath); return true; } }; void load_file_async(const char * filename) { LoadOpenHandler handler; shState->fileSystem().openRead(handler, filename); }