Max Kellermann
91254e9211
queue/PlaylistControl: keep order list consistency in MoveOrderToCurrent()
...
Our previous use of Queue::SwapOrders() could cause surprising
results:
- sometimes, the old "current" song would be played again (if the
newly selected song had not been played already)
- sometimes, the old "current" song would not be played again (if the
newly selected song had already been played)
This is inconsistent, because it should not depend on whether the
newly selected song had already been played.
So instead of Queue::SwapOrders() we now use Queue::MoveOrderAfter()
and Queue::MoveOrderBefore(), which is more expensive, but also more
consistent. It attempts to retain as much from the previous order
list as possible, and only moves the newly selected song around.
2017-10-18 09:05:47 +02:00
Max Kellermann
0f79287b04
queue/Playlist: move code to MoveOrderToCurrent()
2017-10-18 09:05:24 +02:00
Max Kellermann
f2fac77d8c
queue/Queue: add methods MoveOrderBefore() and MoveOrderAfter()
2017-10-18 08:50:01 +02:00
Max Kellermann
81b7373637
queue/Queue: MoveOrder() returns to_order
2017-10-18 08:46:31 +02:00
Max Kellermann
fa67c2548a
decoder/Thread: clear the command after catching an exception
...
If an early exception gets caught (e.g. from
AllocatedPath::FromUTF8Throw()) before
DecoderControl::CommandFinishedLocked() is called, the decoder thread
would go in an endless loop, because DecoderCommand::START is still
set.
Closes #118
2017-09-27 17:08:16 +02:00
John Regan
ea80587ddb
GME Plugin: fix track numbering
...
GME starts all track indexes at zero, but subtune prefixes
start at one. This fixes an off-by-one error during track
enumeration.
2017-09-27 11:18:03 +02:00
John Regan
bd50a0d2ef
GME Plugin: fix track numbering
...
GME starts all track indexes at zero, but subtune prefixes
start at one. This fixes an off-by-one error during track
enumeration.
2017-09-26 08:42:53 -05:00
John Regan
9256e748c8
GME Plugin: only load m3u if it exists
...
If you load an NSFE file (which has embedded track titles),
then attempt to load an M3U file, it causes GME to lose all
information found in the NSFE file. This adds a check that
the M3U file exists before attempting to load.
2017-09-26 08:42:43 -05:00
Max Kellermann
af033c0d1d
NEWS: mention the GME decoder change
2017-09-22 20:00:12 +02:00
John Regan
e96513c8db
GME Plugin: try loading m3u sidecar files
2017-09-22 19:58:17 +02:00
Max Kellermann
da9657aac4
playlist/SoundCloud: move enum key into struct, make strictly-typed
2017-09-21 23:10:11 +02:00
Max Kellermann
2886766fb5
playlist/SoundCloud: use strcmp() instead of memcmp() to avoid buffer overflow
2017-09-21 23:08:27 +02:00
Max Kellermann
6e7f866288
input/alsa: migrate from DeferredMonitor to DeferEvent
2017-09-21 22:58:00 +02:00
Max Kellermann
6fa403edd9
lib/upnp/Discovery: migrate from DeferredMonitor to DeferEvent
2017-09-21 22:53:57 +02:00
Max Kellermann
431eb7bc8c
lib/curl/{Global,Request}: migrate from DeferredMonitor to DeferEvent
2017-09-21 22:53:17 +02:00
Max Kellermann
9df4853e23
event/DeferredCall: rename to DeferEvent
2017-09-21 22:40:25 +02:00
Max Kellermann
18c4ef09d5
input/thread: use class HugeArray instead of the low-level function HugeAllocate()
2017-09-21 21:56:24 +02:00
Max Kellermann
bc93c7a1fc
input/thread: un-inline the constructor
2017-09-21 21:55:24 +02:00
Max Kellermann
c8a2a557db
util/HugeAllocator: remove obsolete class HugeAllocation
2017-09-21 21:52:08 +02:00
Max Kellermann
9f827c99cb
input/async: use class HugeArray instead of HugeAllocation
2017-09-21 21:50:45 +02:00
Max Kellermann
7b2b965415
util/SliceBuffer: use class HugeArray
2017-09-21 21:48:08 +02:00
Max Kellermann
c3cfa18ebe
util/HugeAllocator: add template class HugeArray
2017-09-21 21:47:52 +02:00
Max Kellermann
b46835e15e
util/HugeAllocator: HugeAllocator() returns WritableBuffer<void>
2017-09-21 21:47:49 +02:00
Max Kellermann
3e5ce3c92c
util/{Const,Writable}Buffer: add static method FromVoidFloor()
2017-09-21 21:45:39 +02:00
Max Kellermann
e5c9b4cd75
util/{Const,Writable}Buffer: add operator==(nullptr_t)
2017-09-21 20:34:36 +02:00
Max Kellermann
8753e558f2
util/HugeAllocator: move MADV_DONTFORK setting to HugeForkCow()
...
Enforcing MADV_DONTFORK is a surprising limitation for this library
which aims to be generic.
2017-09-21 19:36:33 +02:00
Max Kellermann
f6691579de
Merge branch 'v0.20.x'
2017-09-20 23:57:28 +02:00
Max Kellermann
828f5f8384
lib/icu/CaseFold: disable broken strxfrm() callback
2017-09-20 23:55:14 +02:00
Max Kellermann
1295a1272a
lib/icu/Compare: add fallback using strcasecmp() and strcasestr()
...
Our IcuCaseFold() fallback using strxfrm() is not actually case
insensitive. This commit fixes the problem by switching to
strcasecmp(). That function is not guaranteed to support UTF-8, but
it's the best we can do in this sparse situation.
Closes #111
2017-09-20 23:43:27 +02:00
Max Kellermann
66646d9276
SongFilter: use class IcuCompare
2017-09-20 23:43:26 +02:00
Max Kellermann
d0497dba92
lib/icu/Compare: OO wrapper for IcuCaseFold()
2017-09-20 23:32:55 +02:00
Max Kellermann
42914e8227
lib/icu/CaseFold: add "noexcept"
2017-09-20 23:32:54 +02:00
Max Kellermann
59b49b7881
db/Selection: add missing config.h
2017-09-20 23:32:54 +02:00
Max Kellermann
5620f16330
lib/icu/Collate: move IcuCaseFold() to CaseFold.cxx
2017-09-20 23:11:58 +02:00
Max Kellermann
be024d4ad7
lib/icu/Collate: remove unnecessary assert()
2017-09-20 23:05:31 +02:00
Max Kellermann
cfc152d979
input/async: remove outdated API documentation
2017-09-19 19:56:37 +02:00
Max Kellermann
513212c5e8
input/async: use std::exchange()
2017-09-19 19:55:16 +02:00
Max Kellermann
99a447dff5
input/async: use C++11 initializers
2017-09-19 19:54:07 +02:00
Max Kellermann
56a9bf459d
util/SliceBuffer: use C++11 initializers
2017-09-19 19:48:04 +02:00
Max Kellermann
11dbba3503
util/HugeAllocator: document std::bad_alloc
2017-09-19 19:45:52 +02:00
Max Kellermann
8662427d48
util/HugeAllocator: use std::exchange()
2017-09-19 19:42:21 +02:00
Max Kellermann
821480d329
util/HugeAllocator: make constructor explicit
2017-09-19 19:42:19 +02:00
Max Kellermann
5ce93d6fa8
output/sndio: refuse to build with libroarsndio
...
RoarAudio's sndio emulation has been a source for annoyances. First,
their headers turned out to be broken with C++, due to their use of
the "new" keyword. Then they used a preprocessor macro to rename
"sio_hdl" to something else, effectively disallowing the use of
forward declarations. Enough is enough, and I'm removing support for
it.
RoarAudio users should better use the RoarAudio output plugin.
2017-09-19 19:38:43 +02:00
Max Kellermann
20a5ef2798
NEWS: mention the sndio mixer plugin
2017-09-19 19:38:43 +02:00
Max Kellermann
735eabb066
output/sndio: move #include below guard
2017-09-19 18:59:04 +02:00
Max Kellermann
412ff762bb
output/sndio: use forward declarations
2017-09-19 18:58:13 +02:00
Max Kellermann
44bbf42a9f
Merge branch 'v0.20.x'
2017-09-19 18:58:02 +02:00
Max Kellermann
75c740fe2b
output/sndio: fix indent
2017-09-19 18:50:35 +02:00
Max Kellermann
6c8d86bb90
output/sndio: rename the "sio_hdl" variable to avoid clash with struct name
2017-09-19 18:49:33 +02:00
Charlie Waters
b253a6b71e
ffmpeg plugin: when decoded stream duration is unavailable, attempt fallback to container duration ( fix MusicPlayerDaemon/MPD#110 )
2017-09-18 10:39:27 +02:00