UNPKG

jsmediatags

Version:
127 lines (105 loc) 3.95 kB
'use strict'; 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;