Music Library Index
Given track metadata objects, constructs a searchable object model. This module is used both in the client and the server of Groove Basin.
Features
- Sort order ignores 'a', 'an' and 'the' in artists, albums, and names.
- Sorting and searching is case insensitive and diacritics-insensitive.
- Searching uses word-based filtering (this is how most music player applications implement filtering) on all track fields.
- Distinguishes albums by name, date, and album artist.
- Produces these indexes:
- Artists in sorted order
- For each of these artists, albums in sorted order.
- For each of these albums, tracks in sorted order.
- For each of these artists, albums in sorted order.
- Albums in sorted order
- For each of these albums, tracks in sorted order.
- Tracks by user-defined key.
- Artists by library-defined key.
- Albums by library-defined key.
- Artists in sorted order
- Searching allows the use of special constructs:
- Quoted terms (
"..."
) exactly match every character, including spaces, upper- and lower-case letters, and characters with diacritics. Inside quotes, use\"
for a literal quote and\\
for a literal backslash. - Terms starting with
not:
match anything not matched by the rest of the term. For examplemetal not:metalica
orjust not:"Justin Bieber"
. - Parentheses can be used to group terms. For example
tool not:(opiate live)
. - Use
or:(...)
to match any of the terms in the parentheses. For exampleor:(chopin mozart bach)
. Use further nested parentheses to return to "and"-style matching. For exampleor:(chopin mozart (johann sebastian bach))
.
- Quoted terms (
Usage
var MusicLibraryIndex = ;var library = ; library; library; library; library; library; console;console;
Tests
basic index building
✓ trackTable
✓ artistList
✓ albumList
✓ searching
compilation album
✓ filed in various artists
tracks from same album missing year metadata
✓ still knows they're in the same album
different albums with same name
✓ detects that they are different
album with a few tracks by different artists
✓ only creates one album
album by an artist
✓ should be filed under the artist
album by an artist
✓ sorts by disc before track
album artist with no album
✓ shouldn't be various artists
unknown artist, unknown album
✓ should be put into the same album
✓ searching should not affect anything
album with album artist
✓ shouldn't be various artists