Commit Graph

435 Commits

Author SHA1 Message Date
Brian Schrameck 30bb3f7b43
BPM metadata enhancement (#1087)
* BPM metadata enhancement

Related to #1036.

Adds BPM to the stored metadata about MediaFiles.

Displays BPM in the following locations:
- Listing songs in the song list (desktop, sortable)
- Listing songs in playlists (desktop, sortable)
- Listing songs in albums (desktop)
- Expanding song details

When listing, shows a blank field if no BPM is present. When showing song details, shows a question mark.

Updates test MP3 file to have BPM tag. Updated test to ensure tag is read correctly.

Updated localization files. Most languages just use "BPM" as discovered during research on Wikipedia. However, a couple use some different nomenclature. Spanish uses PPM and Japanese uses M.M.

* Enhances support for BPM metadata extraction

- Supports reading floating point BPM (still storing it as an integer) and FFmpeg as the extractor
- Replaces existing .ogg test file with one that shouldn't fail randomly
- Adds supporting tests for both FFmpeg and TagLib

* Addresses various issues with PR #1087.

- Adds index for BPM. Removes drop column as it's not supported by SQLite (duh).
- Removes localizations for BPM as those will be done in POEditor.
- Moves BPM before Comment in Song Details and removes BPM altogether if it's empty.
- Omits empty BPM in JSON responses, eliminating need for FunctionField.
- Fixes copy/paste error in ffmpeg_test.
2021-05-05 21:35:01 -04:00
Deluan b478b0af02 FIx ffmpeg output regex too rigid 2021-05-03 21:26:44 -04:00
Deluan c3316e201e Fix cover art detection with ffmpeg 4.4 2021-05-03 20:25:31 -04:00
Deluan 8a07bac2a2 Fix SIGUSR1 work when ScanInterval=0 2021-04-29 13:10:10 -04:00
whorfin 20d2726faa
Improve scanner (#1054)
* Handle subdirectories without rx permission correctly
Allow ogg files w/o metadata, having taglib behave more like ffmpeg

* Fix test for walk_dir_tree, fix full reading of files in permission-
constrained directories, allow directories with leading ellipses

* Sorted directory traversal is preferred, and cleanup tests

* Small refactoring to clean-up `loadDir` function and to remove some "warnings" from IntelliJ

Co-authored-by: Deluan <deluan@navidrome.org>
2021-04-28 19:51:02 -04:00
Deluan 0142352280 Fix build tag 2021-04-23 21:42:22 -04:00
Deluan d5c7a81888 Disable SIGUSR1 handler for Windows (not available) 2021-04-23 21:22:04 -04:00
Deluan 1e539f4e54 Add trigger scan when receiving SIGUSR1 signal 2021-04-23 20:40:28 -04:00
Deluan c33c71ae6d Comment out flaky tests 2021-03-22 09:52:29 -04:00
Deluan 720e2357b7 Add option to sort Recently Added by file's mtime instead of time of import. 2021-03-12 18:18:35 -05:00
Deluan 6ee45a9ccc Move project to Navidrome GitHub organization 2021-02-06 21:46:35 -05:00
Deluan c5686c4884 Replace periodic scanner cancellation channel with a context 2021-01-31 17:37:54 -05:00
Deluan 7c23bd0890 Fix log message, as it is also used for `taglib` 2020-12-25 12:45:38 -05:00
Deluan ea2f94658a Error should always be nil 2020-12-20 13:28:33 -05:00
Deluan a241865209 Add elapsed time when scanner does not detect any new changes 2020-12-13 20:48:16 -05:00
Deluan 8b92796a5c Disconnect the client if the output buffer fills up 2020-12-12 18:26:30 -05:00
Deluan 0cde8cbf2e Fix logging field case 2020-12-11 11:26:06 -05:00
Deluan f29bb211d1 Better termination handling in Scanner's progress 2020-11-25 19:05:36 -05:00
Deluan a1dcb9a4e3 Show folders scanned instead of files scanned 2020-11-16 00:36:12 -05:00
Deluan 7efc32d136 Ignore "Cover (front)" tag when using `ffmpeg` extractor 2020-11-12 23:17:06 -05:00
Deluan c09ba509b2 Fine tune scan status behaviour 2020-11-12 16:12:31 -05:00
Deluan 0e7163eb2c Sanitize comments and lyrics on import, as they are rendered as HTML on the UI 2020-11-11 12:26:47 -05:00
Deluan 98af68ac99 Import comments and lyrics 2020-11-11 10:43:17 -05:00
Deluan aee4eb71c4 Add support for multi-line tags 2020-11-11 09:45:46 -05:00
Deluan 714100e24b Remove old TODO 2020-11-09 19:50:14 -05:00
Deluan 2b1a5f579a Adding a communication channel between server and clients using SSE 2020-11-09 16:12:50 -05:00
Deluan 779d4a1c85 Revert "Process empty folders as changed folders"
This reverts commit e07152b695.
2020-11-02 07:57:47 -05:00
Deluan e07152b695 Process empty folders as changed folders
This is a workaround for rclone not changing the directory modtime when you delete all folders from it (happens when you are moveing things around with beets)
2020-11-01 23:25:34 -05:00
Deluan ee5a0698c0 Simplify scanner utilization 2020-11-01 18:37:17 -05:00
Deluan 8e584ee020 Update count on `getScanStatus` 2020-11-01 16:54:33 -05:00
Deluan 145a5708ca Stop tag_scanner when waltDirTree is interrupted by errors
Otherwise, tag_scanner remove tracks from folders that would come after the error
2020-10-31 00:06:28 -04:00
Deluan 84384da8d1 Better naming for function 2020-10-30 13:14:53 -04:00
Deluan 4d6c9482ff Recover from panic when reading invalid id2 tags
Workaround for #596
2020-10-30 09:53:38 -04:00
Deluan cdd44a2830 Abort scan when media folder is empty
This is to prevent all data being deleted in the case where a mount is not available
2020-10-30 09:39:36 -04:00
Deluan 00ec6cf042 Process changed folders as they are discovered 2020-10-29 23:47:43 -04:00
Deluan 2f394623c8 WIP 2020-10-29 23:19:26 -04:00
Deluan 464e251d19 Only start the cache warming after all folders were scanned 2020-10-27 20:11:25 -04:00
Deluan d0bf37a8a9 Move mock datastore to tests package 2020-10-27 15:23:49 -04:00
Deluan 1e56f4da76 Add simple cache warmer, disabled by default 2020-10-25 23:22:52 -04:00
Deluan 1cfa7b2272 Change MediaFolder.ID type to int32 2020-10-25 23:22:52 -04:00
Deluan af7eaa2b7a Add scanner status 2020-10-25 23:22:52 -04:00
Deluan 4514a54744 Fix ignoring hidden folders when scanning 2020-10-22 13:59:54 -04:00
Deluan b5e20c1934 Ignore invalid MBIDs (ex: discogs IDs) 2020-10-20 17:45:32 -04:00
Deluan 6663c079e0 Add MBIDs to media_file, album and artist 2020-10-20 16:27:22 -04:00
Deluan 26d2af17a3 Fix read `DISCNUMBER` as a DiscNumber tag in ffmpeg extractor 2020-10-06 17:06:47 -04:00
Deluan 665b1f6898 Fix auto-imported playlists losing the "Public" status. Fix #479 2020-10-05 12:40:44 -04:00
Deluan f859772723 Remove dangling tracks after changing MusicFolder. Fix #445 2020-10-02 16:18:45 -04:00
Fernando Rios 80b8b69cee Fix compilation of C++ code on certain linux systems 2020-09-26 13:08:28 -04:00
Deluan afe5a5b32a Fix extracting tags with spaces in the tagname ("Ex: Album Artist") 2020-09-22 14:42:36 -04:00
Deluan caeff2862a Remove dependency on C++17 2020-09-10 15:16:47 -04:00
Deluan a3ecc41e47 Change taglib extractor log level to trace 2020-09-08 13:33:07 -04:00
Deluan 4d18212f5d Extract all id3 frames from file 2020-09-08 13:33:07 -04:00
Deluan 5dea258058 Extract basic tags, as a fallback 2020-09-08 13:33:07 -04:00
Deluan 0802ab73d7 Trim tag value, not tag key 2020-09-08 13:33:07 -04:00
Deluan 865b9cd545 Trim spaces from tags 2020-09-08 13:33:07 -04:00
Deluan e70ec53983 Rewrite taglib integration, now with TCMP 2020-09-08 13:33:07 -04:00
Deluan 2d0031f709 Parse more date formats 2020-09-08 13:33:07 -04:00
Deluan 78ecda5239 Get the first occurrence of multi-valued tags 2020-09-08 13:33:07 -04:00
Deluan a1879ff871 Reorganize tests 2020-09-08 13:33:07 -04:00
Deluan 34eda3c8fc Add config option to select tag extractor (taglib, ffmpeg) 2020-09-08 13:33:07 -04:00
Deluan 506899b083 Add more fallback options for main tags 2020-09-08 13:33:07 -04:00
Deluan 3a4e2523dd Fix possible concurrency issue 2020-09-08 13:33:07 -04:00
Deluan 58a0c44600 Embed audiotags lib, to make it static compilable 2020-09-08 13:33:07 -04:00
Deluan df4328819d Initial implementation of `taglib` MetadataExtractor 2020-09-08 13:33:07 -04:00
Deluan 1187ee7cc1 Moved Metadata Extraction to its own package 2020-09-08 13:33:07 -04:00
Deluan 0beec552b1 Introduce Metadata and MetadataExtractor interfaces 2020-09-08 13:33:07 -04:00
Deluan 6820e120cb Test for accented article sanitization 2020-09-08 09:40:41 -04:00
Deluan 28aefb4858 Fix sanitizing accented articles 2020-09-08 09:36:08 -04:00
Deluan a45c08f217 Ignore "hidden" files when importing a folder 2020-08-21 11:50:18 -04:00
Deluan b836871161 Handle CR, LF and CRLF line endings when importing Playlists 2020-08-19 12:22:41 -04:00
Deluan 28d1428c90 Add option to disable .m3u auto-import 2020-08-02 23:17:13 -04:00
Deluan f29e1eb248 Remove repeated call 2020-08-02 15:19:42 -04:00
Deluan f992b5663f Remove old scanner 2020-07-27 12:34:44 -04:00
Deluan 4e4fcb2304 Small refactorings, better var/function names 2020-07-27 10:51:50 -04:00
Deluan 60178c264d Keep annotations if tracks were already in DB 2020-07-23 03:26:39 -04:00
Deluan 040c7f1e7d Add missing call to refresh artists 2020-07-22 15:37:24 -04:00
Deluan 036f9d6730 Flush albums and artists after each folder added/updated/deleted 2020-07-22 12:56:50 -04:00
Deluan f96e2f6c4f Process deleted folders even if there are no changed folders 2020-07-22 01:29:44 -04:00
Deluan 7a5285ae47 When deleting folders, only flush artists/albums after deleting the mediaFiles 2020-07-22 01:00:16 -04:00
Deluan ba347bc0b1 Detect moved folders 2020-07-22 00:42:12 -04:00
Deluan d268075046 Change the default scanner to use new implementation 2020-07-19 21:39:06 -04:00
Deluan feca030c6d Give warning when playlists are not imported due to not having an admin user 2020-07-19 13:58:46 -04:00
Deluan 6adba03868 Renamed misleading function name 2020-07-17 22:55:51 -04:00
Deluan 609d172259 Use first admin user for all scan operations 2020-07-17 22:55:51 -04:00
Deluan 9cf8c92cae Break up processChangedDir into smaller functions 2020-07-17 22:55:51 -04:00
Deluan 8f512a40f7 Refactored playlist auto-import support 2020-07-17 22:55:51 -04:00
Deluan b9b6ce066b Auto-Import playlists found in the Music Folder 2020-07-17 22:55:51 -04:00
Deluan 3239be4a4d Change log level of some scanner operations 2020-07-17 12:49:37 -04:00
Deluan 51c295d1de Add new scanner algorithm, can be enabled with DevNewScanner config option 2020-07-17 12:06:49 -04:00
Deluan de0cc1f268 Move LoadAllAudioFiles tests to the proper test file 2020-07-16 18:18:48 -04:00
Deluan e7f6ba8f35 Move LoadAllAudioFiles function to the right file 2020-07-16 17:42:26 -04:00
Deluan aae43f4452 Remove unneeded `\n` 2020-07-13 11:49:06 -04:00
Deluan d4347f20ae Remove redundant log message 2020-07-12 20:42:38 -04:00
Deluan ee0ae0a06c Fix lint errors 2020-07-12 13:36:22 -04:00
Deluan 064da8e034 Add more trace logging to scanner 2020-07-12 13:30:03 -04:00
Deluan c2f40ea8a3 Show totals at the end of scan 2020-07-12 12:35:23 -04:00
Deluan f694e471fb Make private types unexported 2020-07-12 11:55:19 -04:00
Deluan dc8368c89c Return counter from DeleteByPath 2020-07-12 11:53:07 -04:00
Deluan 2f8b01015d Change log level for "path unavailable" 2020-07-04 11:36:57 -04:00
Deluan 17830d63b4 Ignore m3u files when scanning 2020-07-03 21:06:33 -04:00
Deluan bcaf330233 Make sure to select cover art from media_file that has it. Fix #360 2020-06-27 22:16:07 -04:00
Deluan ab1c943d1f Force album/artist refresh when folder changes, to cater for cover art files 2020-06-27 18:41:55 -04:00
Deluan eb109ebeb4 Remove duplicated helper functions, move them to `utils` package 2020-06-24 20:48:42 -04:00
Deluan 653b5ea9d3 Replace map[string]bool with map[string]struct{} 2020-06-14 03:11:16 -04:00
Deluan e73b71aaf7 Remove tracks from DB that were deleted while Navidrome was not running. Fixes #151 2020-06-14 03:11:16 -04:00
Deluan 01919661e9 Skip unreadable directories. Fixes #328 2020-06-14 03:11:16 -04:00
Deluan 3190611ec8 Call `ffmpeg` in batches 2020-06-14 03:11:16 -04:00
Deluan 238020c839 Handle folders with lots of albums and/or artists 2020-06-14 03:11:16 -04:00
Deluan 17df63b550 Fix `child.size` and `directory.playCount` compatibility with Subsonic API. Fixes #304 2020-05-19 23:51:23 -04:00
Deluan a4183aea8c Unexport private functions 2020-05-18 15:06:33 -04:00
Deluan 9e845cb116 Skip scanning folders if they contain a `.ndignore` file. Closes #297 2020-05-18 14:37:01 -04:00
Deluan 5ce3135f00 Fix gosec's G601 2020-05-13 15:32:42 -04:00
Deluan 0d9361734f Import and display disc subtitles 2020-05-12 12:57:53 -04:00
Deluan 5862157a2c Move test file to fixtures folder 2020-04-28 11:59:47 -04:00
Deluan ddeefad501 Fix `goimport` and `gosec` warnings 2020-04-26 15:07:36 -04:00
Deluan 5cd453afeb Fix all `errcheck` warnings 2020-04-26 15:07:36 -04:00
Deluan 03c3c192ed Fixing static checks about passing nil context 2020-04-26 15:07:36 -04:00
Deluan 1dd3a794f8 Reduce level of "invalid year" log message 2020-04-24 16:00:14 -04:00
Deluan 6c5dd245fe Parse TSO2 (seems that ffmpeg does not process this tag in some situations) 2020-04-24 15:02:20 -04:00
Deluan 371e8ab6ca Generate Order Fields based on sanitized version of original fields 2020-04-24 15:02:20 -04:00
Deluan 69c19e946c Add sort tags and use them in search 2020-04-24 15:02:20 -04:00
Deluan d7edbf93f0 Make test more reliable
In some systems, it was detecting the `go.mod` file as an audio file, probably because of the system's mime-type configuration
2020-04-24 11:05:17 -04:00
Deluan 5a072fbd10 Follow symlinks to directories when scanning 2020-04-23 20:31:44 -04:00
jvoisin 2ab647efe1 Add a test 2020-04-11 13:08:21 -04:00
jvoisin 04eb421186 Refactor a bit how ffmpeg is used to get metadata
- createProbeCommand returns a []string instead of (string, string[])
- Simplify the loop of createProbeCommand
2020-04-11 13:08:21 -04:00
Deluan 7bc3dace4c Revert "Improve ffmpeg's error diagnostic"
This reverts commit 4fc88f23
2020-04-09 14:26:42 -04:00
jvoisin 4fc88f23e9 Improve ffmpeg's error diagnostic
This should close #155
2020-04-09 10:40:16 -04:00
Deluan 9b272c8021 Small log tweak 2020-04-06 14:02:50 -04:00
Deluan 59707b3a8f Detect embedded art in ogg containers 2020-04-05 23:41:10 -04:00
Deluan 9b461735f4 Add comments to createXxxxCommand functions to clarify about the filepaths arguments being absolute paths 2020-04-03 14:49:35 -04:00
Deluan 3d6ce8a77f Skip calling `ffmpeg` if there are no files to probe 2020-04-02 17:38:20 -04:00
Deluan dcb3b3b5d1 fix: various album_artists <-> artists mismatches 2020-03-26 09:08:53 -04:00
Deluan 100db2bcfd feat: add artist filter to album view 2020-03-25 20:40:18 -04:00
Deluan b4c7cac964 refactor: moved magic strings to consts 2020-03-24 11:59:10 -04:00
Deluan f6e448c1ba refactor: removed unused code, unnecessary typecasts and fixed small warnings 2020-03-20 00:07:36 -04:00
Deluan fc14e346b9 feat: store duration as float, to cater for milliseconds 2020-02-20 17:02:06 -05:00
Deluan 5525145906 fix: audio stream's bitrate has precedence over container's bitrate 2020-02-20 13:56:45 -05:00
Deluan 74d87790b8 refactor: better ffmpeg output metadata parsing 2020-02-20 10:41:16 -05:00
Deluan ae02dc203e chore: remove unused code 2020-02-19 09:08:05 -05:00
Deluan fc7595a464 fix: cover art detection regex 2020-02-18 11:19:22 -05:00
Deluan 4ceaea7732 fix: extract stream level metadata 2020-02-18 10:00:05 -05:00
Deluan 894536c8ec Revert "fix: extract stream level metadata"
This reverts commit 92f6e55821.
2020-02-15 23:18:37 -05:00
Deluan 92f6e55821 fix: extract stream level metadata 2020-02-15 20:47:06 -05:00
Deluan b2d022b823 fix: ignore environment dependant test 2020-02-13 20:19:51 -05:00
Deluan ba08f00c20 feat: make rescan faster, only loading metadata from changed files 2020-02-13 20:18:17 -05:00
Deluan d9993c5877 refactor: separate metadata extraction from audio files scanning 2020-02-13 10:03:52 -05:00
Deluan edb839a41d fix: only update artists and albums if there were any changes in files 2020-02-12 23:05:10 -05:00
Deluan 400fa65326 feat: better scanner logging when level = info 2020-02-08 23:36:09 -05:00
Deluan ab10719d27 fix: use a regex to match year in ffmpeg date field. close #63 2020-02-08 23:17:12 -05:00
Deluan e33d2305a1 feat: support multiple year formats in the `date` tag (#63) 2020-02-06 14:44:50 -05:00
Deluan 6e2454f6cc refactor: add -i to ffmpeg ProbeCommand. make it more consistent with the DownsampleCommand 2020-02-03 23:04:58 -05:00
Deluan 4d06d250e6 fix: relative path was not working for rootFolder started with '.' 2020-02-03 17:53:59 -05:00
Deluan 694b5d1d39 tests: change test folder permissions 2020-02-03 17:53:59 -05:00
Deluan 5329ac7b72 refactor: better format for list of folders 2020-02-03 17:53:59 -05:00
Deluan 464880dd31 refactor: use stdlib `filepath.FromSlash` 2020-02-03 17:53:59 -05:00
Deluan 0e01f9a0f9 fix: use filepath.Join instead of path.Join 2020-02-03 17:53:59 -05:00
Deluan de1fea64bc refactor: introduce GC, to delete old data 2020-02-01 17:23:03 -05:00
Deluan 71c1844bca refactor: new persistence, more SQL, less ORM 2020-02-01 17:23:03 -05:00
Deluan c9f5625abf fix: skip files with errors during scan 2020-02-01 11:25:31 -05:00
Deluan 0d2911daf9 refactor: add Context to the persistence layer 2020-01-27 09:41:33 -05:00
Deluan 0ff741b394 fix: persistence tests were not being properly initialized 2020-01-26 17:10:13 -05:00
Deluan 461b7424e9 Ignore case in extracted tags 2020-01-24 09:46:59 -05:00
Deluan bff6f3a4bd Rename env vars prefix to ND_ 2020-01-24 01:29:31 -05:00
Deluan bee55c04c8 Rename project to Navidrome 2020-01-23 19:44:08 -05:00
Deluan 9557f7ceed Initial support for song browsing from UI 2020-01-22 10:47:43 -05:00
Deluan e03304650d Fix compilation tag, again 2020-01-21 22:41:18 -05:00
Deluan 654831f79d Fix bug in `compilation` tag parsing 2020-01-21 17:31:24 -05:00
Deluan 3a44f37622 Add comment tag, still missing multiline comments 2020-01-21 10:05:00 -05:00
Deluan 22a0b7e170 Don't override input tags with stream tags 2020-01-21 09:52:34 -05:00
Deluan c42e1bd2f5 Extract metadata from files in a directory in batch (one call to ffmpeg for all files) 2020-01-21 07:50:30 -05:00
Deluan 7529ae3752 Extract metadata with `ffmpeg` 2020-01-20 22:32:40 -05:00
Deluan c6ed0d5377 Remove flag to allow override media annotation 2020-01-20 18:19:16 -05:00
Deluan 67eeb218c4 Big Refactor:
- Create model.DataStore, with provision for transactions
- Change all layers dependencies on repositories to use DataStore
- Implemented persistence.SQLStore
- Removed iTunes Bridge/Importer support
2020-01-19 16:28:09 -05:00
Deluan fe058aa4a1 Don't override media annotations when scanning/importing 2020-01-18 21:45:44 -05:00
Deluan a4b75fd69d Test "Compilation" tag 2020-01-18 11:19:00 -05:00
Deluan 58a080eded Handle folder moves in Scanner 2020-01-18 11:00:20 -05:00
Deluan ccbdf688ea Reduced size of batches, to not break SQLite 2020-01-18 01:49:08 -05:00
Deluan 1929aaec1a Disabling tests that are not multi-platform, for now 2020-01-18 00:08:00 -05:00
Deluan 73597b22b4 Rewrite description of folder scan algorithm 2020-01-17 23:55:58 -05:00
Deluan 54d13d2022 Purge empty albums/artists 2020-01-17 23:28:11 -05:00
Deluan ea9ed4a287 Fix ChangeDetector to keep the dirMap from last scan 2020-01-17 22:41:10 -05:00
Deluan e55dfff485 Fix file descriptor leak 2020-01-17 21:23:26 -05:00
Deluan c0beaa6377 Integrate ArtistIndex logic into Artist 2020-01-17 20:54:28 -05:00
Deluan 123f543a94 New Folder Scanner - WIP 2020-01-17 20:54:28 -05:00
Deluan 25686c1742 Preparing for new scanner 2020-01-14 21:51:35 -05:00
Deluan a99c3a8af3 Another big refactor: Back to a single folder for persistence implementation 2020-01-14 18:47:57 -05:00
Deluan 614f4afe28 Implement Artist search with SQL, removed old search/indexer code 2020-01-13 16:06:30 -05:00
Deluan 28ee1f195c More logging in the Importer 2020-01-11 15:27:32 -05:00
Deluan c9be5f7201 Storm ChecksumsRepository complete. 2020-01-11 15:27:32 -05:00
Deluan 11f4505925 Renamed persistence packages 2020-01-11 15:27:32 -05:00
Deluan 0ca691b37f Storm ArtistRepository and PropertyRepository complete. 2020-01-11 15:27:32 -05:00
Deluan 40904b220e Renamed Id to ID, following GoLang convention 2020-01-11 15:27:32 -05:00
Deluan a4a8360a94 Add Dev flag to disable file presence verification 2020-01-11 15:27:32 -05:00
Deluan 24cbf766a3 Removed dependency on `engine` from `persistence` 2020-01-09 22:44:45 -05:00
Deluan 84d69a4f41 Replaced Beego logging 2020-01-09 22:44:45 -05:00
Deluan 3af9972b41 Remove Beego tasks, make Importer available through DI 2020-01-09 22:44:45 -05:00
Deluan 4c61ac3272 Fix default PlsIgnoredPatterns configuration 2020-01-06 15:17:44 -05:00
Deluan 9260a8b9ed Changes to itl were merged, reverting to the original repo 2017-04-01 09:51:25 -04:00
Deluan c417a00e62 Renamed project to CloudSonic 2017-04-01 09:47:14 -04:00
Deluan a7ccd76d54 Allowing album cover ids with prefix (al-) 2016-03-30 10:01:37 -04:00