Commit Briefs
don't set the imsg fd as blocking mode
just do a poll before imsg_read in player_disptach to wait for data to read. It's not performance-critical code, so this is fine. If it were important not to do an extra poll(2), for example when we're called is called after player_pendingimsg we already know there's something to read, we could move the polling in the case `n == 0' below.
amused monitor: allow to pass a list of event as filter
it's easier / simpler for scripts to do $ amused monitor next,prev,jump rather than $ amused monitor | egrep --line-buffered 'next|prev|jump'
CHANGES for 0.6 (tags/0.6)
don't send the song' path to the player process
we're not relying anymore on the file extension, so this information is useless for the player.
don't call player_sendeof on IMSG_STOP
the refactoring introduced this error where we call report an EOF upon IMSG_STOP, making the player infinitely loop.
add a simple filetype detector instead of relying on file extension
just a bit of "magic" :) Flac are easy, they always start with "fLaC". mp3 are weird because they either start with "ID3" (but this theoretically only ensures that's a tagged file, not an mp3) or 0xFF 0xFB. Ogg Opus should have a magic sequence "OpusHead" somewhere near the start of the file but also have the ogg' "OggS" magic bytes. I hope it's enough to distinguish between Ogg Opus and Vorbis. Another option would be to refactor play_oggvorbis/opus to not close the file on failure and try in cascade the play_* functions, but it's more complex and this solution seems to be enough.
refactor player_playnext: return status code
let the caller decide to call senderr or sendeof.