From dd09bb536d47eaa6762f572e30e70de0ae27f1cc Mon Sep 17 00:00:00 2001 From: Thomas Weber Date: Sat, 11 Dec 2021 23:19:21 -0600 Subject: [PATCH] Introduce "adapters" --- src/{packager => common}/idb.js | 0 src/p4/PackagerOptions.svelte | 2 ++ src/p4/file-store.js | 2 +- src/packager/packager.js | 10 +++++++--- src/packager/web/adapter.js | 13 +++++++++++++ src/packager/{ => web}/cache.js | 8 +++----- 6 files changed, 26 insertions(+), 9 deletions(-) rename src/{packager => common}/idb.js (100%) create mode 100644 src/packager/web/adapter.js rename src/packager/{ => web}/cache.js (91%) diff --git a/src/packager/idb.js b/src/common/idb.js similarity index 100% rename from src/packager/idb.js rename to src/common/idb.js diff --git a/src/p4/PackagerOptions.svelte b/src/p4/PackagerOptions.svelte index 9421fb6..cc54f62 100644 --- a/src/p4/PackagerOptions.svelte +++ b/src/p4/PackagerOptions.svelte @@ -14,6 +14,7 @@ import Preview from './preview'; import deepClone from './deep-clone'; import Packager from '../packager/packager'; + import WebAdapter from '../packager/web/adapter'; import Task from './task'; export let projectData; @@ -83,6 +84,7 @@ }; const runPackager = async (task, options) => { + Packager.adapter = new WebAdapter(); const packager = new Packager(); packager.options = options; packager.project = projectData.project; diff --git a/src/p4/file-store.js b/src/p4/file-store.js index febc0c9..a073420 100644 --- a/src/p4/file-store.js +++ b/src/p4/file-store.js @@ -1,5 +1,5 @@ import {writable} from 'svelte/store'; -import Database from '../packager/idb'; +import Database from '../common/idb'; import {readAsArrayBuffer} from '../common/readers'; const DATABASE_NAME = 'p4-local-settings'; diff --git a/src/packager/packager.js b/src/packager/packager.js index 0c48552..014c51b 100644 --- a/src/packager/packager.js +++ b/src/packager/packager.js @@ -6,7 +6,6 @@ import escapeXML from '../common/escape-xml'; import largeAssets from './large-assets'; import xhr from './xhr'; import pngToAppleICNS from './icns'; -import assetCache from './cache'; import {buildId, verifyBuildId} from './build-id'; import {encode, decode} from './base85'; import {parsePlist, generatePlist} from './plist'; @@ -199,7 +198,7 @@ class Packager extends EventTarget { let result; let cameFromCache = false; try { - const cached = await assetCache.get(asset); + const cached = await Packager.adapter.getCachedAsset(asset); if (cached) { result = cached; cameFromCache = true; @@ -234,7 +233,7 @@ class Packager extends EventTarget { } if (!cameFromCache) { try { - await assetCache.set(asset, result); + await Packager.adapter.cacheAsset(asset, result); } catch (e) { console.warn(e); } @@ -758,6 +757,9 @@ cd "$(dirname "$0")" } async package () { + if (!Packager.adapter) { + throw new Error('Missing adapter'); + } this.ensureNotAborted(); await this.loadResources(); this.ensureNotAborted(); @@ -1213,6 +1215,8 @@ cd "$(dirname "$0")" } } +Packager.adapter = null; + Packager.getDefaultPackageNameFromFileName = (title) => { // Remove file extension title = title.split('.')[0]; diff --git a/src/packager/web/adapter.js b/src/packager/web/adapter.js new file mode 100644 index 0000000..a968ea9 --- /dev/null +++ b/src/packager/web/adapter.js @@ -0,0 +1,13 @@ +import assetCache from './cache'; + +class WebAdapter { + getCachedAsset (asset) { + return assetCache.get(asset) + } + + async cacheAsset (asset, result) { + await assetCache.set(asset, result); + } +} + +export default WebAdapter; diff --git a/src/packager/cache.js b/src/packager/web/cache.js similarity index 91% rename from src/packager/cache.js rename to src/packager/web/cache.js index 22b103c..4255f28 100644 --- a/src/packager/cache.js +++ b/src/packager/web/cache.js @@ -1,8 +1,6 @@ -import largeAssets from './large-assets'; -import {buildId} from './build-id'; -import Database from './idb'; - -// We can't trust the HTTP cache to reliably cache these large assets +import largeAssets from '../large-assets'; +import {buildId} from '../build-id'; +import Database from '../../common/idb'; const DATABASE_NAME = 'p4-large-assets'; const DATABASE_VERSION = 1;