From 2d95a8cf8101837b6797e3e0cdcbcd275947239e Mon Sep 17 00:00:00 2001 From: OleSTEEP Date: Sat, 6 Jan 2024 06:11:27 +0300 Subject: [PATCH] External Android saves (contains SAYGEX) --- README.md | 2 +- www/img/pictures/VERY_IMPORTANT_SHIT.jpeg | Bin 0 -> 41550 bytes www/js/plugins/CordovaFixes.js | 113 +++++++++++++--------- www/js/plugins/GTP_OmoriFixes.js | 2 +- www/js/porting/compat/nwjs.js | 3 + 5 files changed, 73 insertions(+), 47 deletions(-) create mode 100644 www/img/pictures/VERY_IMPORTANT_SHIT.jpeg diff --git a/README.md b/README.md index f55e76b..6529335 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Android port of OMORI RPG game - [x] Main/Options menu fix - [x] Physical gamepad support - [x] replaceAll polyfill -- [ ] External saves (Android/data) +- [x] External saves (Android/data) - [x] Cordova localhost bug - [x] WakeLock - [x] Fix game canvas size diff --git a/www/img/pictures/VERY_IMPORTANT_SHIT.jpeg b/www/img/pictures/VERY_IMPORTANT_SHIT.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..f4c5953799a7ecc0d273ebf15561a3d262b04b91 GIT binary patch literal 41550 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 literal 0 HcmV?d00001 diff --git a/www/js/plugins/CordovaFixes.js b/www/js/plugins/CordovaFixes.js index bc13991..bc823c4 100644 --- a/www/js/plugins/CordovaFixes.js +++ b/www/js/plugins/CordovaFixes.js @@ -247,60 +247,83 @@ document.addEventListener("deviceready", () => { // Saves in external storage // ============================= -var save_exists; -var save_data; +window._SAYGEXES = {}; + +function setSayGexValue(key, f, fallback) { + let saygex = window._SAYGEXES[key]; + if (saygex != undefined) { + return f(saygex); + } else { + window._SAYGEXES[key] = fallback; + } +} + +function getSaveName(path) { + return require.libs.path._solve_dots(path).split("/")[1]; +} + +function getAndroidSavePath(path) { + return cordova.file.externalDataDirectory + "save/" + getSaveName(path); +} document.addEventListener("deviceready", () => { StorageManager.isLocalMode = function () { return true; }; - // NativeFunctions.saveFileExists = function(path) { - // var split_path = require.libs.path._solve_dots(path).split("/"); - // save_exists = null; - // window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function (dirEntry) { - // console.log(`Using externalStorage while checking save file ${path} existence`); - // dirEntry.getDirectory(split_path[0], { create: true }, function (subDirEntry) { - // subDirEntry.getFile(split_path[1], {create: false, exclusive: false}, function(fileEntry) { - // save_exists = true; - // console.log(`After "save_exists = true" - ${save_exists}`); - // }, () => { - // save_exists = false; - // console.log(`After "save_exists = false" - ${save_exists}`); - // }); - // }); - // }); - // console.log(`Before return - ${save_exists}`); - // return save_exists; - // } + NativeFunctions.saveFileExists = function(path) { + if (window._SAYGEXES[path] != undefined) { + return window._SAYGEXES[path].exists; + } - // NativeFunctions.readSaveFileUTF8 = function(path, fnCallback) { - // var split_path = require.libs.path._solve_dots(path).split("/"); - // save_data = null; - // window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function (dirEntry) { - // console.log(`Using externalStorage to read save at ${path}`); - // dirEntry.getDirectory(split_path[0], { create: true }, function (subDirEntry) { - // subDirEntry.getFile(split_path[1], {create: false, exclusive: false}, function(fileEntry) { - // fileEntry.file(function (file) { - // var reader = new FileReader(); - - // reader.onloadend = function() { - // save_data = this.result; - // }; - - // reader.readAsText(file); - // }, () => { - // console.log("Error to read external save file: " + e.toString()); - // }); - // }, (e) => { - // console.log("Error to find external save file: " + e.toString()); - // }); - // }); - // }); - // return save_data; - // } + let xhr = new XMLHttpRequest(); + xhr.open("GET", getAndroidSavePath(path), false); + try { + xhr.send(); + } catch (e) { + setSayGexValue(path, (v) => { v.exists = false; }, {exists: false, content: null}); + return false; + } + + setSayGexValue(path, (v) => { v.exists = true; }, {exists: true, content: null}); + return xhr.status === 200 || xhr.status === 0; + } + + NativeFunctions.readSaveFileUTF8 = function(path) { + let gex = window._SAYGEXES[path]; + if (gex != undefined) { + if (gex.content != null) { + return gex.content; + } + } + + let xhr = new XMLHttpRequest(); + + xhr.open("GET", getAndroidSavePath(path), false); + xhr.setRequestHeader("Cache-Control", "no-cache, no-store, max-age=0"); + xhr.setRequestHeader("Expires", "Tue, 01 Jan 1980 1:00:00 GMT"); + xhr.setRequestHeader("Pragma", "no-cache"); + try { + xhr.send(); + } catch (e) { + if (e.message.startsWith("Failed to execute 'send'")) { + alert(`Server returned status code 404 (${getAndroidSavePath(path)})`); + } else { + alert(e); + } + } + if (xhr.status !== 200 && xhr.status !== 0) { + alert(`Server returned status code ${xhr.status}`); + } + + let text = xhr.responseText; + setSayGexValue(path, (v) => { v.content = text; }, {exists: true, content: text}); + return text; + } NativeFunctions.writeSaveFileUTF8 = function(path, data) { + setSayGexValue(path, (v) => { v.exists = true; v.content = data; }, {exists: true, content: data}); + var split_path = require.libs.path._solve_dots(path).split("/"); window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function (dirEntry) { console.log(`Writing ${path} save file to the externalStorage`); diff --git a/www/js/plugins/GTP_OmoriFixes.js b/www/js/plugins/GTP_OmoriFixes.js index bab375f..fefe1ca 100644 --- a/www/js/plugins/GTP_OmoriFixes.js +++ b/www/js/plugins/GTP_OmoriFixes.js @@ -2989,7 +2989,7 @@ Gamefall.Encryption = Gamefall.Encryption || {}; const path = require('path'); const fs = require('fs'); var base = path.dirname(process.mainModule.filename); - let mapName = require("fs").cachedAlternativeName(`/maps/map${mapId}.json`); + let mapName = require("fs").cachedAlternativeName(`maps/map${mapId}.json`); this.unloadTiledMapData(); fs.readFile(base + mapName, (err, buffer) => { if (!!err) { diff --git a/www/js/porting/compat/nwjs.js b/www/js/porting/compat/nwjs.js index ef761bd..f8d678c 100644 --- a/www/js/porting/compat/nwjs.js +++ b/www/js/porting/compat/nwjs.js @@ -348,6 +348,9 @@ require.libs.fs = { }, readFile: function (path, callback) { + if (path.startsWith(".") && !path.startsWith("./")) { + path = "./" + path.substr(1); + } let xhr = new XMLHttpRequest(); xhr.responseType = "arraybuffer"; xhr.open("GET", path, true);