Not sure how small we can safely make this, but basically with the volume
element in front of the tee we "need" this as small as possible so the volume
changes fell snappy. Alternative would be one volume element per tee branch.
This turns off playbin controlled volume, which implies that pulsesink volume
can no longer be controlled by Mopidy. This is likely something we have to
break, or at least rethink for multiple output support any way.
With this change we now have software volume after our large queue, which
means volume changes should happen much faster.
This moves all the deprecation warnings messages to a central place so that it
is easy to match against them without having to redefine the same regex all
over the place.
Each message has been given a message id which is more or less
module.func:extra-info. This is not intended to be parsed, just used in tests
when using the ignore helper.
Turns out this code runs a lot faster when we fully destroy the decodebins
between scans. And since going to NULL isn't enough I opted to just go for
redoing the whole pipeline instead of adding and removing decodebins all the
time.
As part of this almost all the logic has been ripped out of the scan class and
into internal functions. The external interface has been kept the same for now.
But we could easily switch to `scan(uri, timeout=1000, proxy=None)`
Return type of scanner changed to a named tuple with (uri, tags, duration,
seekable). This should help with #872 and the related "live" issues.
Tests, local scan and stream metadata lookup have been updated to account for
the changes.
Given the right timings, there was possible to get a stack trace at
shutdown if the audio actor was teared down first and a music delivery
from libspotify/pyspotify called audio.push() after the teardown.
Every emit of this event caused an invisible exception in every audio
listener (e.g. core). The exception was made visible by the change in
the previous commit.
Fixes case where we could have an empty album. We could alternatively be more
conservative and only limit to fully empty albums. But I think we only want
ones with names anyway.
Adds a new get_currents_tags method for fetching the full set of current tags.
There are still some untested cases for this, and I also suspect we still want
some API refinements one core starts using this.