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 @@ -
- +