| Commit message (Collapse) | Author | Files | Lines |
|
|
|
Copy the reason_phrase from the SoupMessage, and check for transport
errors in the session callback.
|
|
Add GMutex, GCond attributes which will be used by callers to
conditionally wait on the stream.
Remove the (now-useless) plugin method buffer(), wait on GCond
instead. Lock the input_stream before each method call. Do the same
with the playlist plugins.
|
|
To check for errors without reading. The decoder thread wants to do
that, before it passes the input stream to the plugin.
|
|
Fix memory leak.
|
|
libsoup's asynchronous API is not thread safe. By moving the calls
into the I/O thread, several crash bugs will be fixed.
|
|
Add the "complete" attribute, and set it in _session_callback().
_close() waits for it to become true.
|
|
Add attribute postponed_error, pass this GError to the caller.
|
|
Fix deadlock.
|
|
We'll add proper locking now, and there's no need to carry this
duplicate flag.
|
|
To report failures to callers who don't use _buffer().
|
|
Avoid recursive deadlock in _session_callback().
|
|
Pausing and resuming after every little chunk adds lots of overhead.
Add a lower level for resuming the stream.
|
|
curl_easy_pause(CURLPAUSE_CONT) may have added enough data to go into
pause again.
|
|
Call _update_fds() directly. This is possible because it's only
called from within the I/O thread.
|
|
Fix deadlock.
|
|
|
|
|
|
Reduce heap usage by reducing the number of malloc() / free() calls.
|
|
The global data structures are now lock-free, because they are
accessed only from the I/O thread. By using per-request locks, we
have finer grained locking, preparing for locks shared with the
client.
|
|
This adds some overheads for indirect calls to the I/O thread, but
reduces the amount of global locks. Next step will be switching to
per-request locks.
|
|
|
|
Move the assignment to _request_done(), right before the GCond is
signalled. This might fix spurious wakeups.
|
|
|
|
This is a trivial function. Merge some duplicate code, e.g. the
g_cond_broadcast() call.
|
|
|
|
Update the struct attributes, important for facades like the "rewind"
plugin. To replace buffer().
|
|
|
|
Be sure to stop the operation at some point when the server isn't
responding.
|
|
Background buffering and better timeout handling. This patch sort of
obsoletes the input_plugin method buffer().
|
|
Assume the flag is true when the "easy" CURL handle is NULL. That
way, we don't need to keep track if CURL has sent us the "DONE"
information yet.
|
|
Release it immediately when end-of-file has been reached. We don't
need that handle anymore, because the rest is delivered from the
buffers.
|
|
Allow closing the handle while preserving the remaining buffers.
|
|
Remove a cast.
|
|
Let the caller know what happened, he's responsible for logging.
|
|
|
|
To demonstrate the new I/O thread. libsoup is well-integrated into
the GLib main loop, which made this plugin pretty easy to write.
As a side effect, we have to initialize the I/O thread in all debug
programs that use the input API.
|
|
|
|
|
|
FFmpeg/libav have dropped AVIO_RDONLY in favor of AVIO_FLAG_READ. This
patch fixes that in MPD.
|
|
URLContext is deprecated.
|
|
All modern distros ship 0.5, so there's no need to support old and buggy
ffmpeg versions.
|
|
For Spotify tracks. Uses a spt URI, so with mpc you can play tracks
with e.g.,
mpc add spt://spotify:track:5qENVY0YEdZ7fiuOax70x1
mpc play
Uses the pcm_decoder_plugin for the output
|
|
|
|
I wanted mpd to play a mp3 stream from a music website. The stream is
only available to subscribers, which restriction is enforced through
normal http authentication. However, the URL I get from the website
is not the final URL of the stream, but a generic URL which points to
the real one through a redirect (code 301). Thus, I cannot predict
the final URL, and so I cannot use the username:password hack to force
the authentication, and mpd (libcurl on mpds behalf) fails to grab the
stream.
libcurl allows the option CURLOPT_NETRC to be set and then the
credentials can be stored in the good old .netrc file (in this case it
would be ~mpd/.netrc, of course). But mpd doesn't set this option. I
think it should.
|
|
Seems like we forgot to give this module a name... this can crash MPD
on startup.
|
|
|
|
|
|
|
|
|