Webclient: Stop relying on ccall and call interop functions directly

This commit is contained in:
UnknownShadow200 2024-01-09 20:47:46 +11:00
parent 85d0a980ec
commit 1c4a3c067a

View File

@ -26,7 +26,7 @@ mergeInto(LibraryManager.library, {
// this by default as no syscalls are used by the C platform code anymore // this by default as no syscalls are used by the C platform code anymore
window.ERRNO_CODES={ENOENT:2,EBADF:9,EAGAIN:11,ENOMEM:12,EEXIST:17,EINVAL:22}; window.ERRNO_CODES={ENOENT:2,EBADF:9,EAGAIN:11,ENOMEM:12,EEXIST:17,EINVAL:22};
}, },
interop_InitModule__deps: ['interop_SaveBlob'], interop_InitModule__deps: ['interop_SaveBlob', 'interop_callVoidFunc', 'interop_callStringFunc'],
interop_TakeScreenshot: function(path) { interop_TakeScreenshot: function(path) {
var name = UTF8ToString(path); var name = UTF8ToString(path);
var canvas = Module['canvas']; var canvas = Module['canvas'];
@ -36,6 +36,22 @@ mergeInto(LibraryManager.library, {
_interop_SaveBlob(canvas.msToBlob(), name); _interop_SaveBlob(canvas.msToBlob(), name);
} }
}, },
interop_callVoidFunc: function(func) {
Module['_' + func]();
},
interop_callStringFunc: function(func, str) {
var arg = 0;
var stackTop = stackSave();
if (str !== null && str !== undefined) {
var len = (str.length * 4) + 1; // worst case, 4 bytes to encode a char
arg = stackAlloc(len);
stringToUTF8(str, arg, len);
}
Module['_' + func](arg);
stackRestore(stackTop);
},
//######################################################################################################################## //########################################################################################################################
@ -99,7 +115,7 @@ mergeInto(LibraryManager.library, {
var name = UTF8ToString(filename); var name = UTF8ToString(filename);
var path = 'Downloads/' + name; var path = 'Downloads/' + name;
ccall('Window_OnFileUploaded', 'void', ['string'], [path]); _interop_callStringFunc('Window_OnFileUploaded', path);
var data = CCFS.readFile(path); var data = CCFS.readFile(path);
var blob = new Blob([data], { type: 'application/octet-stream' }); var blob = new Blob([data], { type: 'application/octet-stream' });
@ -142,15 +158,15 @@ mergeInto(LibraryManager.library, {
return fileHandle.createWritable(); return fileHandle.createWritable();
}) })
.then(function(writable) { .then(function(writable) {
ccall('Window_OnFileUploaded', 'void', ['string'], [path]); _interop_callStringFunc('Window_OnFileUploaded', path);
var data = CCFS.readFile(path); var data = CCFS.readFile(path);
writable.write(data); writable.write(data);
return writable.close(); return writable.close();
}) })
.catch(function(error) { .catch(function(error) {
ccall('Platform_LogError', 'void', ['string'], ['&cError downloading file']); _interop_callStringFunc('Platform_LogError', '&cError downloading file');
ccall('Platform_LogError', 'void', ['string'], [' &c' + error]); _interop_callStringFunc('Platform_LogError', ' &c' + error);
}) })
.finally(function(result) { .finally(function(result) {
if (path) CCFS.unlink(path); if (path) CCFS.unlink(path);
@ -186,10 +202,10 @@ mergeInto(LibraryManager.library, {
_fetchTexturePackAsync(url, _fetchTexturePackAsync(url,
function(buffer) { function(buffer) {
CCFS.writeFile(path, new Uint8Array(buffer)); CCFS.writeFile(path, new Uint8Array(buffer));
Module['_main_phase1'](); _interop_callVoidFunc('main_phase1');
}, },
function() { function() {
Module['_main_phase1'](); _interop_callVoidFunc('main_phase1');
} }
); );
}, },
@ -200,7 +216,7 @@ mergeInto(LibraryManager.library, {
_IDBFS_loadFS(function(err) { _IDBFS_loadFS(function(err) {
if (err) window.cc_idbErr = err; if (err) window.cc_idbErr = err;
Module.setStatus(''); Module.setStatus('');
Module['_main_phase2'](); _interop_callVoidFunc('main_phase2');
}); });
}, },
@ -246,7 +262,7 @@ mergeInto(LibraryManager.library, {
if (path.indexOf(CCFS.currentPath) === 0) { if (path.indexOf(CCFS.currentPath) === 0) {
path = path.substring(CCFS.currentPath.length + 1); path = path.substring(CCFS.currentPath.length + 1);
} }
ccall('Directory_IterCallback', 'void', ['string'], [path]); _interop_callStringFunc('Directory_IterCallback', path);
} }
return 0; return 0;
} catch (e) { } catch (e) {
@ -328,7 +344,7 @@ mergeInto(LibraryManager.library, {
interop_InitFilesystem: function(buffer) { interop_InitFilesystem: function(buffer) {
if (!window.cc_idbErr) return; if (!window.cc_idbErr) return;
var msg = 'Error preloading IndexedDB:' + window.cc_idbErr + '\n\nPreviously saved settings/maps will be lost'; var msg = 'Error preloading IndexedDB:' + window.cc_idbErr + '\n\nPreviously saved settings/maps will be lost';
ccall('Platform_LogError', 'void', ['string'], [msg]); _interop_callStringFunc('Platform_LogError', msg);
}, },
interop_LoadIndexedDB: function() { interop_LoadIndexedDB: function() {
// previously you were required to add interop_LoadIndexedDB to Module.preRun array // previously you were required to add interop_LoadIndexedDB to Module.preRun array
@ -342,8 +358,8 @@ mergeInto(LibraryManager.library, {
var callback = function(err) { var callback = function(err) {
if (!err) return; if (!err) return;
console.log(err); console.log(err);
ccall('Platform_LogError', 'void', ['string'], ['&cError saving ' + path]); _interop_callStringFunc('Platform_LogError', '&cError saving ' + path);
ccall('Platform_LogError', 'void', ['string'], [' &c' + err]); _interop_callStringFunc('Platform_LogError', ' &c' + err);
}; };
var stat, node, entry; var stat, node, entry;
@ -743,7 +759,7 @@ mergeInto(LibraryManager.library, {
window.addEventListener('copy', window.addEventListener('copy',
function(e) { function(e) {
if (window.getSelection && window.getSelection().toString()) return; if (window.getSelection && window.getSelection().toString()) return;
ccall('Window_RequestClipboardText', 'void'); _interop_callVoidFunc('Window_RequestClipboardText');
if (!window.cc_copyText) return; if (!window.cc_copyText) return;
if (e.clipboardData) { if (e.clipboardData) {
@ -758,7 +774,7 @@ mergeInto(LibraryManager.library, {
function(e) { function(e) {
if (e.clipboardData) { if (e.clipboardData) {
var contents = e.clipboardData.getData('text/plain'); var contents = e.clipboardData.getData('text/plain');
ccall('Window_GotClipboardText', 'void', ['string'], [contents]); _interop_callStringFunc('Window_GotClipboardText', contents);
} }
}); });
}, },
@ -766,7 +782,7 @@ mergeInto(LibraryManager.library, {
// For IE11, use window.clipboardData to get the clipboard // For IE11, use window.clipboardData to get the clipboard
if (window.clipboardData) { if (window.clipboardData) {
var contents = window.clipboardData.getData('Text'); var contents = window.clipboardData.getData('Text');
ccall('Window_StoreClipboardText', 'void', ['string'], [contents]); _interop_callStringFunc('Window_StoreClipboardText', contents);
} }
}, },
interop_TrySetClipboardText: function(text) { interop_TrySetClipboardText: function(text) {
@ -848,7 +864,7 @@ mergeInto(LibraryManager.library, {
elem.addEventListener('input', elem.addEventListener('input',
function(ev) { function(ev) {
ccall('Window_OnTextChanged', 'void', ['string'], [ev.target.value]); _interop_callStringFunc('Window_OnTextChanged', ev.target.value);
}, false); }, false);
window.cc_inputElem = elem; window.cc_inputElem = elem;
@ -900,7 +916,7 @@ mergeInto(LibraryManager.library, {
var data = new Uint8Array(e.target.result); var data = new Uint8Array(e.target.result);
var path = root + '/' + name; var path = root + '/' + name;
CCFS.writeFile(path, data); CCFS.writeFile(path, data);
ccall('Window_OnFileUploaded', 'void', ['string'], [path]); _interop_callStringFunc('Window_OnFileUploaded', path);
if (action == 0) CCFS.unlink(path); // OFD_UPLOAD_DELETE if (action == 0) CCFS.unlink(path); // OFD_UPLOAD_DELETE
if (action == 1) _interop_SaveNode(path); // OFD_UPLOAD_PERSIST if (action == 1) _interop_SaveNode(path); // OFD_UPLOAD_PERSIST