Commits


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.


don't leak file descriptor on player_playnext failure


refactor player_playnext: return status code let the caller decide to call senderr or sendeof.


be slightly more informative on failures


use the standard Ds width for the options listing


we're on -current now


amused 0.5 * unbreak opus and ogg vorbis * handle flacs with bps != 16 and/or channels != 2 * speed up `load' a lot (especially if over NFS)


add back missing memzero


use a more readable strncmp to look for prefixes also while here stick an `else' before the second clausole. We're supposed to trim out only '> ' and ' ', but the missing else would also trim out ' ' after a '> '!


get rid of realpath during load it has a non-ignorable cost over NFS (sdk@ reported ~30 seconds to load 64k songs, and up to 5 minutes over wifi!) and don't provide us any real gain: files can still vanish after being imported or may appear later. The only advantage of realpath was that it would clean up the path from segments like "/./" and resolve the ".." components, but that's a minor issue anyway. prodded by, discussed with and tested by sdk@, thanks a lot!


typo


tweak the readme


handle flacs with bps != 16 and/or channels != 2


reuse main_send_player instead of filling the params for imsg_compose_event.


...and unbreak ogg vorbis too... i'm seriously shocked at how bad i did the play_* refactoring. missed too many details.