@@ -13,55 +13,59 @@ export class MediaCollection {
1313 }
1414
1515 search ( criteria ?: SearchCriteria ) : ReadonlySet < MediaItem > {
16- const items = [ ...this . items . values ( ) ] ;
17- if ( ! criteria ) {
18- return new Set ( items ) ;
16+ if ( criteria ?. title ) {
17+ return this . searchByTitle ( criteria . title ) ;
1918 }
20- const title = criteria . title ;
21- if ( title ) {
22- return new Set ( items . filter ( ( item ) => item . getTitle ( ) . includes ( title ) ) ) ;
19+ if ( criteria ?. releaseYear ) {
20+ return this . searchByReleaseYear ( criteria . releaseYear ) ;
2321 }
24- if ( criteria . releaseYear ) {
25- return new Set (
26- items . filter ( ( item ) => item . getReleaseYear ( ) === criteria . releaseYear ) ,
27- ) ;
22+ if ( criteria ?. type ) {
23+ return this . searchByType ( criteria . type ) ;
2824 }
29- if ( criteria . type ) {
30- return new Set ( items . filter ( ( item ) => item . getType ( ) === criteria . type ) ) ;
25+ if ( criteria ?. creditName ) {
26+ return this . searchByCreditName ( criteria . creditName ) ;
3127 }
32- if ( criteria . creditName ) {
33- return new Set (
34- items . filter ( ( item ) =>
35- [ ...item . getCredits ( ) ] . some (
36- ( credit ) => credit . name === criteria . creditName ,
37- ) ,
38- ) ,
39- ) ;
40- }
41- return new Set ( items ) ;
28+ return new Set ( this . getItems ( ) ) ;
4229 }
4330
44- searchByTitle ( title : string ) : MediaItem [ ] {
45- return [ ...this . items . values ( ) ] . filter ( ( item ) =>
46- item . getTitle ( ) . includes ( title ) ,
31+ searchByTitle ( title : string ) : ReadonlySet < MediaItem > {
32+ return new Set (
33+ this . getItems ( ) . filter ( ( item ) =>
34+ item
35+ . getTitle ( )
36+ . toLowerCase ( )
37+ . includes ( title ?. toLowerCase ( ) ?? '' ) ,
38+ ) ,
4739 ) ;
4840 }
4941
50- searchByReleaseYear ( releaseYear : number ) : MediaItem [ ] {
51- return [ ... this . items . values ( ) ] . filter (
52- ( item ) => item . getReleaseYear ( ) === releaseYear ,
42+ searchByReleaseYear ( releaseYear : number ) : ReadonlySet < MediaItem > {
43+ return new Set (
44+ this . getItems ( ) . filter ( ( item ) => item . getReleaseYear ( ) === releaseYear ) ,
5345 ) ;
5446 }
5547
56- searchByType ( type : string ) : MediaItem [ ] {
57- return [ ... this . items . values ( ) ] . filter ( ( item ) => item . getType ( ) === type ) ;
48+ searchByType ( type : string ) : ReadonlySet < MediaItem > {
49+ return new Set ( this . getItems ( ) . filter ( ( item ) => item . getType ( ) === type ) ) ;
5850 }
5951
60- searchByCreditName ( name : string ) : MediaItem [ ] {
61- return [ ...this . items . values ( ) ] . filter ( ( item ) =>
62- [ ...item . getCredits ( ) ] . some ( ( credit ) => credit . name === name ) ,
52+ searchByCreditName ( name : string ) : ReadonlySet < MediaItem > {
53+ return new Set (
54+ this . getItems ( ) . filter ( ( item ) =>
55+ item . getCredits ( ) . some ( ( credit ) =>
56+ credit
57+ . getName ( )
58+ . toLowerCase ( )
59+ . includes ( name ?. toLowerCase ( ) ?? '' ) ,
60+ ) ,
61+ ) ,
6362 ) ;
6463 }
64+
65+ private getItems ( ) : readonly MediaItem [ ] {
66+ return [ ...this . items . values ( ) ] ;
67+ }
68+
6569 getInfo ( ) {
6670 return {
6771 getItems : ( ) => [ ...this . items ] as readonly [ string , MediaItem ] [ ] ,
0 commit comments