@@ -13,55 +13,59 @@ export class MediaCollection {
13
13
}
14
14
15
15
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 ) ;
19
18
}
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 ) ;
23
21
}
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 ) ;
28
24
}
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 ) ;
31
27
}
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 ( ) ) ;
42
29
}
43
30
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
+ ) ,
47
39
) ;
48
40
}
49
41
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 ) ,
53
45
) ;
54
46
}
55
47
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 ) ) ;
58
50
}
59
51
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
+ ) ,
63
62
) ;
64
63
}
64
+
65
+ private getItems ( ) : readonly MediaItem [ ] {
66
+ return [ ...this . items . values ( ) ] ;
67
+ }
68
+
65
69
getInfo ( ) {
66
70
return {
67
71
getItems : ( ) => [ ...this . items ] as readonly [ string , MediaItem ] [ ] ,
0 commit comments