Skip to content

Commit cc29bbe

Browse files
committed
Migrate music-metadata-browser to music-metadata
1 parent a6b6e3e commit cc29bbe

File tree

3 files changed

+40
-44
lines changed

3 files changed

+40
-44
lines changed

package.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,13 @@
1212
},
1313
"devDependencies": {
1414
"audiomotion-analyzer": "^4.5.1",
15-
"buffer": "^6.0.3",
1615
"css-loader": "^7.1.2",
1716
"css-minimizer-webpack-plugin": "^7.0.0",
1817
"http-server": "^14.1.1",
1918
"idb-keyval": "^6.2.1",
2019
"mini-css-extract-plugin": "^2.9.0",
21-
"music-metadata-browser": "^2.5.10",
20+
"music-metadata": "^11.7.0",
2221
"notie": "^4.3.1",
23-
"process": "^0.11.10",
2422
"sortablejs": "^1.15.2",
2523
"style-loader": "^4.0.0",
2624
"webpack": "^5.91.0",

src/index.js

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import AudioMotionAnalyzer from 'audiomotion-analyzer';
3333
import packageJson from '../package.json';
3434
import * as fileExplorer from './file-explorer.js';
35-
import * as mm from 'music-metadata-browser';
35+
import {parseBlob, parseBuffer, parseWebStream} from 'music-metadata';
3636
import './scrollIntoViewIfNeeded-polyfill.js';
3737
import { get, set, del } from 'idb-keyval';
3838

@@ -2120,7 +2120,8 @@ function loadGradientIntoCurrentGradient(gradientKey) {
21202120
/**
21212121
* Load a music file from the user's computer
21222122
*/
2123-
function loadLocalFile( obj ) {
2123+
async function loadLocalFile( obj ) {
2124+
21242125
const fileBlob = obj.files[0];
21252126

21262127
if ( fileBlob ) {
@@ -2129,11 +2130,14 @@ function loadLocalFile( obj ) {
21292130
audioEl.dataset.file = fileBlob.name;
21302131
audioEl.dataset.title = parsePath( fileBlob.name ).baseName;
21312132

2132-
// load and play
2133-
loadFileBlob( fileBlob, audioEl, true )
2134-
.then( url => mm.fetchFromUrl( url ) )
2135-
.then( metadata => addMetadata( metadata, audioEl ) )
2136-
.catch( e => {} );
2133+
try {
2134+
await loadFileBlob( fileBlob, audioEl, true );
2135+
// Maybe do this parallel?
2136+
const metadata = await parseBlob( fileBlob );
2137+
await addMetadata( metadata, audioEl );
2138+
} catch( error ) {
2139+
consoleLog("Failed to load local file", error);
2140+
}
21372141
}
21382142
}
21392143

@@ -3306,47 +3310,45 @@ async function retrieveMetadata() {
33063310

33073311
if ( queueItem ) {
33083312

3309-
let uri = queueItem.dataset.file,
3310-
revoke = false;
3313+
let uri = queueItem.dataset.file;
3314+
let file;
33113315

33123316
waitingMetadata++;
33133317
delete queueItem.dataset.retrieve;
3318+
let metadata;
33143319

3315-
queryMetadata: {
3316-
if ( queueItem.handle ) {
3317-
try {
3318-
if ( await queueItem.handle.requestPermission() != 'granted' )
3319-
break queryMetadata;
3320+
if ( queueItem.handle ) {
3321+
// Fetch metadata from File object
3322+
if ( await queueItem.handle.requestPermission() !== 'granted' )
3323+
return;
33203324

3321-
uri = URL.createObjectURL( await queueItem.handle.getFile() );
3322-
revoke = true;
3323-
}
3324-
catch( e ) {
3325-
break queryMetadata;
3326-
}
3325+
file = await queueItem.handle.getFile();
3326+
uri = URL.createObjectURL( file );
3327+
metadata = await parseBlob( file );
3328+
} else {
3329+
// Fetch metadata from URI
3330+
const response = await fetch(uri);
3331+
if (response.body && typeof response.body.getReader === 'function') {
3332+
metadata = await parseWebStream( response.body, { skipPostHeaders: true } );
3333+
} else {
3334+
// Fallback for Safari, as readable byte streams are not supported by Safari
3335+
metadata = await parseBlob( await response.blob());
33273336
}
3337+
}
33283338

3329-
try {
3330-
const metadata = await mm.fetchFromUrl( uri, { skipPostHeaders: true } );
3331-
if ( metadata ) {
3332-
addMetadata( metadata, queueItem ); // add metadata to play queue item
3333-
syncMetadataToAudioElements( queueItem );
3334-
if ( ! ( metadata.common.picture && metadata.common.picture.length ) ) {
3335-
getFolderCover( queueItem ).then( cover => {
3336-
queueItem.dataset.cover = cover;
3337-
syncMetadataToAudioElements( queueItem );
3338-
});
3339-
}
3340-
}
3341-
}
3342-
catch( e ) {}
3339+
addMetadata( metadata, queueItem ); // add metadata to play queue item
3340+
syncMetadataToAudioElements( queueItem );
3341+
if ( ! queueItem.handle && ! ( metadata.common.picture && metadata.common.picture.length ) ) {
3342+
queueItem.dataset.cover = await getFolderCover( uri );
3343+
syncMetadataToAudioElements( queueItem );
3344+
}
33433345

3344-
if ( revoke )
3345-
URL.revokeObjectURL( uri );
3346+
if ( file ) {
3347+
URL.revokeObjectURL( uri );
33463348
}
33473349

33483350
waitingMetadata--;
3349-
retrieveMetadata(); // call again to continue processing the queue
3351+
await retrieveMetadata(); // call again to continue processing the queue
33503352
}
33513353
}
33523354

webpack.config.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,6 @@ module.exports = {
3636
new MiniCssExtractPlugin({
3737
filename: 'styles.css',
3838
}),
39-
new webpack.ProvidePlugin({
40-
Buffer: ['buffer', 'Buffer'],
41-
process: 'process/browser.js',
42-
}),
4339
],
4440
output: {
4541
filename: pathData => {

0 commit comments

Comments
 (0)