refactor: consolidate get byte functions

Signed-off-by: Andrew Calcutt <acalcutt@techidiots.net>
This commit is contained in:
Andrew Calcutt 2023-10-09 13:35:52 -04:00
parent 19740c83a0
commit a346462ae8

View file

@ -9,11 +9,34 @@ const PMTilesLocalSource = class {
return this.file.name; return this.file.name;
} }
async getBytes(offset, length) { async getBytes(offset, length) {
const blob = await ReadFileBytes(this.file, offset, length); const sharedBuffer = Buffer.alloc(length);
return { data: blob }; const fd = fs.openSync(this.file); // file descriptor
let bytesRead = 0; // how many bytes were read
for (let i = 0; i < length; i++) {
let postion = offset + i;
await ReadBytes(fd, sharedBuffer, postion);
bytesRead = (i + 1) * length;
if (bytesRead === length) {
break;
}
}
fs.closeSync(fd); //close file when finished
return { data: BufferToArrayBuffer(sharedBuffer) };
} }
}; };
const ReadBytes = async (fd, sharedBuffer, offset) => {
return new Promise((resolve, reject) => {
fs.read(fd, sharedBuffer, 0, sharedBuffer.length, offset, (err) => {
if (err) {
return reject(err);
}
resolve();
});
});
};
export const GetPMtilesInfo = async (pmtilesFile) => { export const GetPMtilesInfo = async (pmtilesFile) => {
const source = new PMTilesLocalSource(pmtilesFile); const source = new PMTilesLocalSource(pmtilesFile);
const pmtiles = new PMTiles.PMTiles(source); const pmtiles = new PMTiles.PMTiles(source);
@ -78,35 +101,6 @@ const GetPmtilesTileType = (typenum) => {
return { type: tileType, header: head }; return { type: tileType, header: head };
}; };
const ReadFileBytes = async (filePath, offset, size) => {
const sharedBuffer = Buffer.alloc(size);
const fd = fs.openSync(filePath); // file descriptor
let bytesRead = 0; // how many bytes were read
for (let i = 0; i < size; i++) {
let postion = offset + i;
await ReadBytes(fd, sharedBuffer, postion);
bytesRead = (i + 1) * size;
if (bytesRead === size) {
break;
}
}
fs.closeSync(fd); //close file when finished
return BufferToArrayBuffer(sharedBuffer);
};
const ReadBytes = async (fd, sharedBuffer, offset) => {
return new Promise((resolve, reject) => {
fs.read(fd, sharedBuffer, 0, sharedBuffer.length, offset, (err) => {
if (err) {
return reject(err);
}
resolve();
});
});
};
const BufferToArrayBuffer = (buffer) => { const BufferToArrayBuffer = (buffer) => {
const arrayBuffer = new ArrayBuffer(buffer.length); const arrayBuffer = new ArrayBuffer(buffer.length);
const view = new Uint8Array(arrayBuffer); const view = new Uint8Array(arrayBuffer);