mirror of
https://github.com/jwetzell/psn-js.git
synced 2026-09-08 07:49:17 +00:00
align structure more with underlying chunk layout
This commit is contained in:
+17
-7
@@ -1,19 +1,29 @@
|
||||
import { Chunk } from '../models/chunk';
|
||||
|
||||
export default (buffer: Uint8Array, dataDecoder: Function): Chunk => {
|
||||
export default (buffer: Uint8Array): Chunk => {
|
||||
let offset = 0;
|
||||
const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
|
||||
const chunk: Chunk = {};
|
||||
chunk.id = view.getUint16(offset, true);
|
||||
const id = view.getUint16(offset, true);
|
||||
offset += 2;
|
||||
|
||||
// NOTE(jwetzell): this data is split up as 1 bit for has_subchunks and 15 bits for the data_len
|
||||
const combinedLengthAndFlag = view.getUint16(offset, true);
|
||||
chunk.has_subchunks = combinedLengthAndFlag > 32768;
|
||||
chunk.data_len = chunk.has_subchunks ? combinedLengthAndFlag - 32768 : combinedLengthAndFlag;
|
||||
const hasSubchunks = combinedLengthAndFlag > 32768;
|
||||
const dataLen = hasSubchunks ? combinedLengthAndFlag - 32768 : combinedLengthAndFlag;
|
||||
offset += 2;
|
||||
chunk.chunk_data = buffer.slice(offset, offset + chunk.data_len);
|
||||
|
||||
dataDecoder(chunk);
|
||||
const header = {
|
||||
id,
|
||||
dataLen,
|
||||
hasSubchunks,
|
||||
};
|
||||
|
||||
const chunkData = buffer.subarray(offset, offset + header.dataLen);
|
||||
|
||||
const chunk = {
|
||||
chunkData,
|
||||
header,
|
||||
};
|
||||
|
||||
return chunk;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user