UNPKG

@infinito/id3

Version:
80 lines (61 loc) 2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = getID3v2_2; var _constants = require("../constants.js"); var _id3tag = _interopRequireDefault(require("../classes/id3tag.js")); var _id322Frame = _interopRequireDefault(require("../classes/id3.2.2.frame.js")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function getID3v2_2(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) { //Compression Used Flag throw new Error("Compression used; Not implemented"); } var _ref = new _id322Frame.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 _id322Frame.default(buf, pos); } catch (error) { var skip = 0; var tempbuf = new Uint8Array(buf, pos + FRAME_ID_SIZE_BYTES, FRAME_SIZE_BYTES); for (var i = 0; i < FRAME_SIZE_BYTES; i++) { skip <<= 8; skip += tempbuf[i]; } if (skip == 0) { 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; }