diff --git a/public/html/application/fragment/settings.html b/public/html/application/fragment/settings.html
index dd153e1..c12d824 100644
--- a/public/html/application/fragment/settings.html
+++ b/public/html/application/fragment/settings.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/js/app.js b/public/js/app.js
index c72a696..f100bc2 100755
--- a/public/js/app.js
+++ b/public/js/app.js
@@ -4835,6 +4835,55 @@ InitPromise.addPromise(function(app){
app.addDeepLink("newPassword", SetNewPasswordSite);
});
+class MyStorageManager {
+ static getInstance() {
+ if (Helper.isNull(MyStorageManager.instance)) {
+ MyStorageManager.instance = new MyStorageManager();
+ }
+ return MyStorageManager.instance;
+ }
+
+ async estimate() {
+ if ('storage' in navigator && 'estimate' in navigator.storage) {
+ // We've got the real thing! Return its response.
+ return navigator.storage.estimate();
+ }
+
+ if ('webkitTemporaryStorage' in navigator &&
+ 'queryUsageAndQuota' in navigator.webkitTemporaryStorage) {
+ // Return a promise-based wrapper that will follow the expected interface.
+ return new Promise(function (resolve, reject) {
+ navigator.webkitTemporaryStorage.queryUsageAndQuota(
+ function (usage, quota) {
+ resolve({usage: usage, quota: quota});
+ },
+ reject
+ );
+ });
+ }
+ // If we can't estimate the values, return a Promise that resolves with NaN.
+ return Promise.resolve({usage: NaN, quota: NaN});
+ }
+
+ canEstimateStorage() {
+ return ('storage' in navigator && 'estimate' in navigator.storage || 'webkitTemporaryStorage' in navigator &&
+ 'queryUsageAndQuota' in navigator.webkitTemporaryStorage);
+ }
+
+ canPersist() {
+ return (navigator.storage && navigator.storage.persist);
+ }
+
+ persist(){
+ if (this.canPersist()){
+ return navigator.storage.persist();
+ }
+ return Promise.resolve(false);
+ }
+}
+
+MyStorageManager.instance = null;
+
class InstallManager {
static init() {
window.addEventListener('beforeinstallprompt', e => {
@@ -4853,7 +4902,10 @@ class InstallManager {
static async prompt(){
if (Helper.isNotNull(this.deferredPromt)){
this.deferredPromt["prompt"]();
- return this.deferredPromt["userChoice"];
+ return this.deferredPromt["userChoice"].then(r => {
+ MyStorageManager.getInstance().persist();
+ return r;
+ });
}
return Promise.resolve({
"outcome":"dismissed",
@@ -5340,50 +5392,6 @@ InitPromise.addPromise(() => {
});
});
-// AndroidBridge.addDefinition(() => {
- // window["soundManagerInstance"] = SoundManager.getInstance();
- // window["soundManagerInstance"]["stopAll"] = window["soundManagerInstance"].stopAll;
- // window["soundManagerInstance"]["resumeAllIfNotMuted"] = window["soundManagerInstance"].resumeAllIfNotMuted;
-// });
-
-class StorageManager {
- static getInstance() {
- if (Helper.isNull(StorageManager.instance)) {
- StorageManager.instance = new StorageManager();
- }
- return StorageManager.instance;
- }
-
- async estimate() {
- if ('storage' in navigator && 'estimate' in navigator.storage) {
- // We've got the real thing! Return its response.
- return navigator.storage.estimate();
- }
-
- if ('webkitTemporaryStorage' in navigator &&
- 'queryUsageAndQuota' in navigator.webkitTemporaryStorage) {
- // Return a promise-based wrapper that will follow the expected interface.
- return new Promise(function (resolve, reject) {
- navigator.webkitTemporaryStorage.queryUsageAndQuota(
- function (usage, quota) {
- resolve({usage: usage, quota: quota});
- },
- reject
- );
- });
- }
- // If we can't estimate the values, return a Promise that resolves with NaN.
- return Promise.resolve({usage: NaN, quota: NaN});
- }
-
- canEstimateStorage() {
- return ('storage' in navigator && 'estimate' in navigator.storage || 'webkitTemporaryStorage' in navigator &&
- 'queryUsageAndQuota' in navigator.webkitTemporaryStorage);
- }
-}
-
-StorageManager.instance = null;
-
class Code {
constructor(args) {
if (typeof args === "string") {
@@ -7303,16 +7311,13 @@ class WordRotatorSettingFragment extends LocalStorageSettingsFragment {
installButton.classList.remove("hidden");
});
- let storageManager = StorageManager.getInstance();
- if (storageManager.canEstimateStorage()) {
+ let storageManager = MyStorageManager.getInstance();
+ if (storageManager.canEstimateStorage() && false) {
console.log("can estimate storage!");
storageManager.estimate().then(storage => {
let storageObject = this.findBy("#storage-info");
- console.log("estimating storage 2", storageObject);
storageObject.appendChild(Translator.makePersistentTranslation("storage-info", [Math.round(storage.usage/(1024*1024)*100)/100, Math.round(storage.quota/(1024*1024)*100)/100, Math.round(storage.usage/storage.quota*10000)/100]));
- console.log("estimating storage 3", storage);
- storageObject.classList.remove("hidden");
- console.log("estimating storage 4", storage);
+ storageObject.parentElement.classList.remove("hidden");
});
}
@@ -7522,5 +7527,7 @@ InitPromise.resolve(app$1).then(async function () {
InstallManager.setCanInstallListener(e => {
});
+ MyStorageManager.getInstance().persist();
+
window["applyAndroidBridge"] = AndroidBridge.applyDefinitions;
});
diff --git a/src/js/init.js b/src/js/init.js
index 9d40190..af85640 100755
--- a/src/js/init.js
+++ b/src/js/init.js
@@ -20,7 +20,13 @@ import "./lib/pwa-contact"
import {SettingsManager, SettingsSite} from "./lib/pwa-core";
-import {InstallManager, Matomo, MatomoShareButton, SoundManager} from "./lib/pwa-assets";
+import {
+ InstallManager,
+ Matomo,
+ MatomoShareButton,
+ MyStorageManager,
+ SoundManager
+} from "./lib/pwa-assets";
import {MenuSite} from "../module/Application/pwa/js/site/MenuSite";
import {WordRotatorSettingFragment} from "../module/Application/pwa/js/Fragment/WordRotatorSettingFragment";
@@ -83,5 +89,7 @@ InitPromise.resolve(app).then(async function () {
InstallManager.setCanInstallListener(e => {
});
+ MyStorageManager.getInstance().persist();
+
window["applyAndroidBridge"] = AndroidBridge.applyDefinitions;
});
diff --git a/src/js/lib/pwa-assets.js b/src/js/lib/pwa-assets.js
index cbe61a6..0cd8c47 100755
--- a/src/js/lib/pwa-assets.js
+++ b/src/js/lib/pwa-assets.js
@@ -8,6 +8,55 @@ class DelayPromise extends Promise {
}
}
+class MyStorageManager {
+ static getInstance() {
+ if (Helper.isNull(MyStorageManager.instance)) {
+ MyStorageManager.instance = new MyStorageManager();
+ }
+ return MyStorageManager.instance;
+ }
+
+ async estimate() {
+ if ('storage' in navigator && 'estimate' in navigator.storage) {
+ // We've got the real thing! Return its response.
+ return navigator.storage.estimate();
+ }
+
+ if ('webkitTemporaryStorage' in navigator &&
+ 'queryUsageAndQuota' in navigator.webkitTemporaryStorage) {
+ // Return a promise-based wrapper that will follow the expected interface.
+ return new Promise(function (resolve, reject) {
+ navigator.webkitTemporaryStorage.queryUsageAndQuota(
+ function (usage, quota) {
+ resolve({usage: usage, quota: quota});
+ },
+ reject
+ );
+ });
+ }
+ // If we can't estimate the values, return a Promise that resolves with NaN.
+ return Promise.resolve({usage: NaN, quota: NaN});
+ }
+
+ canEstimateStorage() {
+ return ('storage' in navigator && 'estimate' in navigator.storage || 'webkitTemporaryStorage' in navigator &&
+ 'queryUsageAndQuota' in navigator.webkitTemporaryStorage);
+ }
+
+ canPersist() {
+ return (navigator.storage && navigator.storage.persist);
+ }
+
+ persist(){
+ if (this.canPersist()){
+ return navigator.storage.persist();
+ }
+ return Promise.resolve(false);
+ }
+}
+
+MyStorageManager.instance = null;
+
class InstallManager {
static init() {
window.addEventListener('beforeinstallprompt', e => {
@@ -26,7 +75,10 @@ class InstallManager {
static async prompt(){
if (Helper.isNotNull(this.deferredPromt)){
this.deferredPromt["prompt"]();
- return this.deferredPromt["userChoice"];
+ return this.deferredPromt["userChoice"].then(r => {
+ MyStorageManager.getInstance().persist();
+ return r;
+ });
}
return Promise.resolve({
"outcome":"dismissed",
@@ -535,44 +587,6 @@ InitPromise.addPromise(() => {
// window["soundManagerInstance"]["resumeAllIfNotMuted"] = window["soundManagerInstance"].resumeAllIfNotMuted;
// });
-class StorageManager {
- static getInstance() {
- if (Helper.isNull(StorageManager.instance)) {
- StorageManager.instance = new StorageManager();
- }
- return StorageManager.instance;
- }
-
- async estimate() {
- if ('storage' in navigator && 'estimate' in navigator.storage) {
- // We've got the real thing! Return its response.
- return navigator.storage.estimate();
- }
-
- if ('webkitTemporaryStorage' in navigator &&
- 'queryUsageAndQuota' in navigator.webkitTemporaryStorage) {
- // Return a promise-based wrapper that will follow the expected interface.
- return new Promise(function (resolve, reject) {
- navigator.webkitTemporaryStorage.queryUsageAndQuota(
- function (usage, quota) {
- resolve({usage: usage, quota: quota});
- },
- reject
- );
- });
- }
- // If we can't estimate the values, return a Promise that resolves with NaN.
- return Promise.resolve({usage: NaN, quota: NaN});
- }
-
- canEstimateStorage() {
- return ('storage' in navigator && 'estimate' in navigator.storage || 'webkitTemporaryStorage' in navigator &&
- 'queryUsageAndQuota' in navigator.webkitTemporaryStorage);
- }
-}
-
-StorageManager.instance = null;
-
class TabbedFragment extends Fragment {
constructor(site) {
super(site, 'pwaAssets/html/fragment/tabbedFragment.html');
@@ -638,4 +652,4 @@ class TabbedFragment extends Fragment {
}
}
-export { DelayPromise, InstallManager, Matomo, MatomoShareButton, RotateHelper, ScaleHelper, AudioChain, SoundManager, StorageManager, TabbedFragment };
+export { DelayPromise, InstallManager, Matomo, MatomoShareButton, MyStorageManager, RotateHelper, ScaleHelper, AudioChain, SoundManager, TabbedFragment };
diff --git a/src/module/Application/pwa/js/Fragment/WordRotatorSettingFragment.js b/src/module/Application/pwa/js/Fragment/WordRotatorSettingFragment.js
index 957557a..cd2cca5 100644
--- a/src/module/Application/pwa/js/Fragment/WordRotatorSettingFragment.js
+++ b/src/module/Application/pwa/js/Fragment/WordRotatorSettingFragment.js
@@ -1,7 +1,7 @@
import {LocalStorageSettingsFragment, SettingsManager, SettingsSite} from "../../../../../js/lib/pwa-core";
import {Helper, InitPromise, ThemeManager, Translator} from "../../../../../js/lib/pwa-lib";
import {WordRotatorDb} from "../WordRotatorDb";
-import {InstallManager, Matomo, SoundManager, StorageManager} from "../../../../../js/lib/pwa-assets";
+import {InstallManager, Matomo, MyStorageManager, SoundManager} from "../../../../../js/lib/pwa-assets";
import {CreditsSite} from "../site/CreditsSite";
import {PrivacyPolicySite} from "../site/PrivacyPolicySite";
import {ChooseThemeDialog} from "../dialog/ChooseThemeDialog";
@@ -82,16 +82,13 @@ export class WordRotatorSettingFragment extends LocalStorageSettingsFragment {
installButton.classList.remove("hidden");
});
- let storageManager = StorageManager.getInstance();
- if (storageManager.canEstimateStorage()) {
+ let storageManager = MyStorageManager.getInstance();
+ if (storageManager.canEstimateStorage() && false) {
console.log("can estimate storage!");
storageManager.estimate().then(storage => {
let storageObject = this.findBy("#storage-info");
- console.log("estimating storage 2", storageObject);
storageObject.appendChild(Translator.makePersistentTranslation("storage-info", [Math.round(storage.usage/(1024*1024)*100)/100, Math.round(storage.quota/(1024*1024)*100)/100, Math.round(storage.usage/storage.quota*10000)/100]));
- console.log("estimating storage 3", storage);
- storageObject.classList.remove("hidden");
- console.log("estimating storage 4", storage);
+ storageObject.parentElement.classList.remove("hidden");
});
}
diff --git a/src/module/Application/pwa/public/html/application/fragment/settings.html b/src/module/Application/pwa/public/html/application/fragment/settings.html
index 8731677..2251f99 100644
--- a/src/module/Application/pwa/public/html/application/fragment/settings.html
+++ b/src/module/Application/pwa/public/html/application/fragment/settings.html
@@ -51,8 +51,8 @@
-