UNPKG

@infinito/id3

Version:
92 lines (71 loc) 2.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = getID3v2_4; var _constants = require("../constants.js"); var _id3tag = _interopRequireDefault(require("../classes/id3tag.js")); var _id324Frame = _interopRequireDefault(require("../classes/id3.2.4.frame.js")); var _getSyncsafe = _interopRequireDefault(require("../get.syncsafe.js")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function getID3v2_4(path, buf, subver, flags, size) { if (!(buf instanceof ArrayBuffer)) { throw new TypeError('parameter buf must be an instance of an ArrayBuffer'); } var pos = _constants.constants.ID3_HEADER_LENGTH_BYTES; /* Check flags */ if (flags & 0x80 > 0) {//Unsynchronization Flag } if (flags & 0x40 > 0) { //Extended Header Flag console.error(path); console.log(flags); console.log(flags & 0x80); throw new Error("Extended header flag not implemented"); return false; } if (flags & 0x20 > 0) {//Experimental Flag set } if (flags & 0x10 > 0) { //Footer present console.error(path); console.log(flags); throw new Error("Footer present flag not implemented"); return false; } var _ref = new _id324Frame.default('default'), FRAME_ID_SIZE_BYTES = _ref.FRAME_ID_SIZE_BYTES, FRAME_SIZE_BYTES = _ref.FRAME_SIZE_BYTES, FRAME_HEADER_SIZE_BYTES = _ref.FRAME_HEADER_SIZE_BYTES; var tags = new _id3tag.default(path); while (pos < size) { try { var frame = new _id324Frame.default(buf, pos); } catch (error) { var skip = (0, _getSyncsafe.default)(new Uint8Array(buf, pos + FRAME_ID_SIZE_BYTES, FRAME_SIZE_BYTES)); if (skip == 0) { //Check for padding var tempbuf = new Uint8Array(buf, pos, size - pos); for (var i = 0; i < tempbuf.length; i++) { if (tempbuf[i] != 0) { throw new Error(error); return false; } } pos = size; break; } else { pos += skip + FRAME_HEADER_SIZE_BYTES; continue; } } pos += frame.size + FRAME_HEADER_SIZE_BYTES; try { frame.add_to_ID3(tags); } catch (error) { throw new Error(error); return false; } } return tags; }