diff --git a/public/assets/sunny.json b/public/assets/sunny.json index 3eb59d48f..40cfc02a1 100644 --- a/public/assets/sunny.json +++ b/public/assets/sunny.json @@ -7,7 +7,7 @@ "attribution": "Protomaps © OpenStreetMap", "type": "vector", "tiles": [ - "https://127.0.0.1:1234/service-worker/offline-basemap/{z}-{x}-{y}.mvt?fallback=true" + "https://127.0.0.1:1234/service-worker/offline-basemap/{z}-{x}-{y}.mvt?fallback=true&auto=true" ], "maxzoom": 15, "minzoom": 0 diff --git a/src/service-worker/OfflineBasemapManager.ts b/src/service-worker/OfflineBasemapManager.ts index a6b2a1f83..534d64af6 100644 --- a/src/service-worker/OfflineBasemapManager.ts +++ b/src/service-worker/OfflineBasemapManager.ts @@ -321,7 +321,18 @@ export class OfflineBasemapManager { if (this.metaCached.length === 0) { await this.updateCachedMeta() } - const area = this.determineArea(z, x, y) + let area = this.determineArea(z, x, y) + + if (options?.autoInstall && !area) { + // We attempt to install the local files + const candidates = this.getInstallCandidates({ z, x, y }) + for (const candidate of candidates) { + await this.installArea(candidate) + } + await this.updateCachedMeta() + area = this.determineArea(z, x, y) + } + if (!area) { if (options?.fallback) { return this.getFallback(z, x, y)