Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
58 lines
2.1 KiB
JavaScript
Executable file
58 lines
2.1 KiB
JavaScript
Executable file
/* global AudioMetadata, ForwardLock, LazyLoader */
|
|
/* exported ForwardLockMetadata */
|
|
'use strict';
|
|
|
|
/**
|
|
* Parse metadata for ForwardLocked files. Generally, this will forward on to
|
|
* the metadata parser for the underlying format.
|
|
*/
|
|
var ForwardLockMetadata = (function() {
|
|
|
|
/**
|
|
* Parse a file and return a Promise with the metadata.
|
|
*
|
|
* @param {BlobView} locked The audio file to parse.
|
|
* @return {Promise} A Promise returning the parsed metadata object.
|
|
*/
|
|
function parse(locked) {
|
|
return new Promise(function(resolve, reject) {
|
|
LazyLoader.load('/shared/js/omadrm/fl.js').then(() => {
|
|
ForwardLock.getKey(function(secret) {
|
|
ForwardLock.unlockBlob(secret, locked.blob, callback, reject);
|
|
|
|
function callback(unlocked, unlockedMetadata) {
|
|
// Now that we have the unlocked content of the locked file, pass it
|
|
// back to AudioMetadata.parse to get the metadata. When we're done,
|
|
// add some extra metadata to indicate that this is locked content
|
|
// (so it isn't shared) and to specify the vendor that locked it.
|
|
resolve(AudioMetadata.parse(unlocked).then(function(metadata) {
|
|
metadata.locked = true;
|
|
if (unlockedMetadata.vendor) {
|
|
metadata.vendor = unlockedMetadata.vendor;
|
|
}
|
|
if (!metadata.title) {
|
|
metadata.title = unlockedMetadata.name;
|
|
}
|
|
if (metadata.picture && metadata.picture.flavor === 'embedded') {
|
|
// Grab the slice for the embedded album art while we still have
|
|
// the decrypted blob to look at!
|
|
metadata.picture = {
|
|
flavor: 'unsynced',
|
|
blob: unlocked.slice(metadata.picture.start,
|
|
metadata.picture.end,
|
|
metadata.picture.type)
|
|
};
|
|
}
|
|
return metadata;
|
|
}));
|
|
}
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
return {
|
|
parse: parse
|
|
};
|
|
|
|
})();
|