From 5c2caf7556746752cbf291c10a0e224152e3c286 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Mon, 30 Aug 2021 15:56:56 +0800 Subject: [PATCH] Update localforage to use jsinterface --- libs/actions.js | 7 ++--- libs/control.js | 2 +- libs/utils.js | 83 ++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 79 insertions(+), 13 deletions(-) diff --git a/libs/actions.js b/libs/actions.js index 31f66487..34a4d68d 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -2804,7 +2804,8 @@ actions.prototype._clickStorageRemove = function (x, y) { actions.prototype._clickStorageRemove_all = function () { core.myconfirm("你确定要清除【全部游戏】的所有本地存档?\n此行为不可逆!!!", function () { - var done = function () { + core.ui.drawWaiting("正在清空,请稍候..."); + core.clearLocalForage(function () { core.saves.ids = {}; core.saves.autosave.data = null; core.saves.autosave.updated = false; @@ -2816,9 +2817,7 @@ actions.prototype._clickStorageRemove_all = function () { core.control._updateFavoriteSaves(); core.removeLocalStorage('saveIndex'); core.drawText("\t[操作成功]你的所有存档已被清空。"); - }; - core.ui.drawWaiting("正在清空,请稍候..."); - localforage.clear(done); + }); }); } diff --git a/libs/control.js b/libs/control.js index dc58a8e1..60aa20ed 100644 --- a/libs/control.js +++ b/libs/control.js @@ -2285,7 +2285,7 @@ control.prototype.getAllSaves = function (callback) { ////// 获得所有存在存档的存档位 ////// control.prototype.getSaveIndexes = function (callback) { var indexes = {}; - localforage.keys(function (err, keys) { + core.keysLocalForage(function (err, keys) { if (err) { main.log(err); return callback(indexes); diff --git a/libs/utils.js b/libs/utils.js index 800b2384..9b707cbc 100644 --- a/libs/utils.js +++ b/libs/utils.js @@ -257,12 +257,11 @@ utils.prototype.setLocalForage = function (key, value, successCallback, errorCal return; } - // Save to localforage + var name = core.firstData.name + "_" + key; var str = JSON.stringify(value).replace(/[\u007F-\uFFFF]/g, function (chr) { return "\\u" + ("0000" + chr.charCodeAt(0).toString(16)).substr(-4) }); - var compressed = str.length > 100000 ? LZString.compress(str) : lzw_encode(str); - localforage.setItem(core.firstData.name + "_" + key, compressed, function (err) { + var callback = function (err) { if (err) { if (errorCallback) errorCallback(err); } @@ -271,11 +270,21 @@ utils.prototype.setLocalForage = function (key, value, successCallback, errorCal else if (/^save\d+$/.test(key)) core.saves.ids[parseInt(key.substring(4))] = true; if (successCallback) successCallback(); } - }); + } + + if (window.jsinterface && window.jsinterface.setLocalForage) { + var id = setTimeout(null); + core['__callback' + id] = callback; + window.jsinterface.setLocalForage(id, name, str); + } else { + var compressed = str.length > 100000 ? LZString.compress(str) : lzw_encode(str); + localforage.setItem(name, compressed, callback); + } } utils.prototype.getLocalForage = function (key, defaultValue, successCallback, errorCallback) { - localforage.getItem(core.firstData.name + "_" + key, function (err, value) { + var name = core.firstData.name + "_" + key; + var callback = function (err, value) { if (err) { if (errorCallback) errorCallback(err); } @@ -288,11 +297,20 @@ utils.prototype.getLocalForage = function (key, defaultValue, successCallback, e } successCallback(defaultValue); } - }) + }; + + if (window.jsinterface && window.jsinterface.getLocalForage) { + var id = setTimeout(null); + core['__callback' + id] = callback; + window.jsinterface.getLocalForage(id, name); + } else { + localforage.getItem(name, callback); + } } utils.prototype.removeLocalForage = function (key, successCallback, errorCallback) { - localforage.removeItem(core.firstData.name + "_" + key, function (err) { + var name = core.firstData.name + "_" + key; + var callback = function (err) { if (err) { if (errorCallback) errorCallback(err); } @@ -301,7 +319,56 @@ utils.prototype.removeLocalForage = function (key, successCallback, errorCallbac else if (/^save\d+$/.test(key)) delete core.saves.ids[parseInt(key.substring(4))]; if (successCallback) successCallback(); } - }) + } + + if (window.jsinterface && window.jsinterface.removeLocalForage) { + var id = setTimeout(null); + core['__callback' + id] = callback; + window.jsinterface.removeLocalForage(id, name); + } else { + localforage.removeItem(name, callback); + } +} + +utils.prototype.clearLocalForage = function (callback) { + if (window.jsinterface && window.jsinterface.clearLocalForage) { + var id = setTimeout(null); + core['__callback' + id] = callback; + window.jsinterface.clearLocalForage(id); + } else { + localforage.clear(callback); + } +} + +utils.prototype.iterateLocalForage = function (iter, callback) { + if (window.jsinterface && window.jsinterface.iterateLocalForage) { + var id = setTimeout(null); + core['__iter' + id] = iter; + core['__callback' + id] = callback; + window.jsinterface.iterateLocalForage(id); + } else { + localforage.iterate(iter, callback); + } +} + +utils.prototype.keysLocalForage = function (callback) { + if (window.jsinterface && window.jsinterface.keysLocalForage) { + var id = setTimeout(null); + core['__callback' + id] = callback; + window.jsinterface.keysLocalForage(id); + } else { + localforage.keys(callback); + } +} + +utils.prototype.lengthLocalForage = function (callback) { + if (window.jsinterface && window.jsinterface.lengthLocalForage) { + var id = setTimeout(null); + core['__callback' + id] = callback; + window.jsinterface.lengthLocalForage(id); + } else { + localforage.length(callback); + } } utils.prototype.setGlobal = function (key, value) {