diff --git a/mb-reledit-guess_works.user.js b/mb-reledit-guess_works.user.js index 7958ea9..08727dd 100644 --- a/mb-reledit-guess_works.user.js +++ b/mb-reledit-guess_works.user.js @@ -4,7 +4,7 @@ // @name MusicBrainz relation editor: Guess related works in batch // @namespace mbz-loujine // @author loujine -// @version 2023.3.6 +// @version 2023.3.12 // @downloadURL https://raw.githubusercontent.com/loujine/musicbrainz-scripts/master/mb-reledit-guess_works.user.js // @updateURL https://raw.githubusercontent.com/loujine/musicbrainz-scripts/master/mb-reledit-guess_works.user.js // @supportURL https://github.com/loujine/musicbrainz-scripts @@ -28,8 +28,12 @@ const repeatHelp = `Ways to associate subworks SW1, SW2, SW3... with selected tr const setWork = async (recording, work, partial) => { const medium = MB.relationshipEditor.state.mediumsByRecordingId.get(recording.id)[0]; - const mediumIdx = medium.position - 1; - const trackIdx = medium.tracks.filter(t => t.recording.id === recording.id)[0].position -1; + const tracks = medium.tracks + // if medium was unfolded manually, medium.tracks stays empty + // but relEditor.state.loadedTracks has the new data + ? medium.tracks + : MB.relationshipEditor.state.loadedTracks.get(medium.position); + const track = tracks.filter(t => t.recording.id === recording.id)[0]; await helper.waitFor(() => !MB.relationshipEditor.relationshipDialogDispatch, 1); MB.relationshipEditor.dispatch({ @@ -38,7 +42,7 @@ const setWork = async (recording, work, partial) => { batchSelection: false, source: recording, targetType: 'work', - track: MB.relationshipEditor.state.entity.mediums[mediumIdx].tracks[trackIdx], + track: track, }, }); await helper.waitFor(() => !!MB.relationshipEditor.relationshipDialogDispatch, 1); diff --git a/mbz-loujine-common.js b/mbz-loujine-common.js index f6654db..fed41fd 100644 --- a/mbz-loujine-common.js +++ b/mbz-loujine-common.js @@ -4,7 +4,7 @@ // @name mbz-loujine-common // @namespace mbz-loujine // @author loujine -// @version 2023.3.9 +// @version 2023.3.12 // @description musicbrainz.org: common functions // @compatible firefox+greasemonkey // @license MIT @@ -882,7 +882,13 @@ class RelationshipEditor { // sort recordings by order in tracklist to avoid having the dialog jump everywhere const recOrder = MB.getSourceEntityInstance().mediums.flatMap( + // tracks on mediums 1-10 loaded by default m => m.tracks + ).concat( + // tracks on unfolded mediums + Array.from(MB.relationshipEditor.state.loadedTracks.keys()).sort().flatMap( + k => MB.relationshipEditor.state.loadedTracks.get(k) + ) ).map(t => t.recording.id); recordings.sort((r1, r2) => recOrder.indexOf(r1.id) - recOrder.indexOf(r2.id)); return recordings;