Skip to content

Commit 77b3700

Browse files
fix: apply roborev fix for 9d3c59c (job #20)
1 parent 9d3c59c commit 77b3700

3 files changed

Lines changed: 37 additions & 25 deletions

File tree

app/frontend/__tests__/artist-utils.test.js

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@
99
*/
1010

1111
import { describe, it, expect } from 'vitest';
12-
import { groupTracksIntoAlbums } from '../js/utils/artist-utils.js';
12+
import {
13+
groupTracksIntoAlbums,
14+
parseDiscNumber,
15+
parseTrackNumber,
16+
} from '../js/utils/artist-utils.js';
1317

1418
function createMockTrack(id, overrides = {}) {
1519
return {
@@ -28,14 +32,6 @@ function createMockTrack(id, overrides = {}) {
2832
};
2933
}
3034

31-
function parseDiscNumber(val) {
32-
return parseInt(String(val || '1').split('/')[0], 10) || 1;
33-
}
34-
35-
function parseTrackNumber(val) {
36-
return parseInt(String(val || '').split('/')[0], 10) || 999999;
37-
}
38-
3935
describe('groupTracksIntoAlbums', () => {
4036
describe('album sorting by year', () => {
4137
it('sorts albums by year ascending (oldest first)', () => {

app/frontend/js/components/artists-browser.js

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import {
44
buildArtistDisplayNames,
55
buildCanonicalArtistMap,
66
groupTracksIntoAlbums,
7+
parseDiscNumber,
8+
parseTrackNumber,
79
} from '../utils/artist-utils.js';
810
import { handleDoubleClickPlay } from '../utils/queue-builder.js';
911
import { singleTrackContextMenuMixin } from '../mixins/single-track-context-menu.js';
@@ -155,14 +157,6 @@ export function createArtistsBrowser(Alpine) {
155157
return str;
156158
},
157159

158-
_parseDiscNumber(val) {
159-
return parseInt(String(val || '1').split('/')[0], 10) || 1;
160-
},
161-
162-
_parseTrackNumber(val) {
163-
return parseInt(String(val || '').split('/')[0], 10) || 999999;
164-
},
165-
166160
get selectedArtistTracks() {
167161
if (!this.selectedArtist) return [];
168162
const canonicalMap = this._canonicalArtistMap;
@@ -189,19 +183,19 @@ export function createArtistsBrowser(Alpine) {
189183
.sort((a, b) => {
190184
const albumCmp = (a.album || '').localeCompare(b.album || '');
191185
if (albumCmp !== 0) return albumCmp;
192-
const discCmp = this._parseDiscNumber(a.disc_number) -
193-
this._parseDiscNumber(b.disc_number);
186+
const discCmp = parseDiscNumber(a.disc_number) -
187+
parseDiscNumber(b.disc_number);
194188
if (discCmp !== 0) return discCmp;
195-
return this._parseTrackNumber(a.track_number) -
196-
this._parseTrackNumber(b.track_number);
189+
return parseTrackNumber(a.track_number) -
190+
parseTrackNumber(b.track_number);
197191
});
198192
},
199193

200194
get selectedArtistAlbums() {
201195
return groupTracksIntoAlbums(
202196
this.selectedArtistTracks,
203-
this._parseDiscNumber,
204-
this._parseTrackNumber,
197+
parseDiscNumber,
198+
parseTrackNumber,
205199
);
206200
},
207201

app/frontend/js/utils/artist-utils.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,28 @@ export function buildArtistDisplayNames(tracks, canonicalMap) {
9090
return displayMap;
9191
}
9292

93+
/**
94+
* Parse a disc number value, handling "X/Y" format.
95+
* Returns 1 for missing or unparseable values.
96+
*
97+
* @param {*} val - Raw disc number from track metadata
98+
* @returns {number}
99+
*/
100+
export function parseDiscNumber(val) {
101+
return parseInt(String(val || '1').split('/')[0], 10) || 1;
102+
}
103+
104+
/**
105+
* Parse a track number value, handling "X/Y" format.
106+
* Returns 999999 for missing or unparseable values (sorts to end).
107+
*
108+
* @param {*} val - Raw track number from track metadata
109+
* @returns {number}
110+
*/
111+
export function parseTrackNumber(val) {
112+
return parseInt(String(val || '').split('/')[0], 10) || 999999;
113+
}
114+
93115
/**
94116
* Group sorted tracks into album objects with per-album track sorting.
95117
*
@@ -143,8 +165,8 @@ export function groupTracksIntoAlbums(tracks, parseDiscNumber, parseTrackNumber)
143165
}
144166

145167
return Object.values(albumMap).sort((a, b) => {
146-
const yearA = parseInt(a.year) || 0;
147-
const yearB = parseInt(b.year) || 0;
168+
const yearA = parseInt(a.year, 10) || 0;
169+
const yearB = parseInt(b.year, 10) || 0;
148170
// Albums without year go to end
149171
if (yearA === 0 && yearB !== 0) return 1;
150172
if (yearA !== 0 && yearB === 0) return -1;

0 commit comments

Comments
 (0)