Deluan Quintão and GitHub
4ddb0774ec
perf(artwork): improve image serving performance with WebP encoding and optimized pipeline ( #5181 )
...
* test(artwork): add benchmark helpers for generating test images
* test(artwork): add image decode benchmarks for JPEG/PNG at various sizes
* test(artwork): add image resize benchmarks for Lanczos at various sizes
* test(artwork): add image encode benchmarks for JPEG quality levels and PNG
* test(artwork): add full resize pipeline benchmark (decode+resize+encode)
* test(artwork): add tag extraction benchmark for embedded art
* test(cache): add file cache benchmarks for read, write, and concurrent access
* test(artwork): add E2E benchmarks for artwork.Get with cache on/off and concurrency
* fix(test): use absolute path for tag extraction benchmark fixture
* test(artwork): add resize alternatives benchmark comparing resamplers
* perf(artwork): switch to CatmullRom resampler and JPEG for square images
Replace imaging.Lanczos with imaging.CatmullRom for image resizing
(30% faster, indistinguishable quality at thumbnail sizes). Stop forcing
PNG encoding for square images when the source is JPEG — JPEG is smaller
and faster to encode. Square images from JPEG sources went from 52ms to
10ms (80% improvement). Add sync.Pool for encode buffers to reduce GC
pressure under concurrent load.
* perf(artwork): increase cache warmer concurrency from 2 to 4 workers
Resize is CPU-bound, so more workers improve throughput on multi-core
systems. Doubled worker count to better utilize available cores during
background cache warming.
* perf(artwork): switch to xdraw.ApproxBiLinear and always encode as JPEG
Replace disintegration/imaging with golang.org/x/image/draw for image
resizing. This eliminates ~92K allocations per resize (from imaging's
internal goroutine parallelism) down to ~20, reducing GC pressure under
concurrent load.
Always encode resized artwork as JPEG regardless of source format, since
cover art doesn't need transparency. This is ~5x faster than PNG encode
and produces much smaller output (e.g. 18KB JPEG vs 124KB PNG).
* perf(artwork): skip external API call when artist image URL is cached
ArtistImage() was always calling the external agent (Spotify/Last.fm)
to get the image URL, even when the artist already had URLs stored in
the database. This caused every artist image request to block on an
external API call, creating severe serialization when loading artist
grids (5-20 seconds for the first page).
Now use the stored URL directly when available. Artists with no stored
URL still fetch synchronously. Background refresh via UpdateArtistInfo
handles TTL-based URL updates.
* perf(artwork): increase getCoverArt throttle from NumCPU/3 to NumCPU
The previous default of max(2, NumCPU/3) was too aggressive for artist
images which are I/O-bound (downloading from external CDNs), not
CPU-bound. On an 8-core machine this meant only 2 concurrent requests,
causing a staircase pattern where 12 images took ~2.4s wall-clock.
Bumping to max(4, NumCPU) cuts wall-clock time by ~50% for artist image
grids while still preventing unbounded concurrency for CPU-bound resizes.
* perf(artwork): encode resized images as WebP instead of JPEG
Switch from JPEG to WebP encoding for resized artwork using gen2brain/webp
(libwebp via WASM, no CGo). WebP produces ~74% smaller output at the same
quality with only ~25% slower full-pipeline encode time (cached, so only
paid once per artwork+size).
Use NRGBA image type to preserve alpha channel in WebP output, and
transparent padding for square canvas instead of black.
Also removes the disintegration/imaging dependency entirely by replacing
imaging.Fill in playlist tile generation with a custom fillCenter function
using xdraw.ApproxBiLinear.
* perf(artwork): switch from ApproxBiLinear to BiLinear scaling for improved image processing
Signed-off-by: Deluan <[email protected] >
* refactor(configuration): rename CoverJpegQuality to CoverArtQuality and update references
Signed-off-by: Deluan <[email protected] >
* feat(artwork): add DevJpegCoverArt option to control JPEG encoding for cover art
Signed-off-by: Deluan <[email protected] >
* fix(artwork): remove redundant transparent fill and handle encode errors in resizeImage
Removed a no-op draw.Draw call that filled the NRGBA canvas with
transparent pixels — NewNRGBA already zero-initializes to fully
transparent. Also added an early return on encode failure to avoid
allocating and copying potentially corrupt buffer data before returning
the error.
* fix(configuration): reorder default agents (deezer is faster)
Signed-off-by: Deluan <[email protected] >
* fix(test): resolve dogsled lint warning in tag extraction benchmark
Use all return values from runtime.Caller instead of discarding three
with blank identifiers, which triggered the dogsled linter.
* fix(artwork): revert cache key format
Signed-off-by: Deluan <[email protected] >
* fix(configuration): remove deprecated CoverJpegQuality field and update references to CoverArtQuality
Signed-off-by: Deluan <[email protected] >
---------
Signed-off-by: Deluan <[email protected] >
2026-03-13 09:35:59 -04:00
Maximilian and GitHub
a704e86ac1
refactor: run Go modernize ( #5002 )
2026-02-08 09:57:30 -05:00
Deluan Quintão and GitHub
76042ba173
feat(ui): add Now Playing panel for admins ( #4209 )
...
* feat(ui): add Now Playing panel and integrate now playing count updates
Signed-off-by: Deluan <[email protected] >
* fix: check return value in test to satisfy linter
* fix: format React code with prettier
* fix: resolve race condition in play tracker test
* fix: log error when fetching now playing data fails
Signed-off-by: Deluan <[email protected] >
* feat(ui): refactor Now Playing panel with new components and error handling
Signed-off-by: Deluan <[email protected] >
* fix(ui): adjust padding and height in Now Playing panel for improved layout
Signed-off-by: Deluan <[email protected] >
* fix(cache): add automatic cleanup to prevent goroutine leak on cache garbage collection
Signed-off-by: Deluan <[email protected] >
---------
Signed-off-by: Deluan <[email protected] >
2025-06-10 17:22:13 -04:00
Deluan
de698918ac
Revert "fix(server): failed transcoded files should not be cached ( #4124 )"
...
This reverts commit 9dd5a8c334 .
2025-05-27 19:53:10 -04:00
Deluan Quintão and GitHub
9dd5a8c334
fix(server): failed transcoded files should not be cached ( #4124 )
...
* Close stream on caching errors
* fix(test): replace errPartialReader with errFakeReader to fix lint error
Signed-off-by: Deluan <[email protected] >
* fix(test): update error assertion to check for substring in closed file error
Signed-off-by: Deluan <[email protected] >
---------
Signed-off-by: Deluan <[email protected] >
2025-05-26 20:30:26 -04:00
Deluan Quintão and GitHub
6731787053
fix(server): memory leak in cache warmer ( #4095 )
...
* Prevent cache warmer memory leak when cache disabled
* refactor(tests): replace disabledCache with mockFileCache in CacheWarmer tests
Signed-off-by: Deluan <[email protected] >
* test(cache): enhance CacheWarmer tests for initialization, buffer management, and error handling
Signed-off-by: Deluan <[email protected] >
---------
Signed-off-by: Deluan <[email protected] >
2025-05-21 21:48:49 -04:00
Deluan Quintão and GitHub
5ab345c83e
chore(server): add more info to scrobble errors logs ( #3889 )
...
* chore(server): add more info to scrobble errors
Signed-off-by: Deluan <[email protected] >
* chore(server): add more info to scrobble errors
Signed-off-by: Deluan <[email protected] >
* chore(server): add more info to scrobble errors
Signed-off-by: Deluan <[email protected] >
---------
Signed-off-by: Deluan <[email protected] >
2025-03-27 18:57:06 -04:00
c795bcfcf7
feat(bfr): Big Refactor: new scanner, lots of new fields and tags, improvements and DB schema changes ( #2709 )
...
* fix(server): more race conditions when updating artist/album from external sources
Signed-off-by: Deluan <[email protected] >
* feat(scanner): add .gitignore syntax to .ndignore. Resolves #1394
Signed-off-by: Deluan <[email protected] >
* fix(ui): null
Signed-off-by: Deluan <[email protected] >
* fix(scanner): pass configfile option to child process
Signed-off-by: Deluan <[email protected] >
* fix(scanner): resume interrupted fullScans
Signed-off-by: Deluan <[email protected] >
* fix(scanner): remove old scanner code
Signed-off-by: Deluan <[email protected] >
* fix(scanner): rename old metadata package
Signed-off-by: Deluan <[email protected] >
* fix(scanner): move old metadata package
Signed-off-by: Deluan <[email protected] >
* fix: tests
Signed-off-by: Deluan <[email protected] >
* chore(deps): update Go to 1.23.4
Signed-off-by: Deluan <[email protected] >
* fix: logs
Signed-off-by: Deluan <[email protected] >
* fix(test):
Signed-off-by: Deluan <[email protected] >
* fix: log level
Signed-off-by: Deluan <[email protected] >
* fix: remove log message
Signed-off-by: Deluan <[email protected] >
* feat: add config for scanner watcher
Signed-off-by: Deluan <[email protected] >
* refactor: children playlists
Signed-off-by: Deluan <[email protected] >
* refactor: replace `interface{}` with `any`
Signed-off-by: Deluan <[email protected] >
* fix: smart playlists with genres
Signed-off-by: Deluan <[email protected] >
* fix: allow any tags in smart playlists
Signed-off-by: Deluan <[email protected] >
* fix: artist names in playlists
Signed-off-by: Deluan <[email protected] >
* fix: smart playlist's sort by tags
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): add moods to child
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): add moods to AlbumID3
Signed-off-by: Deluan <[email protected] >
* refactor(subsonic): use generic JSONArray for OS arrays
Signed-off-by: Deluan <[email protected] >
* refactor(subsonic): use https in test
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): add releaseTypes to AlbumID3
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): add recordLabels to AlbumID3
Signed-off-by: Deluan <[email protected] >
* refactor(subsonic): rename JSONArray to Array
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): add artists to AlbumID3
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): add artists to Child
Signed-off-by: Deluan <[email protected] >
* fix(scanner): do not pre-populate smart playlists
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): implement a simplified version of ArtistID3.
See https://github.com/opensubsonic/open-subsonic-api/discussions/120
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): add artists to album child
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): add contributors to mediafile Child
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): add albumArtists to mediafile Child
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): add displayArtist and displayAlbumArtist
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): add displayComposer to Child
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): add roles to ArtistID3
Signed-off-by: Deluan <[email protected] >
* fix(subsonic): use " • " separator for displayComposer
Signed-off-by: Deluan <[email protected] >
* refactor:
Signed-off-by: Deluan <[email protected] >
* fix(subsonic):
Signed-off-by: Deluan <[email protected] >
* fix(subsonic): respect `PreferSortTags` config option
Signed-off-by: Deluan <[email protected] >
* refactor(subsonic):
Signed-off-by: Deluan <[email protected] >
* refactor: optimize purging non-unused tags
Signed-off-by: Deluan <[email protected] >
* refactor: don't run 'refresh artist stats' concurrently with other transactions
Signed-off-by: Deluan <[email protected] >
* refactor:
Signed-off-by: Deluan <[email protected] >
* fix: log message
Signed-off-by: Deluan <[email protected] >
* feat: add Scanner.ScanOnStartup config option, default true
Signed-off-by: Deluan <[email protected] >
* feat: better json parsing error msg when importing NSPs
Signed-off-by: Deluan <[email protected] >
* fix: don't update album's imported_time when updating external_metadata
Signed-off-by: Deluan <[email protected] >
* fix: handle interrupted scans and full scans after migrations
Signed-off-by: Deluan <[email protected] >
* feat: run `analyze` when migration requires a full rescan
Signed-off-by: Deluan <[email protected] >
* feat: run `PRAGMA optimize` at the end of the scan
Signed-off-by: Deluan <[email protected] >
* fix: don't update artist's updated_at when updating external_metadata
Signed-off-by: Deluan <[email protected] >
* feat: handle multiple artists and roles in smart playlists
Signed-off-by: Deluan <[email protected] >
* feat(ui): dim missing tracks
Signed-off-by: Deluan <[email protected] >
* fix: album missing logic
Signed-off-by: Deluan <[email protected] >
* fix: error encoding in gob
Signed-off-by: Deluan <[email protected] >
* feat: separate warnings from errors
Signed-off-by: Deluan <[email protected] >
* fix: mark albums as missing if they were contained in a deleted folder
Signed-off-by: Deluan <[email protected] >
* refactor: add participant names to media_file and album tables
Signed-off-by: Deluan <[email protected] >
* refactor: use participations in criteria, instead of m2m relationship
Signed-off-by: Deluan <[email protected] >
* refactor: rename participations to participants
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): add moods to album child
Signed-off-by: Deluan <[email protected] >
* fix: albumartist role case
Signed-off-by: Deluan <[email protected] >
* feat(scanner): run scanner as an external process by default
Signed-off-by: Deluan <[email protected] >
* fix(ui): show albumArtist names
Signed-off-by: Deluan <[email protected] >
* fix(ui): dim out missing albums
Signed-off-by: Deluan <[email protected] >
* fix: flaky test
Signed-off-by: Deluan <[email protected] >
* fix(server): scrobble buffer mapping. fix #3583
Signed-off-by: Deluan <[email protected] >
* refactor: more participations renaming
Signed-off-by: Deluan <[email protected] >
* fix: listenbrainz scrobbling
Signed-off-by: Deluan <[email protected] >
* feat: send release_group_mbid to listenbrainz
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): implement OpenSubsonic explicitStatus field (#3597 )
* feat: implement OpenSubsonic explicitStatus field
* fix(subsonic): fix failing snapshot tests
* refactor: create helper for setting explicitStatus
* fix: store smaller values for explicit-status on database
* test: ToAlbum explicitStatus
* refactor: rename explicitStatus helper function
---------
Co-authored-by: Deluan Quintão <[email protected] >
* fix: handle album and track tags in the DB based on the mappings.yaml file
Signed-off-by: Deluan <[email protected] >
* save similar artists as JSONB
Signed-off-by: Deluan <[email protected] >
* fix: getAlbumList byGenre
Signed-off-by: Deluan <[email protected] >
* detect changes in PID configuration
Signed-off-by: Deluan <[email protected] >
* set default album PID to legacy_pid
Signed-off-by: Deluan <[email protected] >
* fix tests
Signed-off-by: Deluan <[email protected] >
* fix SIGSEGV
Signed-off-by: Deluan <[email protected] >
* fix: don't lose album stars/ratings when migrating
Signed-off-by: Deluan <[email protected] >
* store full PID conf in properties
Signed-off-by: Deluan <[email protected] >
* fix: keep album annotations when changing PID.Album config
Signed-off-by: Deluan <[email protected] >
* fix: reassign album annotations
Signed-off-by: Deluan <[email protected] >
* feat: use (display) albumArtist and add links to each artist
Signed-off-by: Deluan <[email protected] >
* fix: not showing albums by albumartist
Signed-off-by: Deluan <[email protected] >
* fix: error msgs
Signed-off-by: Deluan <[email protected] >
* fix: hide PID from Native API
Signed-off-by: Deluan <[email protected] >
* fix: album cover art resolution
Signed-off-by: Deluan <[email protected] >
* fix: trim participant names
Signed-off-by: Deluan <[email protected] >
* fix: reduce watcher log spam
Signed-off-by: Deluan <[email protected] >
* fix: panic when initializing the watcher
Signed-off-by: Deluan <[email protected] >
* fix: various artists
Signed-off-by: Deluan <[email protected] >
* fix: don't store empty lyrics in the DB
Signed-off-by: Deluan <[email protected] >
* remove unused methods
Signed-off-by: Deluan <[email protected] >
* drop full_text indexes, as they are not being used by SQLite
Signed-off-by: Deluan <[email protected] >
* keep album created_at when upgrading
Signed-off-by: Deluan <[email protected] >
* fix(ui): null pointer
Signed-off-by: Deluan <[email protected] >
* fix: album artwork cache
Signed-off-by: Deluan <[email protected] >
* fix: don't expose missing files in Subsonic API
Signed-off-by: Deluan <[email protected] >
* refactor: searchable interface
Signed-off-by: Deluan <[email protected] >
* fix: filter out missing items from subsonic search
* fix: filter out missing items from playlists
* fix: filter out missing items from shares
Signed-off-by: Deluan <[email protected] >
* feat(ui): add filter by artist role
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): only return albumartists in getIndexes and getArtists endpoints
Signed-off-by: Deluan <[email protected] >
* sort roles alphabetically
Signed-off-by: Deluan <[email protected] >
* fix: artist playcounts
Signed-off-by: Deluan <[email protected] >
* change default Album PID conf
Signed-off-by: Deluan <[email protected] >
* fix albumartist link when it does not match any albumartists values
Signed-off-by: Deluan <[email protected] >
* fix `Ignoring filter not whitelisted` (role) message
Signed-off-by: Deluan <[email protected] >
* fix: trim any names/titles being imported
Signed-off-by: Deluan <[email protected] >
* remove unused genre code
Signed-off-by: Deluan <[email protected] >
* serialize calls to Last.fm's getArtist
Signed-off-by: Deluan <[email protected] >
xxx
Signed-off-by: Deluan <[email protected] >
* add counters to genres
Signed-off-by: Deluan <[email protected] >
* nit: fix migration `notice` message
Signed-off-by: Deluan <[email protected] >
* optimize similar artists query
Signed-off-by: Deluan <[email protected] >
* fix: last.fm.getInfo when mbid does not exist
Signed-off-by: Deluan <[email protected] >
* ui only show missing items for admins
Signed-off-by: Deluan <[email protected] >
* don't allow interaction with missing items
Signed-off-by: Deluan <[email protected] >
* Add Missing Files view (WIP)
Signed-off-by: Deluan <[email protected] >
* refactor: merged tag_counts into tag table
Signed-off-by: Deluan <[email protected] >
* add option to completely disable automatic scanner
Signed-off-by: Deluan <[email protected] >
* add delete missing files functionality
Signed-off-by: Deluan <[email protected] >
* fix: playlists not showing for regular users
Signed-off-by: Deluan <[email protected] >
* reduce updateLastAccess frequency to once every minute
Signed-off-by: Deluan <[email protected] >
* reduce update player frequency to once every minute
Signed-off-by: Deluan <[email protected] >
* add timeout when updating player
Signed-off-by: Deluan <[email protected] >
* remove dead code
Signed-off-by: Deluan <[email protected] >
* fix duplicated roles in stats
Signed-off-by: Deluan <[email protected] >
* add `; ` to artist splitters
Signed-off-by: Deluan <[email protected] >
* fix stats query
Signed-off-by: Deluan <[email protected] >
* more logs
Signed-off-by: Deluan <[email protected] >
* fix: support legacy clients (DSub) by removing OpenSubsonic extra fields - WIP
Signed-off-by: Deluan <[email protected] >
* fix: support legacy clients (DSub) by removing OpenSubsonic extra fields - WIP
Signed-off-by: Deluan <[email protected] >
* fix: support legacy clients (DSub) by removing OpenSubsonic extra fields - WIP
Signed-off-by: Deluan <[email protected] >
* fix: support legacy clients (DSub) by removing OpenSubsonic extra fields - WIP
Signed-off-by: Deluan <[email protected] >
* add record label filter
Signed-off-by: Deluan <[email protected] >
* add release type filter
Signed-off-by: Deluan <[email protected] >
* fix purgeUnused tags
Signed-off-by: Deluan <[email protected] >
* add grouping filter to albums
Signed-off-by: Deluan <[email protected] >
* allow any album tags to be used in as filters in the API
Signed-off-by: Deluan <[email protected] >
* remove empty tags from album info
Signed-off-by: Deluan <[email protected] >
* comments in the migration
Signed-off-by: Deluan <[email protected] >
* fix: Cannot read properties of undefined
Signed-off-by: Deluan <[email protected] >
* fix: listenbrainz scrobbling (#3640 )
Signed-off-by: Deluan <[email protected] >
* fix: remove duplicated tag values
Signed-off-by: Deluan <[email protected] >
* fix: don't ignore the taglib folder!
Signed-off-by: Deluan <[email protected] >
* feat: show track subtitle tag
Signed-off-by: Deluan <[email protected] >
* fix: show artists stats based on selected role
Signed-off-by: Deluan <[email protected] >
* fix: inspect
Signed-off-by: Deluan <[email protected] >
* add media type to album info/filters
Signed-off-by: Deluan <[email protected] >
* fix: change format of subtitle in the UI
Signed-off-by: Deluan <[email protected] >
* fix: subtitle in Subsonic API and search
Signed-off-by: Deluan <[email protected] >
* fix: subtitle in UI's player
Signed-off-by: Deluan <[email protected] >
* fix: split strings should be case-insensitive
Signed-off-by: Deluan <[email protected] >
* disable ScanSchedule
Signed-off-by: Deluan <[email protected] >
* increase default sessiontimeout
Signed-off-by: Deluan <[email protected] >
* add sqlite command line tool to docker image
Signed-off-by: Deluan <[email protected] >
* fix: resources override
Signed-off-by: Deluan <[email protected] >
* fix: album PID conf
Signed-off-by: Deluan <[email protected] >
* change migration to mark current artists as albumArtists
Signed-off-by: Deluan <[email protected] >
* feat(ui): Allow filtering on multiple genres (#3679 )
* feat(ui): Allow filtering on multiple genres
Signed-off-by: Henrik Nordvik <[email protected] >
Signed-off-by: Deluan <[email protected] >
* add multi-genre filter in Album list
Signed-off-by: Deluan <[email protected] >
---------
Signed-off-by: Henrik Nordvik <[email protected] >
Signed-off-by: Deluan <[email protected] >
Co-authored-by: Henrik Nordvik <[email protected] >
* add more multi-valued tag filters to Album and Song views
Signed-off-by: Deluan <[email protected] >
* fix(ui): unselect missing files after removing
Signed-off-by: Deluan <[email protected] >
* fix(ui): song filter
Signed-off-by: Deluan <[email protected] >
* fix sharing tracks. fix #3687
Signed-off-by: Deluan <[email protected] >
* use rowids when using search for sync (ex: Symfonium)
Signed-off-by: Deluan <[email protected] >
* fix "Report Real Paths" option for subsonic clients
Signed-off-by: Deluan <[email protected] >
* fix "Report Real Paths" option for subsonic clients for search
Signed-off-by: Deluan <[email protected] >
* add libraryPath to Native API /songs endpoint
Signed-off-by: Deluan <[email protected] >
* feat(subsonic): add album version
Signed-off-by: Deluan <[email protected] >
* made all tags lowercase as they are case-insensitive anyways.
Signed-off-by: Deluan <[email protected] >
* feat(ui): Show full paths, extended properties for album/song (#3691 )
* feat(ui): Show full paths, extended properties for album/song
- uses library path + os separator + path
- show participants (album/song) and tags (song)
- make album/participant clickable in show info
* add source to path
* fix pathSeparator in UI
Signed-off-by: Deluan <[email protected] >
* fix local artist artwork (#3695 )
Signed-off-by: Deluan <[email protected] >
* fix: parse vorbis performers
Signed-off-by: Deluan <[email protected] >
* refactor: clean function into smaller functions
Signed-off-by: Deluan <[email protected] >
* fix translations for en and pt
Signed-off-by: Deluan <[email protected] >
* add trace log to show annotations reassignment
Signed-off-by: Deluan <[email protected] >
* add trace log to show annotations reassignment
Signed-off-by: Deluan <[email protected] >
* fix: allow performers without instrument/subrole
Signed-off-by: Deluan <[email protected] >
* refactor: metadata clean function again
Signed-off-by: Deluan <[email protected] >
* refactor: optimize split function
Signed-off-by: Deluan <[email protected] >
* refactor: split function is now a method of TagConf
Signed-off-by: Deluan <[email protected] >
* fix: humanize Artist total size
Signed-off-by: Deluan <[email protected] >
* add album version to album details
Signed-off-by: Deluan <[email protected] >
* don't display album-level tags in SongInfo
Signed-off-by: Deluan <[email protected] >
* fix genre clicking in Album Page
Signed-off-by: Deluan <[email protected] >
* don't use mbids in Last.fm api calls.
From https://discord.com/channels/671335427726114836/704303730660737113/1337574018143879248 :
With MBID:
```
GET https://ws.audioscrobbler.com/2.0/?api_key=XXXX&artist=Van+Morrison&format=json&lang=en&mbid=a41ac10f-0a56-4672-9161-b83f9b223559&method=artist.getInfo
{
artist: {
name: "Bee Gees",
mbid: "bf0f7e29-dfe1-416c-b5c6-f9ebc19ea810",
url: "https://www.last.fm/music/Bee+Gees ",
}
```
Without MBID:
```
GET https://ws.audioscrobbler.com/2.0/?api_key=XXXX&artist=Van+Morrison&format=json&lang=en&method=artist.getInfo
{
artist: {
name: "Van Morrison",
mbid: "a41ac10f-0a56-4672-9161-b83f9b223559",
url: "https://www.last.fm/music/Van+Morrison ",
}
```
Signed-off-by: Deluan <[email protected] >
* better logging for when the artist folder is not found
Signed-off-by: Deluan <[email protected] >
* fix various issues with artist image resolution
Signed-off-by: Deluan <[email protected] >
* hide "Additional Tags" header if there are none.
Signed-off-by: Deluan <[email protected] >
* simplify tag rendering
Signed-off-by: Deluan <[email protected] >
* enhance logging for artist folder detection
Signed-off-by: Deluan <[email protected] >
* make folderID consistent for relative and absolute folderPaths
Signed-off-by: Deluan <[email protected] >
* handle more folder paths scenarios
Signed-off-by: Deluan <[email protected] >
* filter out other roles when SubsonicArtistParticipations = true
Signed-off-by: Deluan <[email protected] >
* fix "Cannot read properties of undefined"
Signed-off-by: Deluan <[email protected] >
* fix lyrics and comments being truncated (#3701 )
* fix lyrics and comments being truncated
* specifically test for lyrics and comment length
* reorder assertions
Signed-off-by: Deluan <[email protected] >
---------
Signed-off-by: Deluan <[email protected] >
Co-authored-by: Deluan <[email protected] >
* fix(server): Expose library_path for playlist (#3705 )
Allows showing absolute path for UI, and makes "report real path" work for playlists (Subsonic)
* fix BFR on Windows (#3704 )
* fix potential reflected cross-site scripting vulnerability
Signed-off-by: Deluan <[email protected] >
* hack to make it work on Windows
* ignore windows executables
* try fixing the pipeline
Signed-off-by: Deluan <[email protected] >
* allow MusicFolder in other drives
* move windows local drive logic to local storage implementation
---------
Signed-off-by: Deluan <[email protected] >
* increase pagination sizes for missing files
Signed-off-by: Deluan <[email protected] >
* reduce level of "already scanning" watcher log message
Signed-off-by: Deluan <[email protected] >
* only count folders with audio files in it
See https://github.com/navidrome/navidrome/discussions/3676#discussioncomment-11990930
Signed-off-by: Deluan <[email protected] >
* add album version and catalog number to search
Signed-off-by: Deluan <[email protected] >
* add `organization` alias for `recordlabel`
Signed-off-by: Deluan <[email protected] >
* remove mbid from Last.fm agent
Signed-off-by: Deluan <[email protected] >
* feat: support inspect in ui (#3726 )
* inspect in ui
* address round 1
* add catalogNum to AlbumInfo
Signed-off-by: Deluan <[email protected] >
* remove dependency on metadata_old (deprecated) package
Signed-off-by: Deluan <[email protected] >
* add `RawTags` to model
Signed-off-by: Deluan <[email protected] >
* support parsing MBIDs for roles (from the https://github.com/kgarner7/picard-all-mbids plugin) (#3698 )
* parse standard roles, vorbis/m4a work for now
* fix djmixer
* working roles, use DJ-mix
* add performers to file
* map mbids
* add a few more tests
* add test
Signed-off-by: Deluan <[email protected] >
* try to simplify the performers logic
Signed-off-by: Deluan <[email protected] >
* stylistic changes
---------
Signed-off-by: Deluan <[email protected] >
Co-authored-by: Deluan <[email protected] >
* remove param mutation
Signed-off-by: Deluan <[email protected] >
* run automated SQLite optimizations
Signed-off-by: Deluan <[email protected] >
* fix playlists import/export on Windows
* fix import playlists
* fix export playlists
* better handling of Windows volumes
Signed-off-by: Deluan <[email protected] >
* handle more album ID reassignments
Signed-off-by: Deluan <[email protected] >
* allow adding/overriding tags in the config file
Signed-off-by: Deluan <[email protected] >
* fix(ui): Fix playlist track id, handle missing tracks better (#3734 )
- Use `mediaFileId` instead of `id` for playlist tracks
- Only fetch if the file is not missing
- If extractor fails to get the file, also error (rather than panic)
* optimize DB after each scan.
Signed-off-by: Deluan <[email protected] >
* remove sortable from AlbumSongs columns
Signed-off-by: Deluan <[email protected] >
* simplify query to get missing tracks
Signed-off-by: Deluan <[email protected] >
* mark Scanner.Extractor as deprecated
Signed-off-by: Deluan <[email protected] >
---------
Signed-off-by: Deluan <[email protected] >
Signed-off-by: Henrik Nordvik <[email protected] >
Co-authored-by: Caio Cotts <[email protected] >
Co-authored-by: Henrik Nordvik <[email protected] >
Co-authored-by: Kendall Garner <[email protected] >
2025-02-19 20:35:17 -05:00
Deluan
d229ff39e5
refactor: reduce GC pressure by pre-allocating slices
...
Signed-off-by: Deluan <[email protected] >
2024-11-19 18:41:50 -05:00
Deluan Quintão and GitHub
cd0cf7c12b
feat: cache login background images ( #3462 )
...
* feat: use direct links to unsplash for background images
Signed-off-by: Deluan <[email protected] >
* feat: cache images from unsplash
Signed-off-by: Deluan <[email protected] >
* refactor: use cache.HTTPClient to reduce complexity
Signed-off-by: Deluan <[email protected] >
* refactor: remove magic numbers
Signed-off-by: Deluan <[email protected] >
---------
Signed-off-by: Deluan <[email protected] >
2024-11-08 20:23:30 -05:00
Deluan
c95fa11a2f
Remove potential integer overflow conversion uint64 -> int64
2024-08-22 19:28:22 -04:00
Deluan
3bc9e75b28
Evict expired items from SimpleCache
2024-06-24 17:32:34 -04:00
Deluan
3993c4d17f
Upgrade to ttlcache/v3
2024-06-21 18:09:34 -04:00
Deluan
29b7b740ce
Also use SimpleCache in cache.HTTPClient
2024-06-21 17:40:18 -04:00
Deluan
29bc17acd7
Wrap ttlcache in our own SimpleCache implementation
2024-06-21 17:21:09 -04:00
Deluan
ec68d69d56
Refactor cache.HTTPClient
2024-05-11 19:37:12 -04:00
Deluan
4cd7c7f39f
Fix FileHaunter tests
2023-12-02 19:40:59 -05:00
Deluan
81daee3b9b
Fix FileHaunter tests
2023-12-02 18:43:24 -05:00
Deluan
9b434d743f
Ignore flaky FileHaunter tests
2023-12-02 18:32:48 -05:00
257ccc5f43
Allow configuring cache folder ( #2357 )
...
* Set all clients to dev_download for make get-music
* Use multiple TranscodingCache instances in tests
This fixes flaky tests. The issue is that the TranscodingCache object
was being reused in tests from media_stream_Internal_test.go and
media_stream_test.go. If tests from the former was run first, the cache
would be filled up, so that when running tests from the latter, the `NON
seekable` test would fail.
* Allow configuring cache folder
This commit introduces a new configuration option to configure the cache
folder. This allows the cache to be in a separate folder such as
/var/cache/navidrome on Linux distributions.
* Fix tests
* Removed unused test setup code
---------
Co-authored-by: Deluan <[email protected] >
Co-authored-by: Deluan <[email protected] >
2023-06-02 17:14:11 -04:00
Deluan
bd402fb2a8
Fix IntelliJ warning
2023-04-04 13:01:32 -04:00
Deluan
a134b1b608
Use sync/atomic package, now that we are at Go 1.19
2023-02-15 21:21:59 -05:00
Deluan
6dce4b2478
Remove custom atomic.Bool, we are now at Go 1.19
2023-02-15 21:18:24 -05:00
Deluan and Deluan Quintão
05c6cdea1a
Don't cancel transcoding session if context is canceled
2023-02-07 09:58:50 -05:00
Deluan
bfaf4a3388
Add logs to cache hunter
2023-02-06 10:41:33 -05:00
Deluan
4a7e86e989
Fix file descriptor leaking.
2023-02-02 10:36:49 -05:00
Deluan
580e9ae4bd
Fix timer going awry
2023-01-17 22:04:09 -05:00
Deluan
cc14485194
When trying to PreCache, wait for ImageCache to be available
2022-12-28 23:26:39 -05:00
Deluan and Deluan Quintão
52a4721c91
Remove empty (invalid) entries from the cache
2022-12-28 15:31:56 -05:00
Deluan and Deluan Quintão
9ec349dce0
Make sure album is updated if external cover changes
2022-12-28 15:31:56 -05:00
Deluan and Deluan Quintão
73bb0104f0
Cache original images
2022-12-28 15:31:56 -05:00
Deluan
5943e8f953
Rename log.LevelCritical to log.LevelFatal
2022-12-21 14:53:36 -05:00
Deluan Quintão and GitHub
24d520882e
Don't cache transcoded files if the request was cancelled ( #2041 )
...
* Don't cache transcoded files if the request was cancelled (or there was a transcoding error)
* Add context to logs
* Simplify Wait error handling
* Fix flaky test
* Change log level for "populating cache" error message
* Small cleanups
2022-12-18 12:22:12 -05:00
Deluan
f82df70302
Add nilerr linter
2022-09-30 20:18:14 -04:00
Deluan
a7a0e23956
Fix formatting
2022-09-26 21:28:10 -04:00
Deluan
31882abf6f
Upgrade Ginkgo to V2
2022-07-26 16:53:17 -04:00
Deluan
f4bffb1676
Update @djherbis's packages
2022-07-26 15:16:56 -04:00
Deluan
35bec14d4d
Add missing test case for #1778
2022-07-25 23:34:09 -04:00
Deluan
321b3c5a64
Fix fscache key mapping. Closes #1778
2022-07-25 23:01:19 -04:00
Deluan
66a9cbb7d9
Remove temp folders after tests
2021-10-28 10:40:31 -04:00
Deluan
dbde0ffa0c
Bump github.com/djherbis/atime to v1.1.0
2021-10-03 22:50:25 -04:00
Deluan
8afa2cd833
Remove dependency of deprecated ioutil package
2021-07-20 20:12:28 -04:00
Deluan
94e36d7f60
Remove old feature flag for cache layout
2021-07-02 10:04:41 -04:00
Deluan
452c8dc44b
Fixed the enduring nasty "too many files open" bug!! Fix #446
2021-07-01 12:07:32 -04:00
Deluan
d1605dcfbe
Replace godirwalk with standard Go 1.16 filepath.WalkDir
...
Should fix https://github.com/navidrome/navidrome/issues/1048
2021-04-27 11:28:47 -04:00
Deluan
240de70026
Add tests for SpreadFS
2021-04-22 14:02:42 -04:00
Deluan
467eb345ad
Don't panic if fscache could not be initialized due to a FS error
2021-04-21 23:39:23 -04:00
Deluan
31b553e972
Add missing error log message in fscache initialization
2021-04-21 14:15:42 -04:00
Deluan
1d681d92d3
Better explanation of NewSpreadFS
2021-02-09 15:33:34 -05:00
Deluan
5fdd8b32d7
Move utilitarian/generic packages to utils: lastfm, spotify, gravatar, cache, and pool
2021-02-09 15:33:33 -05:00