jsmediatags
Version:
Media Tags Reader (ID3, MP4)
127 lines (105 loc) • 3.95 kB
JavaScript
;
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var MediaFileReader = require('./MediaFileReader');
var MediaTagReader = /*#__PURE__*/function () {
function MediaTagReader(mediaFileReader) {
_classCallCheck(this, MediaTagReader);
_defineProperty(this, "_mediaFileReader", void 0);
_defineProperty(this, "_tags", void 0);
this._mediaFileReader = mediaFileReader;
this._tags = null;
}
/**
* Returns the byte range that needs to be loaded and fed to
* _canReadTagFormat in order to identify if the file contains tag
* information that can be read.
*/
_createClass(MediaTagReader, [{
key: "setTagsToRead",
value: function setTagsToRead(tags) {
this._tags = tags;
return this;
}
}, {
key: "read",
value: function read(callbacks) {
var self = this;
this._mediaFileReader.init({
onSuccess: function onSuccess() {
self._loadData(self._mediaFileReader, {
onSuccess: function onSuccess() {
try {
var tags = self._parseData(self._mediaFileReader, self._tags);
} catch (ex) {
if (callbacks.onError) {
callbacks.onError({
"type": "parseData",
"info": ex.message
});
return;
}
} // TODO: destroy mediaFileReader
callbacks.onSuccess(tags);
},
onError: callbacks.onError
});
},
onError: callbacks.onError
});
}
}, {
key: "getShortcuts",
value: function getShortcuts() {
return {};
}
/**
* Load the necessary bytes from the media file.
*/
}, {
key: "_loadData",
value: function _loadData(mediaFileReader, callbacks) {
throw new Error("Must implement _loadData function");
}
/**
* Parse the loaded data to read the media tags.
*/
}, {
key: "_parseData",
value: function _parseData(mediaFileReader, tags) {
throw new Error("Must implement _parseData function");
}
}, {
key: "_expandShortcutTags",
value: function _expandShortcutTags(tagsWithShortcuts) {
if (!tagsWithShortcuts) {
return null;
}
var tags = [];
var shortcuts = this.getShortcuts();
for (var i = 0, tagOrShortcut; tagOrShortcut = tagsWithShortcuts[i]; i++) {
tags = tags.concat(shortcuts[tagOrShortcut] || [tagOrShortcut]);
}
return tags;
}
}], [{
key: "getTagIdentifierByteRange",
value: function getTagIdentifierByteRange() {
throw new Error("Must implement");
}
/**
* Given a tag identifier (read from the file byte positions speficied by
* getTagIdentifierByteRange) this function checks if it can read the tag
* format or not.
*/
}, {
key: "canReadTagFormat",
value: function canReadTagFormat(tagIdentifier) {
throw new Error("Must implement");
}
}]);
return MediaTagReader;
}();
module.exports = MediaTagReader;