Commits


rename ibuf arguments to imsgbuf ibuf is just too confusing since there is also the 'struct ibuf'.


switch from libevent to a smaller, thin wrapper around poll() libevent is a very cool library, I like its APIs and enjoy using it. However, for amused it is maybe a bit too much since it doesn't deal with too many file descriptors. Amused only needs to monitor one fd for the player process and the currently connected clients. Given that it runs per-user locally, having more than a dozen of fds open is very, very rare.


cache audio_nfds() ALSA' snd_pcm_poll_descriptors_count() can fail with -EPIPE after an underrun (e.g. after a pause), so we can't call it directly like this. It's also a bit sloppy to always call audio_nfds(), so instead save the (initial) value returned and pass it to the various functions. Issue reported and fix tested by phoebos (ben [at] bvnf [dot] space), thank you!


adjust copyright years


fix my email address used @openbsd.org initially by mistake and got copied around in most files. Since this has nothing to do officially with the OpenBSD project, use my own email address.


split out sndio-specific parts to audio_sndio.c This hides the libsndio bits behind a small audio_* API for which in the future we may provide multiple implementations.


enrich `amused monitor' reported events The monitor mode now has access to some additional information other than just the name of the event. The `mode' and `seek' events now report the mode status and the position/duration respectively, allowing consumers of `amused monitor' to show correct and coherent information. It helps in particular applications like `amused-monitor' (in contrib/) that show a progress bar for the current song. Before, they had to run their own timers and periodically synchronize using `amused status', now they can just update the state in the same `amused-monitor' event loop.


define constants for mode special values and add a toggle value


add consume mode the consume mode implicitly drops the tracks from the playlist when played 'till the end (note that skipping over a track doesn't trigger the consume mode - yet?)


pledge early This changed amused to pledge "stdio rpath" early in main() and then drop down to "stdio" in ctlaction, by removing the pledge call in parse. Simplifies a bit the logic and runs more code under pledge.


monitor: fix reported event rethink a bit which event are reported and when. - drop 'toggle' event as it's not useful; now 'amused toggle' will report the play/pause event. - replace 'flush' with 'load'. there's no real difference between a flush and an empty load. (also, less event the better) - some events (next/prev/jump) are reported earlier to avoid possible issues (when messing around with the playing queue we can end up in every possible state.) - report 'seek' only after it really happened (i.e. after the player process sent the new position.) There's still a possible race here (we can receive a previous IMSG_POS and think it's the reply to the seek) but it it's hard/impossible to work around. - drop 'restart'. we have 'seek' now which is better (and actually restart is implemented on top of seek.) - add 'seek' to the default list of events.


allow to customize the output of amused status This add a -f flag (that falls back to $AMUSED_STATUS_FORMAT) to control which field to print and in which order.


implement seeking on percentage of total duration


reimplement `restart' on top of seek


implement seeking This adds the internal management of the seeking, as well as the decoder backends bits.