@@ -121,17 +121,11 @@ export class Album extends Thing {
121
121
commentary : commentary ( ) ,
122
122
additionalFiles : additionalFiles ( ) ,
123
123
124
- trackSections : {
125
- flags : { update : true , expose : true } ,
126
-
127
- update : {
128
- validate :
129
- validateWikiData ( {
130
- referenceType :
131
- TrackSection [ Thing . referenceType ] ,
132
- } ) ,
133
- } ,
134
- } ,
124
+ trackSections : referenceList ( {
125
+ referenceType : input . value ( 'unqualified-track-section' ) ,
126
+ data : 'ownTrackSectionData' ,
127
+ find : input . value ( find . unqualifiedTrackSection ) ,
128
+ } ) ,
135
129
136
130
artistContribs : contributionList ( ) ,
137
131
coverArtistContribs : contributionList ( ) ,
@@ -172,6 +166,10 @@ export class Album extends Thing {
172
166
class : input . value ( Group ) ,
173
167
} ) ,
174
168
169
+ ownTrackSectionData : wikiData ( {
170
+ class : input . value ( TrackSection ) ,
171
+ } ) ,
172
+
175
173
// Expose only
176
174
177
175
commentatorArtists : commentatorArtists ( ) ,
@@ -360,6 +358,7 @@ export class Album extends Thing {
360
358
361
359
save ( results ) {
362
360
const albumData = [ ] ;
361
+ const trackSectionData = [ ] ;
363
362
const trackData = [ ] ;
364
363
365
364
for ( const { header : album , entries} of results ) {
@@ -376,7 +375,10 @@ export class Album extends Thing {
376
375
const albumRef = Thing . getReference ( album ) ;
377
376
378
377
const closeCurrentTrackSection = ( ) => {
379
- if ( empty ( currentTrackSectionTracks ) ) {
378
+ if (
379
+ currentTrackSection . isDefaultTrackSection &&
380
+ empty ( currentTrackSectionTracks )
381
+ ) {
380
382
return ;
381
383
}
382
384
@@ -391,6 +393,7 @@ export class Album extends Thing {
391
393
[ album ] ;
392
394
393
395
trackSections . push ( currentTrackSection ) ;
396
+ trackSectionData . push ( currentTrackSection ) ;
394
397
} ;
395
398
396
399
for ( const entry of entries ) {
@@ -402,7 +405,6 @@ export class Album extends Thing {
402
405
}
403
406
404
407
currentTrackSectionTracks . push ( entry ) ;
405
-
406
408
trackData . push ( entry ) ;
407
409
408
410
entry . dataSourceAlbum = albumRef ;
@@ -412,10 +414,16 @@ export class Album extends Thing {
412
414
413
415
albumData . push ( album ) ;
414
416
415
- album . trackSections = trackSections ;
417
+ album . trackSections =
418
+ trackSections
419
+ . map ( trackSection =>
420
+ `unqualified-track-section:` +
421
+ trackSection . unqualifiedDirectory ) ;
422
+
423
+ album . ownTrackSectionData = trackSections ;
416
424
}
417
425
418
- return { albumData, trackData} ;
426
+ return { albumData, trackSectionData , trackData} ;
419
427
} ,
420
428
421
429
sort ( { albumData, trackData} ) {
@@ -478,6 +486,34 @@ export class TrackSection extends Thing {
478
486
479
487
// Expose only
480
488
489
+ directory : [
490
+ withAlbum ( ) ,
491
+
492
+ exitWithoutDependency ( {
493
+ dependency : '#album' ,
494
+ } ) ,
495
+
496
+ withPropertyFromObject ( {
497
+ object : '#album' ,
498
+ property : input . value ( 'directory' ) ,
499
+ } ) ,
500
+
501
+ withDirectory ( {
502
+ directory : 'unqualifiedDirectory' ,
503
+ } ) . outputs ( {
504
+ '#directory' : '#unqualifiedDirectory' ,
505
+ } ) ,
506
+
507
+ {
508
+ dependencies : [ '#album.directory' , '#unqualifiedDirectory' ] ,
509
+ compute : ( {
510
+ [ '#album.directory' ] : albumDirectory ,
511
+ [ '#unqualifiedDirectory' ] : unqualifiedDirectory ,
512
+ } ) =>
513
+ albumDirectory + '/' + unqualifiedDirectory ,
514
+ } ,
515
+ ] ,
516
+
481
517
startIndex : [
482
518
withAlbum ( ) ,
483
519
@@ -517,6 +553,20 @@ export class TrackSection extends Thing {
517
553
] ,
518
554
} ) ;
519
555
556
+ static [ Thing . findSpecs ] = {
557
+ trackSection : {
558
+ referenceTypes : [ 'track-section' ] ,
559
+ bindTo : 'trackSectionData' ,
560
+ } ,
561
+
562
+ unqualifiedTrackSection : {
563
+ referenceTypes : [ 'unqualified-track-section' ] ,
564
+
565
+ getMatchableDirectories : trackSection =>
566
+ [ trackSection . unqualifiedDirectory ] ,
567
+ } ,
568
+ } ;
569
+
520
570
static [ Thing . yamlDocumentSpec ] = {
521
571
fields : {
522
572
'Section' : { property : 'name' } ,
0 commit comments