This adds very basic support for artist-based smartplaylists. There are only very few possible rules i.e. artist, genre, moods, styles, born, bandformed, disbanded, died, biography, instruments and a compilation artist switch (not sure if this one makes sense I never really understood how that works). These rules could be extended if necessary.
I extracted the changes to SmartPlaylist.cpp which were actually fixes for existing bugs (which nobody noticed so far it seems) and already pushed them to master.
@jmarshallnz or @night199uk could one of you shed some light on the implications of enabling/disabling "include artists who appear only on compilations"? Does it change the way the scraper works (i.e. it ignores those artists if enabled) or does it only change the way the SQL queries in CMusicDatabase::GetArtistsNav work (with the albumArtistsOnly parameter)? If the former holds true the "compilation artists" rule I added does not make any sense otherwise IMO it does.
It's not an advanced setting it's a GUI setting in Settings -> Music -> Library. I always keep it disabled to get a clean list of artists but if I understood @night199uk right he plans to improve scraping/organization of all those "Foo feat. Bar" so it might make sense to just keep it on the SQL level i.e. grab the information for all the artists but in Music -> Artists only show the album artists. Then maybe add a new node Music -> Compilation artists where only those artists are shown.
Thinking about it I'll remove that rule/filter because I have neither the understanding for it nor the items/database to actually test it.
@night199uk: I've removed that part for now because I can't test it anyway. I was also confused by boolFeatured and bCompilation so I can still add it back once your musicdatabase changes/refactor have been merged as well.
smartplaylists: add support for artist-based smartplaylists
jsonrpc: use the new sorting implementation for AudioLibrary.GetArtists
@cptspiff Thanks for the review and for spotting that oopsie. I fixed the issues you pointed out.