• Eric Wong's avatar
    Revert the queue implementation and commands · 688289b2
    Eric Wong authored
    It's too ugly and broken (both technically and usability-wise)
    to be worth supporting in any stable release.
    
    In one sentence: The queue is a very crippled version of the
    playlist that takes precedence over the normal playlist.
    
    How is it crippled?
    
    * The "queueid" command only allows the queuing of songs
    ALREADY IN THE PLAYLIST!  This promotes having the entire mpd
    database of songs in the playlist, which is a stupid practice
    to begin with.
    
    * It doesn't allow for meaningful rearranging and movement
    of songs within the queue.  To move a song, you'd need to
    dequeue and requeue it (and other songs on the list).
    Why?  The playlist already allows _all_ these features
    and shows everything a client needs to know about the ordering
    of songs in a _single_ command!
    
    * Random was a stupid idea to begin with and unfortunately
    we're stuck supporting it since we've always had it.  Users
    should learn to use "shuffle" instead and not look at their
    playlists.  Implementing queue because we have the problem of
    random is just a bandage fix and digging ourselves a new hole.
    
    This protocol addition was never in a stable release of mpd, so
    reverting it will only break things for people following trunk;
    which I'm not too worried about.  I am however worried about
    long-term support of this misfeature, so I'm removing it.
    
    Additionally, there are other points:
    
    * It's trivially DoS-able:
    
    (while true; do echo queueid $song_id; done) | nc $MPD_HOST $MPD_PORT
    
    The above commands would cause the queue to become infinitely
    expanding, taking up all available memory in the system.  The
    mpd playlist was implemented as an array with a fixed (but
    configurable) size limit for this reason.
    
    * It's not backwards-compatible.  All clients would require
    upgrades (and additional complexity) to even know what the
    next song in the playlist is.  mpd is a shared architecture,
    and we should not violate the principle of least astonishment
    here.
    
    This removes the following commands:
    queueid, dequeue, queueinfo
    
    Additionally, the status field of "playlistqueue: " is removed
    from the status command.
    
    While this DoS is trivial to fix, the design is simply too
    broken to ever support in a real release.
    
    The overloading of the "addid" command and the allowing of
    negative numbers to be used as offsets is far more flexible.
    
    This improved "addid" is completely backwards-compatible with
    all clients, and does not require clients to have UI changes or
    run additional commands to display the queue.
    
    git-svn-id: https://svn.musicpd.org/mpd/trunk@7155 09075e82-0dd4-0310-85a5-a0d7c8717e4f
    688289b2
playlist.h 3.45 KB