Deluan Quintão
6dd98e0bed
feat(ui): add configuration tab in About dialog ( #4142 )
...
* Flatten config endpoint and improve About dialog
* add config resource
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(ui): replace `==` with `===`
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(ui): add environment variables
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(ui): add sensitive value redaction
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(ui): more translations
Signed-off-by: Deluan <deluan@navidrome.org >
* address PR comments
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(ui): add configuration export feature in About dialog
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(ui): translate development flags section header
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(api): refactor routes for keepalive and insights endpoints
Signed-off-by: Deluan <deluan@navidrome.org >
* lint
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(ui): enhance string escaping in formatTomlValue function
Updated the formatTomlValue function to properly escape backslashes in addition to quotes. Added new test cases to ensure correct handling of strings containing both backslashes and quotes.
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(ui): adjust dialog size
Signed-off-by: Deluan <deluan@navidrome.org >
---------
Signed-off-by: Deluan <deluan@navidrome.org >
2025-05-30 21:07:08 -04:00
Deluan Quintão
d4a053370a
feat(server): add option Lastfm.ScrobbleFirstArtistOnly to send only the first artist ( #4131 )
...
fixes #3791
Signed-off-by: Deluan <deluan@navidrome.org >
2025-05-28 08:43:07 -04:00
Copilot
992c78376c
feat(scanner): add Scanner.PurgeMissing configuration option ( #4107 )
...
* Initial plan for issue
* Add Scanner.PurgeMissing configuration option
Co-authored-by: deluan <331353+deluan@users.noreply.github.com >
* Remove GC call from phaseMissingTracks.purgeMissing method
Co-authored-by: deluan <331353+deluan@users.noreply.github.com >
* Address PR comments for Scanner.PurgeMissing feature
Co-authored-by: deluan <331353+deluan@users.noreply.github.com >
* Address PR comments and add DeleteAllMissing method
Co-authored-by: deluan <331353+deluan@users.noreply.github.com >
* refactor(scanner): simplify purgeMissing logic and improve error handling
Signed-off-by: Deluan <deluan@navidrome.org >
* fix configuration test
Signed-off-by: Deluan <deluan@navidrome.org >
---------
Signed-off-by: Deluan <deluan@navidrome.org >
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: deluan <331353+deluan@users.noreply.github.com >
Co-authored-by: Deluan <deluan@navidrome.org >
2025-05-22 20:50:15 -04:00
Caio Cotts
fef1739c1a
feat(server): add DefaultShareExpiration config option ( #4082 )
...
* add DefaultShareExpiration config option
* run prettier so that I can push
* undo reformatting
* sort imports
2025-05-20 22:17:30 -04:00
Deluan Quintão
19d443ec7f
feat(scanner): add Scanner.FollowSymlinks option ( #4061 )
...
* Add Scanner.FollowSymlinks option (default: true) - Fixes #4060
* fix(mockMusicFS): improve symlink handling in Open, Stat, and ReadDir methods
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor(tests): enhance walkDirTree tests with symlink handling and cleanup
Signed-off-by: Deluan <deluan@navidrome.org >
---------
Signed-off-by: Deluan <deluan@navidrome.org >
2025-05-15 10:33:28 -04:00
Kendall Garner
ec9f9aa243
feat:(server): support reading lyrics from filesystem ( #2897 )
...
* simplified lyrics handling
* address initial feedback
* add some trace and error logging
* allow fallback lyrics
* update nit
* restore artist/title filter only
2025-04-30 08:10:19 -04:00
Deluan Quintão
b41123f75e
chore: remove DevEnableBufferedScrobble and always enable buffered scrobbling ( #3999 )
...
Removed all code, config, and test references to DevEnableBufferedScrobble. Buffered scrobbling is now always enabled. Added this option to the list of deprecated config options with a warning. Updated all logic and tests to reflect this. No linter issues remain. Some PlayTracker tests are failing, but these are likely due to test data or logic unrelated to this change. All other tests pass. Review required for PlayTracker test failures.
Signed-off-by: Deluan <deluan@navidrome.org >
2025-04-24 17:19:50 -04:00
Deluan
223e88d481
chore: remove some BFR-related TODOs that are not valid anymore
...
Signed-off-by: Deluan <deluan@navidrome.org >
2025-03-23 11:37:20 -04:00
Deluan Quintão
57e0f6d3ea
feat(server): custom ArtistJoiner config ( #3873 )
...
* feat(server): custom ArtistJoiner config
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor(ui): organize ArtistLinkField, add tests
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(ui): use display artist
* feat(ui): use display artist
Signed-off-by: Deluan <deluan@navidrome.org >
---------
Signed-off-by: Deluan <deluan@navidrome.org >
2025-03-23 10:53:21 -04:00
Deluan
264d73d73e
fix(server): don't break if the ND_CONFIGFILE does not exist
...
Signed-off-by: Deluan <deluan@navidrome.org >
2025-03-22 17:08:03 -04:00
Deluan
0147bb5f12
chore(deps): upgrade viper to 1.20.0, add tests for the supported config formats
...
Signed-off-by: Deluan <deluan@navidrome.org >
2025-03-18 19:16:47 -04:00
Deluan
2838ac36df
feat(scanner): allow disabling tags with Tags.<tag>.Ignore=true
...
Signed-off-by: Deluan <deluan@navidrome.org >
2025-03-13 19:55:30 -04:00
Deluan
b952672877
fix(scanner): add back the Scanner.GenreSeparators as a deprecated option
...
This allows easy upgrade of containers in PikaPods
Signed-off-by: Deluan <deluan@navidrome.org >
2025-03-13 19:25:07 -04:00
Deluan
57d3be8604
feat(subsonic): rename AppendSubtitle conf to Subsonic.AppendSubtitle, for consistency
...
Signed-off-by: Deluan <deluan@navidrome.org >
2025-03-08 19:02:29 -05:00
Deluan
21a5528f5e
feat(server): deprecate Scanner.GroupAlbumReleases config option
...
Signed-off-by: Deluan <deluan@navidrome.org >
2025-03-06 23:57:47 -05:00
Deluan
dc4e091622
feat(server): make appending subtitle to song title configurable
...
Signed-off-by: Deluan <deluan@navidrome.org >
2025-03-05 12:36:09 -08:00
Deluan
8ab2a11d22
feat(server): group Subsonic config options together
...
Signed-off-by: Deluan <deluan@navidrome.org >
2025-03-05 12:29:30 -08:00
Deluan
637c909e93
feat(server): removed GenreSeparator, replaced with Tag.Genre.Split
...
Signed-off-by: Deluan <deluan@navidrome.org >
2025-02-28 15:36:21 -10:00
Deluan
de37e0f720
feat(server): rename ScanSchedule conf to Scanner.Schedule, for consistency
...
Signed-off-by: Deluan <deluan@navidrome.org >
2025-02-28 15:36:21 -10:00
Deluan
f3cb85cb0d
feat(server): warn users of ffmpeg extractor that it is not available anymore
...
Signed-off-by: Deluan <deluan@navidrome.org >
2025-02-28 12:39:30 -08:00
Deluan
74348a340f
feat(server): new option to set the default for ReportRealPath on new players
...
Implements #3653
Signed-off-by: Deluan <deluan@navidrome.org >
2025-02-20 22:24:09 -05:00
Deluan Quintão
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 <deluan@navidrome.org >
* feat(scanner): add .gitignore syntax to .ndignore. Resolves #1394
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(ui): null
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(scanner): pass configfile option to child process
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(scanner): resume interrupted fullScans
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(scanner): remove old scanner code
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(scanner): rename old metadata package
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(scanner): move old metadata package
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: tests
Signed-off-by: Deluan <deluan@navidrome.org >
* chore(deps): update Go to 1.23.4
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: logs
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(test):
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: log level
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: remove log message
Signed-off-by: Deluan <deluan@navidrome.org >
* feat: add config for scanner watcher
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: children playlists
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: replace `interface{}` with `any`
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: smart playlists with genres
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: allow any tags in smart playlists
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: artist names in playlists
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: smart playlist's sort by tags
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): add moods to child
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): add moods to AlbumID3
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor(subsonic): use generic JSONArray for OS arrays
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor(subsonic): use https in test
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): add releaseTypes to AlbumID3
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): add recordLabels to AlbumID3
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor(subsonic): rename JSONArray to Array
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): add artists to AlbumID3
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): add artists to Child
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(scanner): do not pre-populate smart playlists
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): implement a simplified version of ArtistID3.
See https://github.com/opensubsonic/open-subsonic-api/discussions/120
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): add artists to album child
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): add contributors to mediafile Child
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): add albumArtists to mediafile Child
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): add displayArtist and displayAlbumArtist
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): add displayComposer to Child
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): add roles to ArtistID3
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(subsonic): use " • " separator for displayComposer
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor:
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(subsonic):
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(subsonic): respect `PreferSortTags` config option
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor(subsonic):
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: optimize purging non-unused tags
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: don't run 'refresh artist stats' concurrently with other transactions
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor:
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: log message
Signed-off-by: Deluan <deluan@navidrome.org >
* feat: add Scanner.ScanOnStartup config option, default true
Signed-off-by: Deluan <deluan@navidrome.org >
* feat: better json parsing error msg when importing NSPs
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: don't update album's imported_time when updating external_metadata
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: handle interrupted scans and full scans after migrations
Signed-off-by: Deluan <deluan@navidrome.org >
* feat: run `analyze` when migration requires a full rescan
Signed-off-by: Deluan <deluan@navidrome.org >
* feat: run `PRAGMA optimize` at the end of the scan
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: don't update artist's updated_at when updating external_metadata
Signed-off-by: Deluan <deluan@navidrome.org >
* feat: handle multiple artists and roles in smart playlists
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(ui): dim missing tracks
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: album missing logic
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: error encoding in gob
Signed-off-by: Deluan <deluan@navidrome.org >
* feat: separate warnings from errors
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: mark albums as missing if they were contained in a deleted folder
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: add participant names to media_file and album tables
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: use participations in criteria, instead of m2m relationship
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: rename participations to participants
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): add moods to album child
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: albumartist role case
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(scanner): run scanner as an external process by default
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(ui): show albumArtist names
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(ui): dim out missing albums
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: flaky test
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(server): scrobble buffer mapping. fix #3583
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: more participations renaming
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: listenbrainz scrobbling
Signed-off-by: Deluan <deluan@navidrome.org >
* feat: send release_group_mbid to listenbrainz
Signed-off-by: Deluan <deluan@navidrome.org >
* 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 <deluan@navidrome.org >
* fix: handle album and track tags in the DB based on the mappings.yaml file
Signed-off-by: Deluan <deluan@navidrome.org >
* save similar artists as JSONB
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: getAlbumList byGenre
Signed-off-by: Deluan <deluan@navidrome.org >
* detect changes in PID configuration
Signed-off-by: Deluan <deluan@navidrome.org >
* set default album PID to legacy_pid
Signed-off-by: Deluan <deluan@navidrome.org >
* fix tests
Signed-off-by: Deluan <deluan@navidrome.org >
* fix SIGSEGV
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: don't lose album stars/ratings when migrating
Signed-off-by: Deluan <deluan@navidrome.org >
* store full PID conf in properties
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: keep album annotations when changing PID.Album config
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: reassign album annotations
Signed-off-by: Deluan <deluan@navidrome.org >
* feat: use (display) albumArtist and add links to each artist
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: not showing albums by albumartist
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: error msgs
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: hide PID from Native API
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: album cover art resolution
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: trim participant names
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: reduce watcher log spam
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: panic when initializing the watcher
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: various artists
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: don't store empty lyrics in the DB
Signed-off-by: Deluan <deluan@navidrome.org >
* remove unused methods
Signed-off-by: Deluan <deluan@navidrome.org >
* drop full_text indexes, as they are not being used by SQLite
Signed-off-by: Deluan <deluan@navidrome.org >
* keep album created_at when upgrading
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(ui): null pointer
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: album artwork cache
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: don't expose missing files in Subsonic API
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: searchable interface
Signed-off-by: Deluan <deluan@navidrome.org >
* 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 <deluan@navidrome.org >
* feat(ui): add filter by artist role
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): only return albumartists in getIndexes and getArtists endpoints
Signed-off-by: Deluan <deluan@navidrome.org >
* sort roles alphabetically
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: artist playcounts
Signed-off-by: Deluan <deluan@navidrome.org >
* change default Album PID conf
Signed-off-by: Deluan <deluan@navidrome.org >
* fix albumartist link when it does not match any albumartists values
Signed-off-by: Deluan <deluan@navidrome.org >
* fix `Ignoring filter not whitelisted` (role) message
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: trim any names/titles being imported
Signed-off-by: Deluan <deluan@navidrome.org >
* remove unused genre code
Signed-off-by: Deluan <deluan@navidrome.org >
* serialize calls to Last.fm's getArtist
Signed-off-by: Deluan <deluan@navidrome.org >
xxx
Signed-off-by: Deluan <deluan@navidrome.org >
* add counters to genres
Signed-off-by: Deluan <deluan@navidrome.org >
* nit: fix migration `notice` message
Signed-off-by: Deluan <deluan@navidrome.org >
* optimize similar artists query
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: last.fm.getInfo when mbid does not exist
Signed-off-by: Deluan <deluan@navidrome.org >
* ui only show missing items for admins
Signed-off-by: Deluan <deluan@navidrome.org >
* don't allow interaction with missing items
Signed-off-by: Deluan <deluan@navidrome.org >
* Add Missing Files view (WIP)
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: merged tag_counts into tag table
Signed-off-by: Deluan <deluan@navidrome.org >
* add option to completely disable automatic scanner
Signed-off-by: Deluan <deluan@navidrome.org >
* add delete missing files functionality
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: playlists not showing for regular users
Signed-off-by: Deluan <deluan@navidrome.org >
* reduce updateLastAccess frequency to once every minute
Signed-off-by: Deluan <deluan@navidrome.org >
* reduce update player frequency to once every minute
Signed-off-by: Deluan <deluan@navidrome.org >
* add timeout when updating player
Signed-off-by: Deluan <deluan@navidrome.org >
* remove dead code
Signed-off-by: Deluan <deluan@navidrome.org >
* fix duplicated roles in stats
Signed-off-by: Deluan <deluan@navidrome.org >
* add `; ` to artist splitters
Signed-off-by: Deluan <deluan@navidrome.org >
* fix stats query
Signed-off-by: Deluan <deluan@navidrome.org >
* more logs
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: support legacy clients (DSub) by removing OpenSubsonic extra fields - WIP
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: support legacy clients (DSub) by removing OpenSubsonic extra fields - WIP
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: support legacy clients (DSub) by removing OpenSubsonic extra fields - WIP
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: support legacy clients (DSub) by removing OpenSubsonic extra fields - WIP
Signed-off-by: Deluan <deluan@navidrome.org >
* add record label filter
Signed-off-by: Deluan <deluan@navidrome.org >
* add release type filter
Signed-off-by: Deluan <deluan@navidrome.org >
* fix purgeUnused tags
Signed-off-by: Deluan <deluan@navidrome.org >
* add grouping filter to albums
Signed-off-by: Deluan <deluan@navidrome.org >
* allow any album tags to be used in as filters in the API
Signed-off-by: Deluan <deluan@navidrome.org >
* remove empty tags from album info
Signed-off-by: Deluan <deluan@navidrome.org >
* comments in the migration
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: Cannot read properties of undefined
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: listenbrainz scrobbling (#3640 )
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: remove duplicated tag values
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: don't ignore the taglib folder!
Signed-off-by: Deluan <deluan@navidrome.org >
* feat: show track subtitle tag
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: show artists stats based on selected role
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: inspect
Signed-off-by: Deluan <deluan@navidrome.org >
* add media type to album info/filters
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: change format of subtitle in the UI
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: subtitle in Subsonic API and search
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: subtitle in UI's player
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: split strings should be case-insensitive
Signed-off-by: Deluan <deluan@navidrome.org >
* disable ScanSchedule
Signed-off-by: Deluan <deluan@navidrome.org >
* increase default sessiontimeout
Signed-off-by: Deluan <deluan@navidrome.org >
* add sqlite command line tool to docker image
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: resources override
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: album PID conf
Signed-off-by: Deluan <deluan@navidrome.org >
* change migration to mark current artists as albumArtists
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(ui): Allow filtering on multiple genres (#3679 )
* feat(ui): Allow filtering on multiple genres
Signed-off-by: Henrik Nordvik <henrikno@gmail.com >
Signed-off-by: Deluan <deluan@navidrome.org >
* add multi-genre filter in Album list
Signed-off-by: Deluan <deluan@navidrome.org >
---------
Signed-off-by: Henrik Nordvik <henrikno@gmail.com >
Signed-off-by: Deluan <deluan@navidrome.org >
Co-authored-by: Henrik Nordvik <henrikno@gmail.com >
* add more multi-valued tag filters to Album and Song views
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(ui): unselect missing files after removing
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(ui): song filter
Signed-off-by: Deluan <deluan@navidrome.org >
* fix sharing tracks. fix #3687
Signed-off-by: Deluan <deluan@navidrome.org >
* use rowids when using search for sync (ex: Symfonium)
Signed-off-by: Deluan <deluan@navidrome.org >
* fix "Report Real Paths" option for subsonic clients
Signed-off-by: Deluan <deluan@navidrome.org >
* fix "Report Real Paths" option for subsonic clients for search
Signed-off-by: Deluan <deluan@navidrome.org >
* add libraryPath to Native API /songs endpoint
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(subsonic): add album version
Signed-off-by: Deluan <deluan@navidrome.org >
* made all tags lowercase as they are case-insensitive anyways.
Signed-off-by: Deluan <deluan@navidrome.org >
* 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 <deluan@navidrome.org >
* fix local artist artwork (#3695 )
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: parse vorbis performers
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: clean function into smaller functions
Signed-off-by: Deluan <deluan@navidrome.org >
* fix translations for en and pt
Signed-off-by: Deluan <deluan@navidrome.org >
* add trace log to show annotations reassignment
Signed-off-by: Deluan <deluan@navidrome.org >
* add trace log to show annotations reassignment
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: allow performers without instrument/subrole
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: metadata clean function again
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: optimize split function
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: split function is now a method of TagConf
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: humanize Artist total size
Signed-off-by: Deluan <deluan@navidrome.org >
* add album version to album details
Signed-off-by: Deluan <deluan@navidrome.org >
* don't display album-level tags in SongInfo
Signed-off-by: Deluan <deluan@navidrome.org >
* fix genre clicking in Album Page
Signed-off-by: Deluan <deluan@navidrome.org >
* 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 <deluan@navidrome.org >
* better logging for when the artist folder is not found
Signed-off-by: Deluan <deluan@navidrome.org >
* fix various issues with artist image resolution
Signed-off-by: Deluan <deluan@navidrome.org >
* hide "Additional Tags" header if there are none.
Signed-off-by: Deluan <deluan@navidrome.org >
* simplify tag rendering
Signed-off-by: Deluan <deluan@navidrome.org >
* enhance logging for artist folder detection
Signed-off-by: Deluan <deluan@navidrome.org >
* make folderID consistent for relative and absolute folderPaths
Signed-off-by: Deluan <deluan@navidrome.org >
* handle more folder paths scenarios
Signed-off-by: Deluan <deluan@navidrome.org >
* filter out other roles when SubsonicArtistParticipations = true
Signed-off-by: Deluan <deluan@navidrome.org >
* fix "Cannot read properties of undefined"
Signed-off-by: Deluan <deluan@navidrome.org >
* 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 <deluan@navidrome.org >
---------
Signed-off-by: Deluan <deluan@navidrome.org >
Co-authored-by: Deluan <deluan@navidrome.org >
* 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 <deluan@navidrome.org >
* hack to make it work on Windows
* ignore windows executables
* try fixing the pipeline
Signed-off-by: Deluan <deluan@navidrome.org >
* allow MusicFolder in other drives
* move windows local drive logic to local storage implementation
---------
Signed-off-by: Deluan <deluan@navidrome.org >
* increase pagination sizes for missing files
Signed-off-by: Deluan <deluan@navidrome.org >
* reduce level of "already scanning" watcher log message
Signed-off-by: Deluan <deluan@navidrome.org >
* only count folders with audio files in it
See https://github.com/navidrome/navidrome/discussions/3676#discussioncomment-11990930
Signed-off-by: Deluan <deluan@navidrome.org >
* add album version and catalog number to search
Signed-off-by: Deluan <deluan@navidrome.org >
* add `organization` alias for `recordlabel`
Signed-off-by: Deluan <deluan@navidrome.org >
* remove mbid from Last.fm agent
Signed-off-by: Deluan <deluan@navidrome.org >
* feat: support inspect in ui (#3726 )
* inspect in ui
* address round 1
* add catalogNum to AlbumInfo
Signed-off-by: Deluan <deluan@navidrome.org >
* remove dependency on metadata_old (deprecated) package
Signed-off-by: Deluan <deluan@navidrome.org >
* add `RawTags` to model
Signed-off-by: Deluan <deluan@navidrome.org >
* 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 <deluan@navidrome.org >
* try to simplify the performers logic
Signed-off-by: Deluan <deluan@navidrome.org >
* stylistic changes
---------
Signed-off-by: Deluan <deluan@navidrome.org >
Co-authored-by: Deluan <deluan@navidrome.org >
* remove param mutation
Signed-off-by: Deluan <deluan@navidrome.org >
* run automated SQLite optimizations
Signed-off-by: Deluan <deluan@navidrome.org >
* fix playlists import/export on Windows
* fix import playlists
* fix export playlists
* better handling of Windows volumes
Signed-off-by: Deluan <deluan@navidrome.org >
* handle more album ID reassignments
Signed-off-by: Deluan <deluan@navidrome.org >
* allow adding/overriding tags in the config file
Signed-off-by: Deluan <deluan@navidrome.org >
* 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 <deluan@navidrome.org >
* remove sortable from AlbumSongs columns
Signed-off-by: Deluan <deluan@navidrome.org >
* simplify query to get missing tracks
Signed-off-by: Deluan <deluan@navidrome.org >
* mark Scanner.Extractor as deprecated
Signed-off-by: Deluan <deluan@navidrome.org >
---------
Signed-off-by: Deluan <deluan@navidrome.org >
Signed-off-by: Henrik Nordvik <henrikno@gmail.com >
Co-authored-by: Caio Cotts <caio@cotts.com.br >
Co-authored-by: Henrik Nordvik <henrikno@gmail.com >
Co-authored-by: Kendall Garner <17521368+kgarner7@users.noreply.github.com >
2025-02-19 20:35:17 -05:00
Kendall Garner
3179966270
fix(metrics): write system metrics on start ( #3641 )
...
* fix(metrics): write system metrics on start
* add broken basic auth test
* refactor: simplify Prometheus instantiation
Signed-off-by: Deluan <deluan@navidrome.org >
* fix: basic authentication
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: move magic strings to constants
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: simplify prometheus http handler
Signed-off-by: Deluan <deluan@navidrome.org >
* add artist metadata to aggregrate sql
---------
Signed-off-by: Deluan <deluan@navidrome.org >
Co-authored-by: Deluan <deluan@navidrome.org >
2025-01-11 21:02:36 -05:00
Deluan Quintão
6c11649b06
fix(insights): fix issues and improve reports ( #3558 )
...
* fix(insights): show error whn reading library counts
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(insights): wait 30 mins before send first report
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(insights): send number of active players, grouped by client type
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(insights): disable reports when running in dev mode
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(insights): add Dockerfile to the docker build, to avoid `vcs.modified=true`
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(insights): add more linux fs types
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(insights): need admin permissions to retrieve library counts
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(insights): dev flag to disable player insights
Signed-off-by: Deluan <deluan@navidrome.org >
---------
Signed-off-by: Deluan <deluan@navidrome.org >
2024-12-18 20:37:35 -05:00
Deluan Quintão
8e2052ff95
feat(Insights): add anonymous usage data collection ( #3543 )
...
* feat(insights): initial code (WIP)
* feat(insights): add more info
* feat(insights): add fs info
* feat(insights): export insights.Data
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(insights): more config info
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor(insights): move data struct to its own package
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor(insights): omit some attrs if empty
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(insights): send insights to server, add option to disable
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(insights): remove info about anonymous login
Signed-off-by: Deluan <deluan@navidrome.org >
* chore(insights): fix lint
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(insights): disable collector if EnableExternalServices is false
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(insights): fix type casting for 32bit platforms
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(insights): remove EnableExternalServices from the collection (as it will always be false)
Signed-off-by: Deluan <deluan@navidrome.org >
* chore(insights): fix lint
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor(insights): rename function for consistency
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(insights): log the data sent to the collector server
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(insights): add last collection timestamp to the "about" dialog.
Also add opt-out info to the SignUp form
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(insights): only sends the initial data collection after an admin user is created
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(insights): remove dangling comment
Signed-off-by: Deluan <deluan@navidrome.org >
* feat(insights): Translate insights messages
Signed-off-by: Deluan <deluan@navidrome.org >
* fix(insights): reporting empty library
Signed-off-by: Deluan <deluan@navidrome.org >
* refactor: move URL to consts.js
Signed-off-by: Deluan <deluan@navidrome.org >
---------
Signed-off-by: Deluan <deluan@navidrome.org >
2024-12-17 17:10:55 -05:00
Deluan Quintão
69e2a6d620
build(netgo): make sure the project is always compiled with netgo build tag ( #3428 )
...
* build(netgo): make sure the project is always compiled with `netgo` build tag
* docs(netgo): better comments
2024-10-26 13:28:23 -04:00
Rob Emery
9c3b456165
feat(build): MSI installer improvements ( #3376 )
...
* feat(build): add a make target to build a msi installer locally
* Testing wrapping the executable in cmd
* build(ci): build msis in parallel
* feat(server): add LogFile config option
* Revert "Testing wrapping the executable in cmd"
This reverts commit be29592254cb903fd4904f2f50d4d1a860795d33.
* Adding --log-file for service executable
* feat(ini): wip
* feat(ini): parse nested ini section
* fix(conf): fix fatal error messages
* Now navidrome supports INI, we can use the built-in msi ini system
and not require the VBScript to convert it into toml
* File needs to be called .ini to be parsed as an INI and correct filename
needs to be passed to the service
* fix(msi): build msi locally
* fix(msi): pipeline
* fix(msi): pipeline
* fix(msi): pipeline
* fix(msi): pipeline
* fix(msi): pipeline
* fix(msi): Makefile
* fix(msi): more clean up
* fix(log): convert LF to CRLF on Windows
* fix(msi): config filename should be case-insensitive
* fix(msi): make it a little more idiomatic
* Including the latest windows release of ffmpeg into the msi
as built by https://www.gyan.dev/ffmpeg/builds/ (linked
to on the official ffmpeg source)
* This should version independent
* Need bash expansion for the * to work
* This will run twice, once for x86 and once for x64, I'll make it cache
the executable for now as it'll be quicker
* Silencing wget
* Add ffmpeg path to the config so Navidrome knows where to find it
* refactor: download ffmpeg from our repository
* When going back from the "Are you ready to install?" it should go back to the
Settings dialogue that you just came from
* fix: comments
---------
Co-authored-by: Deluan <deluan@navidrome.org >
2024-10-22 19:32:56 -04:00
Deluan Quintão
0232afd98d
fix(ui): service worker does not load new version of ui ( #3402 )
...
* fix(pwa): wip
* fix(pwa): wip
2024-10-16 21:39:14 -04:00
Kendall Garner
55730514ea
feat(server): provide native backup/restore mechanism ( #3194 )
...
* [enhancement]: Provide native backup/restore mechanism
- db.go: add Backup/Restore functions that utilize Sqlite's built-in online backup mechanism
- support automatic backup with schedule, limit number of files
- provide commands to manually backup/restore Navidrome
Notes:
`Step(-1)` results in a read-only lock being held for the entire duration of the backup.
This will block out any other write operation (and may hold additional locks.
An alternate implementation that doesn't block but instead retries is available at https://www.sqlite.org/backup.html#:~:text=of%20a%20Running-,database,-%2F*%0A**%20Perform%20an%20online (easily adaptable to go), but has the potential problem of continually getting restarted by background writes.
Additionally, the restore should still only be called when Navidrome is offline, as the restore process does not run migrations that are missing.
* remove empty line
* add more granular backup schedule
* do not remove files when bypass is set
* move prune
* refactor: small nitpicks
* change commands and flags
* tests, return path from backup
* refactor: small nitpicks
---------
Co-authored-by: Deluan <deluan@navidrome.org >
2024-10-01 19:58:54 -04:00
Deluan
92a1f19271
fix(scanner): make activity panel update rate configurable
2024-09-30 12:06:23 -04:00
Caio Cotts
f0240280eb
Add ShareURL configuration option
2024-09-15 17:26:58 -04:00
Reilly MacKenzie-Cree
d683688b0e
Recursively refresh playlist tracks within smart playlist rules ( #3018 )
...
* Recursively refresh playlists within smart playlist rules
Signed-off-by: reillymc <reilly@mackenzie-cree.net >
* Clean up recursive smart playlist functions
Signed-off-by: reillymc <reilly@mackenzie-cree.net >
* Add smart playlist refresh timeout config and tests for nested track refetching
Signed-off-by: reillymc <reilly@mackenzie-cree.net >
* Change SmartPlaylistRefreshTimeout to SmartPlaylistRefreshDelay, increase default value
* Revert `smartPlaylistRefreshDelay` default to 5 seconds
---------
Signed-off-by: reillymc <reilly@mackenzie-cree.net >
Co-authored-by: Deluan <deluan@navidrome.org >
2024-09-15 13:27:54 -04:00
Deluan
8ca1aefad6
Change DefaultPlaylistPublicVisibility to false
2024-08-28 19:23:19 -04:00
John White
67d11dd144
feat: imported playlists are public by default ( #3143 )
...
* feat: imported playlists are public by default
* chore: make linter happy
---------
Co-authored-by: John White <john@activecode.dev >
2024-08-28 19:20:05 -04:00
Deluan
dd4374cec6
Limit access to Jukebox for admins only (configurable).
...
Closes #2849
2024-05-07 19:35:43 -04:00
Deluan
aef49cb8d6
Add HTTPSecurityHeaders.CustomFrameOptionsValue option.
...
Requested in https://github.com/navidrome/navidrome/issues/248#issuecomment-1783768985
2024-05-02 12:35:16 -04:00
Deluan
27875ba2dd
Load mime_types from external file
2024-04-28 12:18:24 -04:00
vvdveen
8bff1ad512
Add AlbumPlayCountMode config option ( #2803 )
...
Closes #1032
* feat(album_repository.go): add kodi-style album playcount option - #1032
Signed-off-by: Victor van der Veen <vvdveen@gmail.com >
* fix format issue and remove reference to kodi (now normalized)
Signed-off-by: Victor van der Veen <vvdveen@gmail.com >
* reduced complexity but added rounding
Signed-off-by: Victor van der Veen <vvdveen@gmail.com >
* Use constants for AlbumPlayCountMode values
---------
Signed-off-by: Victor van der Veen <vvdveen@gmail.com >
Co-authored-by: Deluan <deluan@navidrome.org >
2024-04-27 14:10:40 -04:00
Jonathan
bcec15dc13
Externalize MPV command template ( #2948 )
...
* externalise MPVTemplate
* Remove unnecessary comment
---------
Co-authored-by: Deluan <deluan@navidrome.org >
2024-04-15 21:31:54 -04:00
Deluan
166eb37787
Use Go builtin min/max func
2024-02-16 21:53:16 -05:00
Johannes Engl
8f03454312
Make server unix socket file permission configurable via flag UnixSocketPerm ( #2763 )
...
* feat(any): Add flag unixsocketperm with default 0017 - #2625
Signed-off-by: johannesengl <hello@johannesengl.com >
* feat(server): Update unix socket file perm based on config - #2625
Signed-off-by: johannesengl <hello@johannesengl.com >
* Fix default value of socket.
* Refactor unix socket file creation.
* Remove misplaced comment
---------
Signed-off-by: johannesengl <hello@johannesengl.com >
Co-authored-by: Caio Cotts <caio@cotts.com.br >
Co-authored-by: Deluan <deluan@navidrome.org >
2024-01-20 14:50:30 -05:00
Deluan
51e07d4cb5
Add log.IsGreaterOrEqualTo, that take into consideration path-scoped log levels
2023-12-25 16:35:16 -05:00
Deluan Quintão
ab53313273
Add new PrefSortTags option ( #2696 )
2023-12-11 20:37:11 -05:00
Deluan
78d557c185
Remove LastFM shared key
2023-12-10 21:11:40 -05:00
Deluan Quintão
60a5fbe1fe
Optimize search3, by removing OFFSET when paginating ( #2655 )
...
* Optimize pagination, removing offset
* For search, don't add `where` clause for empty queries
* Revert "Replace `COUNT(DISTINCT primary_key)` with `COUNT(*)`"
Genres are required as part of the count queries, so filter by genres work
* Optimize search3 query, using order by id if it is a "" query.
Also fix the optimizePagination query logic
* Allow offset optimizer threshold to be configured
2023-11-27 13:06:23 -05:00
Matthias Schmidt
1b16e1140f
Jukebox mode ( #2289 )
...
* Adding cache directory to ignore-list
* Adding jukebox-related config options
* Adding DevEnableJukebox config option pls. dummy server
* Adding types and routers
* Now without panic
* First draft on parsing the action
* Some cleanups
* Adding playback server
* Verify audio device configuration
* Adding debug-build target to have full symbol support
* Adding beep sound library pls some example code. Not working yet
* Play a fixed mp3 on any interface access for testing purposes
* Put action code into separate file, adding stringer, more debug output, prepare structs, validation
* Put action parameter parser code where it belongs
* Have a single Action transporting all information
* User fmt.Errorf for error-generation
* Adding wide playback interface
* Use action map for parsing, stringer instead switch stmt.
* Use but only one switch case and direct dispatch, refactoring
* Add error handling and pushing to client
* send decent errormessage, no internal server error
* Adding playback devices slice and load it from config
* Combine config-verification and structure init
* Return user-specific device
* Separate playback server from device
* Use dataStore to retrieve mediafile by id
* WIP: Playlist and start/stop handling. Doing start/stop the hard way as of now
* WIP: set, start and stop work on one single song. More to come
* Dont need to wait for the end
* Merge jukebox_action.go into jukebox.go
* Remove getParameterAsInt64(). Use existing requiredParamInt() instead
* Dont need to call newFailure() explicitly
* Remove int64, use int instead.
* Add and set action now accept multiple ids
* Kickout copy of childFromMediaFile(). It is not needed here.
* Refactoring devices and playbackServer
* Turn (internal) playback.DeviceStatus into subsonic JukeboxStatus when rendering output. Indexes int64 -> int
* Now we have a position and playing status
* Switching gain to float32, xs:float is defined as 32 bit. Fixing nasty copy/pointer bug
* Now with volume control
* Start working the queue
* Remove user from device interface
* Rename function GetDevice -> GetDeviceForUser to make intention clearer
* Have a nice stringer for the queue
* User Prepared boolean for now to allow pause/unpause
* Skipping works, but without offsets
* Make ChildFromMediaFile public to be used in jukebox get() implementation
* Return position in seconds and implement offset-skip in seconds
* Default offset to 0
* Adding a simple setGain implementation
* Prepare for transcoding AAC
* WIP: transcode to WAV to use beeps wav decoder. Not done yet.
* WIP: out of sheer desparation: convert to MP3 (which works) rather than WAV to troubleshoot issue.
* Use FLAC as intermediate format to play Apple AAC
* A bit of cleanup
* Catching the end-of-stream event for further reactions
* Have a trackSwitching goroutine waiting on channel when track ends
* Move decoder code into own file. Restructure code a bit
* Now with going on to play the next song in the playlist
* Adding shuffle feature
* Implementing remove action
* Cleanup code
* Remove templates for ffmpeg mp3 generation. Not needed anymore.
* Adding some documentation
* Check whether offset into track is in range. Fixing potential remove track bug. Documentation
* Make golangci-lint happy: handling return values
* Adding test suite and example dummy for playback package
* Adding some basic queue tests
* Only use Jukebox.Enabled config option
* Adding stream closing handling
* Pass context.Context to all PlaybackDevice methods
* Remove unneeded function
* Correct spelling
* Reduce visibility of ChildFromMediaFile
* Decomplicate action-parsing
* Adding simple tempfile-based AAC->FLAC transcoding. No parallel reading and writing yet.
* Try to optimize pipe-writing, tempfile-handling and reading. Not done yet.
* Do a synchronous copy of the tempfile. Racecondition detected
* More debugging statements and fixing the play/pause bug. More work needed
* Start the trackSwitcher() with each device once. Return JSON position even if its 0. More debug-output
* Moving all track-handling code into own module
* Fix typo. Do not pass ctx around when not applicable
* WIP: More refactoring, debugging output
* Fix nil pointer
* Repairing MP3 playback by pinning indirect dependencies: hajimehoshi/go-mp3 and hajimehoshi/oto
* Do not forget to cleanup after a skip action
* Make resync with master easy
* Adding missing mocks
* Adding missing error-handling found by linter
* Updating github.com/hajimehoshi/oto
* Removing duplicate function
* Move BEEP-related code into own package
* Juggle beep-related code around as preparation for interface access
* More refactoring for interface separation
* Gather CloseDevice() behind Track interface.
* Adding skeleton, draft audio-interface using mpv.io
* Adding majority of interface commands using messages to mpv socket.
* Adding end-of-stream handling
* MPV: start/stop are working
* postition is given in float in mpv
* Unify Close() and CloseDevice(). Using temp filename for controlling socket
* Wait until control-socket shows up. Cleanup socket in Close()
* Use canceable command. Rename to Executor
* Skipping tracks works now
* Now with actually setting the position
* Fix regain
* Add missing error-handling found by linter
* Adding retry mode on time-pos property getter
* Remove unneeded code on queue
* Putting build-tag beep onto beep files
* Remove deprecated call to rand.Seed()
"As of Go 1.20 there is no reason to call Seed with a random value. Programs that call Seed with a known value to get a specific sequence of results should use New(NewSource(seed)) to obtain a local random generator."
* Using int32 to conform to Subsonic API spec
* Fix merge error
* Minor style changes
* Get username from context
---------
Co-authored-by: Deluan <deluan@navidrome.org >
2023-09-10 11:25:22 -04:00
Deluan
a002830775
Fix EnableMediaFileCoverArt option default value
2023-07-10 18:07:58 -04:00
tomleb
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 <deluan@deluan.com >
Co-authored-by: Deluan <deluan@navidrome.org >
2023-06-02 17:14:11 -04:00
Deluan
c4c99b7f75
Make GroupAlbumReleases false by default
2023-05-31 15:40:20 -04:00
certuna
52b77e4194
Support for Original Date, Release Date & splitting/grouping of album editions ( #2162 )
...
* Update AlbumGridView.js
* Update AlbumDetails.js
* Update AlbumDetails.js
* Create DoubleRangeField.js
* Update and rename DoubleRangeField.js to RangeFieldDouble.js
* Update RangeFieldDouble.js
* Update AlbumGridView.js
* Update AlbumDetails.js
* Update RangeFieldDouble.js
* Update index.js
* Update RangeFieldDouble.js
* Update RangeFieldDouble.js
* Update RangeFieldDouble.js
* Update RangeFieldDouble.js
* Update RangeFieldDouble.js
* Update AlbumDetails.js
* Update RangeFieldDouble.js
* Update AlbumDetails.js
* Update RangeFieldDouble.js
* Update AlbumDetails.js
* Update RangeFieldDouble.js
* Update RangeFieldDouble.js
* Update AlbumDetails.js
* Update AlbumDetails.js
* Update RangeFieldDouble.js
* Update RangeFieldDouble.js
* Update AlbumDetails.js
* Update RangeFieldDouble.js
* Update AlbumDetails.js
* Update en.json
* Update en.json
* Update AlbumDetails.js
* Update RangeFieldDouble.js
* Update AlbumGridView.js
* Update AlbumDetails.js
* Update AlbumSongs.js
* Update ContextMenus.js
* Update SongDatagrid.js
* Update AlbumSongs.js
* Update SongDatagrid.js
* Update SongDatagrid.js
* Update SongDatagrid.js
* Update AlbumSongs.js
* Update SongList.js
* Update playlist_track_repository.go
* Update 20230113000000_release_year.go
* Update PlayButton.js
* Update mediafile_repository.go
* Update album.go
* Update playlist_track_repository.go
* Update playlist_track_repository.go
* Update SongDatagrid.js
* Update 20230113000000_release_year.go
* Update SongDatagrid.js
* Update AlbumSongs.js
* Update SongDatagrid.js
* Update SongDatagrid.js
* Update SongDatagrid.js
* Update SongDatagrid.js
* Update AlbumDetails.js
* Update AlbumSongs.js
* Update AlbumSongs.js
* Update RangeFieldDouble.js
* Update SongDatagrid.js
* Update 20230113000000_release_year.go
* Update 20230113000000_release_year.go
* Update 20230113000000_release_year.go
* Update 20230113000000_release_year.go
* Update AlbumSongs.js
* Update AlbumSongs.js
* Update mapping.go
* Update RangeFieldDouble.js
* Update AlbumGridView.js
* Update AlbumSongs.js
* Update en.json
* Update SongDatagrid.js
* Update SongDatagrid.js
* Update metadata.go
* Update mapping.go
* Update AlbumDetails.js
* Update AlbumGridView.js
* Update RangeFieldDouble.js
* Update mapping.go
* Update metadata.go
* Update mapping.go
* Update AlbumDetails.js
* Update 20230113000000_release_year.go
* Update AlbumDetails.js
* Update en.json
* Update configuration.go
* Update mapping.go
* Update configuration.go
* Update mediafile.go
* Update metadata.go
* Update RangeFieldDouble.js
* Update 20230113000000_release_year.go
* Update configuration.go
* Update mapping.go
* Update mediafile.go
* Update mapping.go
* Update RangeFieldDouble.js
* Update RangeFieldDouble.js
* Update RangeFieldDouble.js
* Update RangeFieldDouble.js
* Update RangeFieldDouble.js
* Update 20230113000000_release_year.go
* Update AlbumDetails.js
* Update RangeFieldDouble.js
* Update mapping.go
* Update metadata.go
* Update album.go
* Update mediafile.go
* Update mediafile.go
* Update album.go
* Update fields.go
* Update mediafile_repository.go
* Update playlist_track_repository.go
* Update AlbumSongs.js
* Update SongDatagrid.js
* Update PlayButton.js
* Update SongList.js
* Update ContextMenus.js
* Update SongDatagrid.js
* Update metadata.go
* Update ArtistShow.js
* Update mapping.go
* Update configuration.go
* Update mapping.go
* Update metadata.go
* Update metadata.go
* Update mapping.go
* Update metadata.go
* Update metadata.go
* Update mapping.go
* Update 20230113000000_release_year.go
* Update 20230113000000_release_year.go
* Update mapping.go
* Update metadata.go
* Update metadata.go
* Update album.go
* Update mediafile.go
* Update AlbumDetails.js
* Update AlbumSongs.js
* Update album.go
* Update mediafile.go
* Update metadata.go
* Update mediafile.go
* Update 20230113000000_release_year.go
* Update 20230113000000_release_year.go
* Update album.go
* Update mediafile.go
* Update RangeFieldDouble.js
* Update AlbumDetails.js
* Update AlbumGridView.js
* Update en.json
* Update AlbumGridView.js
* Update RangeFieldDouble.js
* Update and rename 20230113000000_release_year.go to 20230113000000_release_date.go
* Update album.go
* Update mediafile.go
* Update fields.go
* Update playlist_track_repository.go
* Update mediafile_repository.go
* Update mapping.go
* Update metadata.go
* Update mapping.go
* Update SongDatagrid.js
* Update RangeFieldDouble.js
* Update index.js
* Update ContextMenus.js
* Update PlayButton.js
* Create FormatDate.js
* Update SongList.js
* Update AlbumDetails.js
* Update AlbumSongs.js
* Update AlbumSongs.js
* Update en.json
* Update AlbumDetails.js
* Update album.go
fixed conflict I think?
* Update mediafile.go
fixed conflict
* Format with goimports
* Update SongDatagrid.js
only show Cat # in desktop view
* Update metadata_internal_test.go
* Update metadata_test.go
* Delete test.mp3
* Add files via upload
mp3 test file with Date, Original Date and Release Date
* Update metadata_test.go
* Update metadata_test.go
* Update metadata_test.go
* Update metadata_test.go
* Update taglib_test.go
* Delete test.mp3
* Add files via upload
file with replaygain & dates
* Update AlbumGridView.js
* Update AlbumDetails.js
* Update AlbumSongs.js
* Update ContextMenus.js
* Update FormatDate.js
* Update PlayButton.js
* Update RangeFieldDouble.js
* Update SongDatagrid.js
* Update AlbumSongs.js
* Update SongDatagrid.js
* Update AlbumSongs.js
* Fix formatting
* Update mapping.go
* Update AlbumSongs.js
* Update SongDatagrid.js
* Update SongDatagrid.js
prettier
* Create RangeDoubleField.js
rename of RangeFieldDouble.js
* Update AlbumGridView.js
RangeFieldDouble -> RangeDoubleField
* Update mediafile.go
AllOrNothing() -> allOrNothing()
* Update metadata_internal_test.go
getYear -> getDate
* Update AlbumDetails.js
wrote suggested changes
* Update en.json
Editions -> Releases & fixed the field name
* Update configuration.go
Rename Editions -> Releases
* Update 20230113000000_release_date.go
Editions -> Releases
* Update album.go
Editions -> Releases
* Update mediafile.go
Editions -> Releases
* Update AlbumDetails.js
Editions -> Releases
* Update AlbumSongs.js
Editions -> Releases
* Update RangeDoubleField.js
Editions -> Releases
* Update SongDatagrid.js
Editions -> Releases
* Update index.js
FormatFullDate and RangeDoubleField
* Rename FormatDate.js to FormatFullDate.js
* Delete RangeFieldDouble.js
* Update mediafile.go
AllOrNothing -> allOrNothing
* Update mapping.go
Editions -> Releases
* Update AlbumDetails.js
prettier
* Update SongDatagrid.js
showReleaseRow -> showReleaseDivider
* Update AlbumSongs.js
showReleaseRow -> showReleaseDivider for clarity
* Update and rename 20230113000000_release_date.go to 20230515184510_add_release_date.go
- rename the migration file
- fixed the import to goose/v3
- additional db fields for original date & year
* Update 20230515184510_add_release_date.go
* Update fields.go
* Update album.go
* Update mediafile.go
* Update mapping.go
* Update AlbumDetails.js
* Update en.json
* Update AlbumDetails.js
* Update AlbumDetails.js
now hopefully prettier
* Update mapping.go
---------
Co-authored-by: Deluan <deluan@navidrome.org >
2023-05-19 15:27:47 -04:00