mirror of
https://github.com/protomaps/PMTiles.git
synced 2026-02-04 10:51:07 +00:00
js v2 compatibility shim supports tile cancellation
This commit is contained in:
@@ -81,15 +81,16 @@ export class Protocol {
|
||||
controller.abort();
|
||||
};
|
||||
|
||||
instance.getZxy(+z, +x, +y, signal).then((arr) => {
|
||||
if (arr) {
|
||||
let data = new Uint8Array(arr.data);
|
||||
callback(null, data, null, null);
|
||||
instance.getZxy(+z, +x, +y, signal).then((resp) => {
|
||||
if (resp) {
|
||||
callback(null, new Uint8Array(resp.data), resp.cacheControl, resp.expires);
|
||||
} else {
|
||||
callback(null, new Uint8Array(), null, null);
|
||||
}
|
||||
}).catch((e) => {
|
||||
console.log(e);
|
||||
if (e.name !== "AbortError") {
|
||||
throw e;
|
||||
}
|
||||
});
|
||||
return {
|
||||
cancel: cancel
|
||||
|
||||
@@ -780,7 +780,7 @@ export class PMTiles {
|
||||
|
||||
// V2 COMPATIBILITY
|
||||
if (header.specVersion < 3) {
|
||||
return v2.getZxy(header, this.source, this.cache, z, x, y);
|
||||
return v2.getZxy(header, this.source, this.cache, z, x, y, signal);
|
||||
}
|
||||
|
||||
if (z < header.minZoom || z > header.maxZoom) {
|
||||
|
||||
7
js/v2.ts
7
js/v2.ts
@@ -261,7 +261,8 @@ async function getZxy(
|
||||
cache: Cache,
|
||||
z: number,
|
||||
x: number,
|
||||
y: number
|
||||
y: number,
|
||||
signal?: AbortSignal
|
||||
): Promise<RangeResponse | undefined> {
|
||||
let root_dir = await cache.getArrayBuffer(
|
||||
source,
|
||||
@@ -275,7 +276,7 @@ async function getZxy(
|
||||
|
||||
const entry = queryTile(new DataView(root_dir), z, x, y);
|
||||
if (entry) {
|
||||
let resp = await source.getBytes(entry.offset, entry.length); // TODO signal
|
||||
let resp = await source.getBytes(entry.offset, entry.length, signal);
|
||||
let tile_data = resp.data;
|
||||
|
||||
let view = new DataView(tile_data);
|
||||
@@ -309,7 +310,7 @@ async function getZxy(
|
||||
}
|
||||
let tile_entry = queryTile(new DataView(leaf_dir), z, x, y);
|
||||
if (tile_entry) {
|
||||
let resp = await source.getBytes(tile_entry.offset, tile_entry.length); // TODO signal
|
||||
let resp = await source.getBytes(tile_entry.offset, tile_entry.length, signal);
|
||||
let tile_data = resp.data;
|
||||
|
||||
let view = new DataView(tile_data);
|
||||
|
||||
Reference in New Issue
Block a user