Deluan
0ae2944073
Refactor random functions
2024-05-11 20:04:21 -04:00
Deluan
f3bb022238
Add sampleRate to the DB
2024-05-11 17:57:45 -04:00
Deluan
c0885b55db
Fix M3U mimetype on Debian Bullseye
2024-05-09 22:26:15 -04:00
Kendall Garner
a4c2232041
Sort repeated lyrics that may be out of order ( #2989 )
...
With synchronized lyrics with repeated text, there is not a guarantee that the repeat is in order (e.g. `[00:00.00][00:10.00] a\n[00:05.00]b`).
This change will post-process lyrics with repeated timestamps in one line to ensure that it is always sorted.
2024-05-01 21:54:46 -04:00
Deluan
f5df948eb1
Fix scrobble error spam in the logs.
...
Relates to #2831 and #2975
2024-04-26 16:59:14 -04:00
crazygolem
18143fa5a1
Use the RealIP middleware also behind a reverse proxy ( #2858 )
...
* Use the RealIP middleware only behind a reverse proxy
* Fix proxy ip source in tests
* Fix test for PR#2087
The PR did not update the test after changing the behavior, but the test still
passed because another condition was preventing the user from being created in
the test.
* Use RealIP even without a trusted reverse proxy
* Use own type for context key
* Fix casing to follow go's conventions
* Do not apply RealIP middleware twice
* Fix IP source in logs
The most interesting data point in the log message is the proxy's IP, but
having the client IP too can help identify integration issues.
2024-04-25 20:43:58 -04:00
Deluan
97c7e5daaf
Use new slices package from Go standard lib
2024-02-16 22:00:44 -05:00
Deluan
166eb37787
Use Go builtin min/max func
2024-02-16 21:53:16 -05:00
Deluan
58f64355c2
Bump golang.org/x/exp version
2024-02-16 20:43:12 -05:00
Caio Cotts
bf2bcb1279
Fix null values in DB ( #2840 )
...
* Fix album image_files being null.
* Fix small nitpick.
* Use ExecContext instead of Exec.
* Change more columns to not null and set default values.
* Remove columns that don't need to be changed from migration.
* Fix typo.
* Remove unnecessary select statements.
* Remove duplicate code.
* Do not apply changes to radio table.
* Do not apply changes full_text columns and respective indexes.
* Fix musicbrainz columns.
* Rename migration.
* Make ExternalInfoUpdatedAt nullable
* Make Share's timestamps nullable
---------
Co-authored-by: Deluan Quintão <deluan@navidrome.org>
2024-02-07 20:45:08 -05:00
flyingOwl
dfa453cc4a
Add (not)inplaylist operator to smart playlists ( #1884 )
...
Closes #1417
A smart playlist can use the playlist id for filtering. This can be
used to create combined playlists or to filter multiple playlists.
To filter by a playlist id, a subquery is created that will match the
media ids with the playlists within the playlist_tracks table.
Signed-off-by: flyingOwl <ofenfisch@googlemail.com>
2024-01-20 18:22:17 -05:00
Deluan
e50382e3bf
Fix ReplayGain values not being retrieved from DB
2023-12-27 21:14:54 -05:00
Kendall Garner
814161d78d
Add OS Lyrics extension ( #2656 )
...
* draft commit
* time to fight pipeline
* round 2 changes
* remove unnecessary line
* fight taglib. again
* make taglib work again???
* add id3 tags
* taglib 1.12 vs 1.13
* use int instead for windows
* store as json now
* add migration, more tests
* support repeated line, multiline
* fix ms and support .m, .mm, .mmm
* address some concerns, make cpp a bit safer
* separate responses from model
* remove [:]
* Add trace log
* Try to unblock pipeline
* Fix merge errors
* Fix SIGSEGV error (proper handling of empty frames)
* Add fallback artist/title to structured lyrics
* Rename conflicting named vars
* Fix tests
* Do we still need ffmpeg in the pipeline?
* Revert "Do we still need ffmpeg in the pipeline?"
Yes we do.
This reverts commit 87df7f6df79bccee83f48c4b7a8118a7636a5e66.
* Does this passes now, with a newer ffmpeg version?
* Revert "Does this passes now, with a newer ffmpeg version?"
No, it does not :(
This reverts commit 372eb4b0ae05d9ffe98078e9bc4e56a9b2921f32.
* My OCD made me do it :P
---------
Co-authored-by: Deluan Quintão <deluan@navidrome.org>
2023-12-27 20:20:29 -05:00
Deluan
a186a795f6
Omit empty Genre attributes
2023-12-27 12:44:25 -05:00
Deluan
465cc091b0
Convert internal disc number representation to int
2023-12-09 13:53:38 -05:00
Deluan
af7eead037
Add discs to album
2023-12-09 13:53:38 -05:00
Deluan Quintão
0ca0d5da22
Replace beego/orm with dbx ( #2693 )
...
* Start migration to dbx package
* Fix annotations and bookmarks bindings
* Fix tests
* Fix more tests
* Remove remaining references to beego/orm
* Add PostScanner/PostMapper interfaces
* Fix importing SmartPlaylists
* Renaming
* More renaming
* Fix artist DB mapping
* Fix playlist updates
* Remove bookmarks at the end of the test
* Remove remaining `orm` struct tags
* Fix user timestamps DB access
* Fix smart playlist evaluated_at DB access
* Fix search3
2023-12-09 13:52:17 -05:00
Deluan
21f1354cd1
Revert "Bump golang.org/x/exp, change slices.SortFunc function call"
...
This reverts commit 474f32f1
2023-11-24 17:57:22 -05:00
Deluan
474f32f1b8
Bump golang.org/x/exp, change slices.SortFunc function call
2023-11-24 16:38:47 -05:00
Kendall Garner
79870b1090
Do not empty old artist metadata ( #2423 )
2023-11-16 19:20:37 -05:00
Kendall Garner
77ace8570c
Coalesce genre to null for smart playlist ( #2573 )
2023-10-31 13:22:57 -04:00
Philipp Wolfer
c8608956be
Fix listenbrainz submission and clarify MusicBrainz recording ID field ( #2279 )
...
* Fix MB recording ID parameter name for ListenBrainz submission
This follows the ListenBrainz API documentation.
Fixes #1657
* Rename MediaFile.MbzTrackID to MbzRecordingID
This better reflects the actual data. That the MusicBrainz
recording ID is stored in file metadata as musicbrainz_trackid
is a historical artifact.
* Rename database column mbz_track_id to mbz_recording_id
2023-06-16 18:00:01 -04:00
Deluan
85d43d2366
Add tests to date roll-ups
2023-05-19 21:22:23 -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
Deluan
9590b3c25d
Use the highest resolution artist image from Spotify
2023-04-10 15:34:22 -04:00
Deluan
a7d3e6e1f1
Add option to allow share to be downloaded
2023-03-10 23:33:29 -05:00
Deluan
a22eef39f7
Add share download endpoint
2023-03-10 23:33:29 -05:00
Deluan
806713719f
Add lastUpdated to coverArt ids. Helps with invalidating art cache client-side.
2023-02-08 20:03:31 -05:00
Deluan
9b81aa4403
Fix artwork resolution when paths contains :. Fix #2137
2023-02-02 12:18:55 -05:00
Aleksey Lobanov
457e1fc97b
Base SQL metrics in MetricsWorker ( #2002 )
...
* feat: Add metrics worker
* refactor: Add todos for useful for metrics methods
* feat: Run MetricsWorker is Prometheus is Enabled
* refactor: Unused low-level variable was removed in metrics
* feat: No worker for metrics, add more
* refactor: Unnecessary todo removed
* refactor: Remove dead unused constant
* Reduce metrics public interface
Co-authored-by: Deluan <deluan@navidrome.org>
2023-01-24 19:26:07 -05:00
Deluan
69b36c75a5
Add meta tags to show cover and share description in social platforms
2023-01-24 18:36:47 -05:00
Deluan
e34f26588e
Fix empty entry collection in Shares
2023-01-24 18:36:47 -05:00
Deluan
d0dceae094
Add getShares and createShare Subsonic endpoints
2023-01-24 18:36:46 -05:00
Deluan
84aa094e56
More work on Shares
2023-01-24 18:36:45 -05:00
Deluan
ab04e33da6
Initial work on Shares
2023-01-24 18:36:45 -05:00
Deluan
8956f5e7fd
Fix Album.MaxYear calculation
2023-01-19 09:34:58 -05:00
Kendall Garner
93adda66d9
Get album info (when available) from Last.fm, add getAlbumInfo endpoint ( #2061 )
...
* lastfm album.getInfo, getAlbuminfo(2) endpoints
* ... for description and reduce not found log level
* address first comments
* return all images
* Update migration timestamp
* Handle a few edge cases
* Add CoverArtPriority option to retrieve albumart from external sources
* Make agents methods more descriptive
* Use Last.fm name consistently
Co-authored-by: Deluan <deluan@navidrome.org>
2023-01-17 20:22:54 -05:00
Deluan
5564f00838
Some refactor, log message changes
2023-01-17 17:26:48 -05:00
Kendall Garner
1324a16fc5
ReplayGain support + audio normalization (web player) ( #1988 )
...
* ReplayGain support
- extract ReplayGain tags from files, expose via native api
- use metadata to normalize audio in web player
* make pre-push happy
* remove unnecessary prints
* remove another unnecessary print
* add tooltips, see metadata
* address comments, use settings instead
* remove console.log
* use better language for gain modes
2023-01-17 15:57:19 -05:00
Kendall Garner
8877b1695a
Add Internet Radio support ( #2063 )
...
* add internet radio support
* Add dynamic sidebar icon to Radios
* Fix typos
* Make URL suffix consistent
* Fix typo
* address feedback
* Don't need to preload when playing Internet Radios
* Reorder migration, or else it won't be applied
* Make Radio list view responsive
Also added filter by name, removed RadioActions and RadioContextMenu, and added a default radio icon, in case of favicon is not available.
* Simplify StreamField usage
* fix button, hide progress on mobile
* use js styles over index.css
Co-authored-by: Deluan <deluan@navidrome.org>
2023-01-15 15:11:37 -05:00
Deluan
16c869ec86
Optimize playlist cover generation
2023-01-13 22:18:34 -05:00
Deluan
c90468b895
Find artist.* image in Artist folder
2023-01-13 22:18:34 -05:00
Deluan
918fee3ea3
Artwork reader for Artist
2023-01-13 22:18:34 -05:00
Deluan
bf461473ef
Add local agent, only for images
2023-01-13 22:18:34 -05:00
Deluan
df0f140f9f
Don't refresh smart playlists when generating covers
2023-01-01 20:28:03 -05:00
Deluan
0c7c6ba020
PreCache Playlists CoverArt
2022-12-28 15:31:56 -05:00
Deluan
61e5523457
Handle "naked" CoverArtIDs (IDs of album, mediafiles and playlists)
2022-12-28 15:31:56 -05:00
Deluan
501386b11f
Parse correctly playlist CoverArt ids
2022-12-28 15:31:56 -05:00
Deluan
8f3387a894
Fix tests and clean up code a bit
2022-12-28 15:31:56 -05:00
Deluan
332900774d
Rename DevFastAccessCoverArt to EnableMediaFileCoverArt
2022-12-28 15:31:56 -05:00
Deluan
92ddae4a65
Created dedicated artwork readers
2022-12-28 15:31:56 -05:00
Deluan
8c1cd9c273
Refactor file type functions
2022-12-28 15:31:56 -05:00
Deluan
8e640bb858
Implement new Artist refresh
2022-12-28 15:31:56 -05:00
Deluan
0da27e8a3f
Add image cache back
2022-12-28 15:31:56 -05:00
Deluan
87d4db7638
Handle mediafile covers
2022-12-28 15:31:56 -05:00
Deluan
213ceeca78
Resize if requested
2022-12-28 15:31:56 -05:00
Deluan
7b87386089
Load artwork from embedded
2022-12-28 15:31:56 -05:00
Deluan
c36e77d41f
Remove CoverArtID, fix tests
2022-12-28 15:31:56 -05:00
Deluan
c430401ea9
Remove current artwork implementation
2022-12-28 15:31:56 -05:00
Deluan
0130c6dc13
Add all images found for each album in the database
2022-12-28 15:31:56 -05:00
Deluan
2f90fc9bd4
Move album refresh to scanner
2022-12-28 15:31:56 -05:00
Deluan
566ae93950
Remove old refresh code
2022-12-28 15:31:56 -05:00
Deluan
83ff44f5f4
Move cover art discovery (temporarily) to model
2022-12-28 15:31:56 -05:00
Deluan
28e7371d93
Moved logic of collapsing songs into albums to model package
...
(it should really be called domain.... maybe will rename it later)
2022-12-28 15:31:56 -05:00
Deluan
e03ccb3166
Replace MinInt/MaxInt with generic versions
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
28389fb05e
Add command line M3U exporter. Closes #1914
2022-12-21 14:39:40 -05:00
Deluan
bbd3882a75
Some clean-up in criteria package
2022-10-04 15:24:29 -04:00
Zane van Iperen
c7ef4bd803
Capture "musicbrainz_releasetrackid" tag ( #1827 )
...
* db/migration: typo fix
* model: add MbzReleaseTrackID field
* scanner: capture the musicbrainz_releasetrackid tag
2022-10-01 12:13:47 -04:00
Deluan
0798959be8
Add asasalint linter
2022-09-30 19:55:44 -04:00
Deluan
4cf43ed735
Only compute version once
2022-09-14 21:09:39 -04:00
Deluan
67f2a89d89
Fix tracks never "loved" to be selected in Smart Playlists. Refer to https://github.com/navidrome/navidrome/issues/1417#issuecomment-1163423575
2022-07-27 21:09:39 -04:00
Deluan
31882abf6f
Upgrade Ginkgo to V2
2022-07-26 16:53:17 -04:00
Deluan
50ff8bcce7
Add "random" sort option for Smart Playlists
2022-02-09 09:39:42 -05:00
Deluan
9e79b5cbf2
Fix potential SQL injection in Smart Playlists
2022-01-18 21:36:29 -05:00
Deluan
cbeaadf8e2
Fix logging smart playlist's song count
2021-11-20 12:29:09 -05:00
Deluan
92c31c961d
Fix values from annotation table cannot be compared to 0
...
Solves this issue: https://github.com/navidrome/navidrome/issues/1417#issuecomment-974052454
2021-11-19 18:22:33 -05:00
BIKI DAS
da26c5cfe0
Combined multiple appends into a single one ( #1464 )
2021-11-17 19:51:44 -05:00
Deluan
0d9dcebf32
Fix playlist cannot be empty via Subsonic API
2021-11-05 10:23:45 -04:00
Deluan
9422373be0
Optimize AlbumRepository.GetAll and add a GetAllWithoutGenres method specifically for Subsonic API, where multiple-genres are not required
2021-11-02 21:19:49 -04:00
Deluan
8c2e4da396
Fix dateLoved in criteria. Now log invalid field names in criteria
2021-10-31 20:31:11 -04:00
Deluan
133fed344f
Add owner_id to playlist
2021-10-31 15:08:06 -04:00
Deluan
a42aeff88d
Optimize queries by path, should speed up the scanner a bit
2021-10-29 13:11:51 -04:00
Deluan
5e87280750
Load playlist track genres
2021-10-26 18:46:08 -04:00
Deluan
5dce499d6d
Fix/Optimized Playlist tracks deletion
2021-10-26 14:05:28 -04:00
Deluan
af00503b77
Optimize playlist updates
2021-10-26 10:45:14 -04:00
Deluan
83eaafcbfb
Add dateLoved Criteria field
2021-10-25 16:44:59 -04:00
Deluan
93ce0b5683
Fix Genre field and Contains/NotContains/StartsWith/EndsWith in Criteria (Smart Playlists)
2021-10-25 16:17:03 -04:00
Deluan
cc1659aa73
Better way to match top songs from external sources (Last.fm)
2021-10-23 20:26:30 -04:00
Deluan
d169f54e7d
Rename hasCoverArt field in criteria
2021-10-23 20:25:28 -04:00
Deluan
c73f64ee3a
Removed unused code
2021-10-23 20:25:28 -04:00
Deluan
2c860edeb5
Don't import invalid .nsp files
2021-10-23 20:25:28 -04:00
Deluan
6a550dab77
Use new Criteria and remove SmartPlaylist struct
2021-10-23 20:25:28 -04:00
Deluan
3972616585
New Criteria API
2021-10-23 20:25:28 -04:00
Deluan
d21932bd1b
First version of SmartPlaylists being generated on demand
2021-10-23 20:25:28 -04:00
Deluan
c72add516a
Add methods to Playlist model
...
Also, don't load genres for Playlists tracks (not necessary for now)
2021-10-23 20:25:28 -04:00
Deluan
d200933b68
Reduce number of queries for some playlists operations.
...
Also allow admins to update/delete playlists from other users in the Subsonic API. Closes #1366
2021-10-23 20:25:28 -04:00
Deluan
815623715e
Load SmartPlaylists rules from DB
2021-10-23 20:25:28 -04:00
Deluan
cf8d08ec26
Initial drafts for Smart Playlists
2021-10-23 20:25:28 -04:00
Deluan
6c3e45de41
Add songs to playlists with drag and drop
2021-10-02 13:14:33 -04:00