@infinito/id3
Version:
ID3 Tag Reader/Writer
92 lines (71 loc) • 2.32 kB
JavaScript
;
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;
}