bhj / KaraokeEternal

Open karaoke party system
https://www.karaoke-eternal.com
ISC License
460 stars 70 forks source link

Enhancement - Allow user to select preferred version of a track #60

Closed h0rnman closed 4 months ago

h0rnman commented 1 year ago

For those of us with large collections that contain multiple versions of the same track by different vendors, it would be extremely helpful to allow users to either set their own version preferences on a per-track basis, or at least allow them to select the version of the track after they've added it into the queue. Persistence across rooms/sessions would be great, but just having the option each time you select a track would be useful.

bhj commented 1 year ago

Hi, currently admins can set a preferred version via the Info modal (swipe left on a song in the Library or Queue view).

Tip: If you always want to prefer songs from one producer over another, put them in their own Media Folder and make that folder the first one in the list.

Let me know if that helps!

h0rnman commented 1 year ago

Yeah, I know that I can pick a preferred version as an admin, but my library is around 82,000 tracks with 37,000 unique titles. Most of what I have is 1:1 or 2:1, but there are several hundred more popular tunes that I have 8-10 versions for, and not all of my guests prefer the same versions of some tracks (person A prefers SoundFly exclusively, person B prefers Zoom for these 8 favorites, but likes a random internet find for one of person A's tracks, etc). Being able to offload this to the guest would be very helpful to this kind of situation.

bhj commented 1 year ago

Gotcha. The reason this will be tricky is that queue entries are currently based on songId (rather than mediaId). Logic being that media could be added/removed and the queue entries would be intact as long as there's at least one media file for a song.

Not an insurmountable problem; just more than a UI addition. Will leave this open if anyone wants to discuss tackling it. Thanks!

h0rnman commented 1 year ago

Yeah, I was looking at the data structures and wondered if it might be a bigger ask than it seems on the surface. Would it be possible (or easier) to add something like a user_media_preferred_xref table that maps users.UserID to media.MediaID? Something like that would allow for the default version to be the MediaID for the SongID being selected (if present) otherwise, use the current behavior (Admin preferred or First Found). This could probably even be handled in the user account management screen if it's too fiddly to implement into the main flow of the application. I know this is kind of a niche use-case. I wish I knew more about node development - i can see the db side of it pretty clearly, but I don't know enough about node to be able to create a PR. Thanks for taking the time to look, I appreciate it.

bhj commented 1 year ago

That's a good point! It'd make sense to remember users' preferences, so +1 on the new table you described.

I think two things that will also help are 1) per-room preferences, which a lot of pending features depend on and is definitely planned, and 2) ability for users to preview songs, which is something I've wanted for a while, and have been trying to push the Player component to be more modular.

And yeah, this project actually began as a way to learn Node/React, so maybe not a bad starting point. Just throwing that out there :-D

bhj commented 4 months ago

A year on, I'm still +1 on this but can't say there are plans to implement it. If someone wants to try to tackle this I'm happy to help - closing for now.