@infinito/id3
Version:
ID3 Tag Reader/Writer
88 lines (68 loc) • 2.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getID3v2_3;
var _constants = require("../constants.js");
var _id3tag = _interopRequireDefault(require("../classes/id3tag.js"));
var _id323Frame = _interopRequireDefault(require("../classes/id3.2.3.frame.js"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function getID3v2_3(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
}
var _ref = new _id323Frame.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 _id323Frame.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) {
//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;
}