Max Kellermann
9d9697b366
DecoderBuffer: add method _clear()
2014-07-12 00:15:35 +02:00
Max Kellermann
6585e18571
decoder/faad: check sample_rate, not frames_per_second
...
Checking the integer is faster, easier and more reliable.
2014-07-11 23:12:08 +02:00
Max Kellermann
6f1b4292f0
decoder/faad: make variables more local
2014-07-11 22:52:31 +02:00
Max Kellermann
ef9ef03b1f
decoder/faad: use MAX_CHANNELS
...
.. instead of declaring a new constant.
2014-07-11 22:40:28 +02:00
Max Kellermann
c4bea3dfe4
decoder/sndfile: implement scan_stream() instead of scan_file()
2014-07-11 22:09:35 +02:00
Max Kellermann
eaa9a1e33b
decoder/sndfile: make variables more local
2014-07-11 22:03:26 +02:00
Max Kellermann
3e19298c9e
decoder/sndfile: support more tag types
2014-07-11 22:03:13 +02:00
Max Kellermann
2a96ce97ee
decoder/sndfile: add str_type to TagType table
2014-07-11 21:57:41 +02:00
Max Kellermann
8cfe901391
decoder/sndfile: move code to sndfile_handle_tag()
2014-07-11 21:56:02 +02:00
Max Kellermann
30f1ee7a1f
decoder/sndfile: log libsndfile version on startup
2014-07-11 21:53:03 +02:00
Max Kellermann
46ff830daa
PlaylistEdit: fix typo in code comment
2014-07-11 21:37:06 +02:00
Max Kellermann
828cd6fd0b
Merge branch 'v0.18.x'
2014-07-11 21:33:50 +02:00
Max Kellermann
ecb67a1ed1
decoder/sndfile: use decoder_read_full()
...
Replaces the loop in sndfile_vio_read(), eliminating duplicate and
fragile code.
2014-07-11 21:18:44 +02:00
Max Kellermann
0ef843f138
decoder/sndfile: use decoder_read()
...
.. instead of InputStream::LockRead(). The former is cancellable.
2014-07-11 21:18:44 +02:00
Max Kellermann
eb79d83051
decoder/sndfile: log seek errors
2014-07-11 21:18:44 +02:00
Max Kellermann
ca1a11493d
decoder/audiofile: log seek errors
2014-07-11 21:18:44 +02:00
Max Kellermann
69bb086ba5
decoder/audiofile: fix typo in comment
2014-07-11 21:18:44 +02:00
Max Kellermann
11a5ee821b
PlaylistEdit: postpone UpdateQueuedSong() when adding multiple songs
...
Implement a "bulk" edit mode that postpones both UpdateQueuedSong()
and OnModified(). This way, the playlist version gets incremented
only once. More importantly: when adding multiple songs to a queue
that consists of only one song, the first song that got added will
always be played next. By postponing this choice, all newly added
songs get a chance to become the next song. Fixes the second (and
last) part of Mantis ticket 0004005.
2014-07-11 20:22:35 +02:00
Max Kellermann
a8a85143f6
QueueCommands: make "result" more local
2014-07-11 20:22:35 +02:00
Max Kellermann
e2cc328eef
Playlist: randomize next song when enabling "random" mode while not playing
...
Don't restore the current song after shufflung when MPD is stopped
(but still remembers the current song internally). Fixes the first
part of Mantis ticket 0004005.
2014-07-11 19:41:39 +02:00
Max Kellermann
344d10a8e3
PlaylistControl: update code comment
2014-07-11 19:29:25 +02:00
Max Kellermann
681643ea9e
input/curl: options "verify_peer" and "verify_host"
2014-07-11 16:39:42 +02:00
Mantas Mikulėnas
cd289843f7
fs/StandardDirectory: look for cache dir in environment, not user-dirs
...
The XDG cache directory is part of the "base directories" spec like
$XDG_CONFIG_HOME, not "user directories".
2014-07-11 08:09:19 +02:00
Max Kellermann
b123392592
input/async: more API documentation
2014-07-10 10:33:43 +02:00
Max Kellermann
ccbb5c3e01
decoder/audiofile: log libaudiofile errors
2014-07-10 09:37:43 +02:00
Max Kellermann
49b63e084f
decoder/audiofile: make variables more local
2014-07-10 09:26:12 +02:00
Max Kellermann
107321e385
decoder/audiofile: implement scan_stream() instead of scan_file()
2014-07-10 09:23:56 +02:00
Max Kellermann
1d214b4aed
decoder/audiofile: use audiofile_get_duration() in _stream_decode()
2014-07-10 08:35:24 +02:00
Max Kellermann
2e1347aba4
decoder/audiofile: split audiofile_get_duration()
2014-07-10 08:31:41 +02:00
Max Kellermann
9ddb5931fb
decoder/audiofile: remove unused Error variable
2014-07-09 20:03:11 +02:00
Max Kellermann
913064d6cc
Merge branch 'v0.18.x'
2014-07-09 20:02:07 +02:00
Gustavo Zacarias
fb45b8a5c9
playlist/plugins/DespotifyPlaylistPlugin: fix build failure due to missing stdio.h include
...
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
2014-07-09 19:54:35 +02:00
Gustavo Zacarias
f5c9056430
output/plugins/httpd/HttpdClient: fix build failure due to missing stdio.h include
...
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
2014-07-09 19:54:35 +02:00
Gustavo Zacarias
0e39b59700
decoder/plugins/FlacIOHandle: fix build failure due to missing stdio.h include
...
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
2014-07-09 19:54:35 +02:00
Max Kellermann
552af5455e
decoder/dsdlib: use decoder_skip()
...
Reduce duplicate code.
2014-07-09 19:42:36 +02:00
Max Kellermann
8759bc1b41
decoder/dsdlib: pass unsigned offsets to dsdlib_skip*()
2014-07-09 19:39:10 +02:00
Joff
09384df32c
decoder/dsd: use decoder_read_full() where appropriate
...
Addresses Mantis ticket 0004015.
[mk: use decoder_read_full() only when needed, and a few formal
changes]
2014-07-09 19:18:36 +02:00
Max Kellermann
20538516b9
decoder/audiofile: use decoder_read_full()
...
Works around WAV stream playback bug, because libaudiofile does not
like partial reads (Mantis 0004028).
2014-07-09 19:05:20 +02:00
Max Kellermann
0759421d11
DecoderAPI: add function decoder_read_full()
...
Move code from the "mad" plugin.
2014-07-09 19:03:58 +02:00
Max Kellermann
bf7417981f
DecoderAPI: add function decoder_skip()
...
Move code from the "mad" plugin.
2014-07-09 19:03:31 +02:00
Max Kellermann
bc6472bb9e
decoder/audiofile: use decoder_read()
...
.. instead of InputStream::LockRead(). The former is cancellable.
2014-07-09 18:57:50 +02:00
Gustavo Zacarias
d4bd947bf5
playlist/PlsPlaylistPlugin: fix build failure due to missing stdio.h include
...
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
2014-07-09 17:41:31 +02:00
Gustavo Zacarias
d8e8eabf60
output/HttpdClient: fix build failure due to missing stdio.h include
...
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
2014-07-09 17:41:31 +02:00
Gustavo Zacarias
a70443af31
decoder/OpusDecoderPlugin: fix build failure due to missing stdio.h include
...
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
2014-07-09 17:41:31 +02:00
Gustavo Zacarias
3f221e2edb
decoder/AudiofileDecoderPlugin: fix build failure due to missing stdio.h include
...
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
2014-07-09 17:41:31 +02:00
Max Kellermann
56504534d8
thread/{Mutex,Cond}: relicense to BSD-2
2014-07-02 20:09:39 +02:00
Max Kellermann
80a45c91f9
thread/GLib{Mutex,Cond}: remove obsolete classes
2014-07-02 20:09:39 +02:00
Max Kellermann
3f695fdfaf
lib/nfs/Connection: include poll.h
2014-06-30 10:22:08 +02:00
Christoph Tieben
88433bca22
Added Comment/Description to decoder/plugins/XiphTags.cxx
2014-06-27 21:14:55 +02:00
Christoph Tieben
34689eb2d2
decoder: vorbis, flac, opus: honor DESCRIPTION= tag in Xiph-based files as a comment to the song
...
(see https://www.xiph.org/vorbis/doc/v-comment.html for Details)
2014-06-27 21:14:17 +02:00
Max Kellermann
211aea1441
util/ConstBuffer: add method skip_front()
2014-06-26 22:25:03 +02:00
Max Kellermann
74a46788cd
util/ConstBuffer: wrap assert() in NDEBUG check
...
Fixes build failure because assert.h was not included.
2014-06-26 13:31:48 +02:00
Max Kellermann
7213c26798
util/ConstBuffer: add method Contains()
2014-06-23 22:30:01 +02:00
Max Kellermann
fa1fb47d75
Merge branch 'v0.18.x'
2014-06-23 10:13:50 +02:00
Max Kellermann
848ed14788
db/proxy: fall back to recursive walk on old libmpdclient/MPD
...
Error message was 'too few arguments for "find"' because the "base"
constraint was not supported, and no other constraints remained.
2014-06-23 09:18:11 +02:00
Max Kellermann
4c8a5dfb05
db/proxy: use mpd_song_get_{start,end}() only with libmpdclient >= 2.3
2014-06-23 09:17:35 +02:00
Max Kellermann
b9eeb6e6eb
db/proxy: use mpd_song_get_{start,end}() only with libmpdclient >= 2.3
2014-06-23 08:57:51 +02:00
Max Kellermann
d5fa2af353
input/async: use IsEOF() instead of !open for "ready" check
...
Checking "!open" did not work with the NFS plugin because that plugin
does not close the file automatically, unlike CURL.
2014-06-21 14:13:31 +02:00
Max Kellermann
a877926f08
Revert "AsyncInputStream: fix assertion failure in AppendToBuffer()"
...
This reverts commit 966c4244cb
.
The commit was bad, because the bug was really in
NfsInputStream::DoRead(); see previous commit.
2014-06-21 14:07:15 +02:00
Max Kellermann
3e4e6f7ced
input/nfs: never read more than space available in buffer
...
Avoids off-by-one bug and obsoletes the bug fix in commit 966c4244
2014-06-21 14:06:31 +02:00
Max Kellermann
936eb43c0e
db/proxy: initialize LightSong::real_uri
...
Fixes potential crash.
2014-06-21 12:37:23 +02:00
Max Kellermann
eb8fd07900
lib/nfs/Manager: gcc 4.7 compatibility hack
...
std::map::emplace() is only available from gcc 4.8 on.
2014-06-17 10:35:34 +02:00
Max Kellermann
c99559dbe9
input/nfs: use the asynchronous libnfs API
...
More robust and cancellable.
2014-06-17 03:21:25 +02:00
Max Kellermann
966c4244cb
AsyncInputStream: fix assertion failure in AppendToBuffer()
2014-06-17 03:21:11 +02:00
Max Kellermann
81283f8bcb
AsyncInputStream: reset "paused" when seeking
...
May cause assertion failure.
2014-06-17 03:20:49 +02:00
Max Kellermann
8b84e5b3f9
input/curl: hold mutex while writing to postponed_error
2014-06-17 02:32:17 +02:00
Max Kellermann
e1d5ddb478
input/AsyncInputStream: add method IsBufferFull()
2014-06-17 02:32:17 +02:00
Max Kellermann
2da0322329
command: make argc unsigned
2014-06-16 19:50:34 +02:00
Max Kellermann
fefb35c782
Directory: eliminate attribute "have_stat"
...
Check for 0 in "device" and "inode" instead.
2014-06-16 19:46:35 +02:00
Max Kellermann
b2433a664c
TagPool: move code to tag_value_slot_p()
2014-06-16 19:26:26 +02:00
Max Kellermann
adad4279f3
TagPool: convert macro to constexpr
2014-06-16 19:18:10 +02:00
Max Kellermann
3ca0a39a35
db/simple: use class boost::intrusive::list
...
Remove the C list_head library and use type-safe C++ instead.
2014-06-16 18:39:16 +02:00
Max Kellermann
3364c1b893
ClientList: use class boost::intrusive::list
...
Eliminate extra allocations for the std::list node instances.
2014-06-11 09:27:17 +02:00
Max Kellermann
507d8fdc6f
ClientList: add typedef List
2014-06-10 23:21:09 +02:00
Max Kellermann
31e29e62f4
zeroconf/Avahi: call dbus_shutdown() during shutdown
...
Make valgrind happy.
2014-06-10 23:21:09 +02:00
Max Kellermann
dfcb572985
Main: delete the Storage instance on shutdown
2014-06-10 23:21:09 +02:00
Max Kellermann
1d324176d1
lib/icu/Init: call u_init() and u_cleanup()
...
Make valgrind happy.
2014-06-10 23:21:09 +02:00
Max Kellermann
37b3190752
lib/icu: add IcuInit(), IcuFinish()
2014-06-10 23:21:09 +02:00
Max Kellermann
dc14ac7a8f
thread/Util: relicense to BSD-2
2014-05-31 12:11:53 +02:00
Max Kellermann
fb52a24da3
input/async: add offset/size comparison to IsEOF()
2014-05-24 15:19:22 +02:00
Max Kellermann
fbafb19657
input/curl: move code to AsyncInputStream
...
New base class for other InputStream implementations that run in the
I/O thread.
2014-05-24 14:36:28 +02:00
Max Kellermann
6c4438d8a9
input/curl: call SetReady() only if not yet ready
...
Fixes assertion failure.
2014-05-24 14:36:25 +02:00
Max Kellermann
be00737ced
input/curl: include cleanup
2014-05-24 12:43:48 +02:00
Max Kellermann
07b93dcf80
InputStream: make Seek() always absolute
...
Remove the "whence" parameter that is not actually necessary, and only
complicates the InputStream implementations.
2014-05-22 13:52:00 +02:00
Max Kellermann
374c6a27db
decoder/vorbis: make VorbisInputStream::input_stream a reference
2014-05-22 13:52:00 +02:00
Max Kellermann
36c9e95969
decoder/vorbis: add VorbisInputStream constructor
2014-05-22 13:52:00 +02:00
Max Kellermann
a3142ee4e6
decoder/vorbis: rename struct vorbis_input_stream to VorbisInputStream
2014-05-22 13:52:00 +02:00
Max Kellermann
437caeb90f
decoder/vorbis: add "restrict" to pointers in vorbis_interleave()
...
Allows more compiler optimizations.
2014-05-22 13:52:00 +02:00
Max Kellermann
af49cace8d
decoder/vorbis: log libvorbis version on startup
2014-05-22 13:52:00 +02:00
Max Kellermann
13b78d0d89
decoder/wavpack: move code to WavpackInput::ReadBytes()
2014-05-22 12:54:56 +02:00
Max Kellermann
65c135b451
decoder/wavpack: convert WavpackInput attributes to references
2014-05-22 12:52:33 +02:00
Max Kellermann
ec162f265f
decoder/wavpack: move wavpack_input_init into struct WavpackInput
2014-05-22 12:47:20 +02:00
Max Kellermann
ba99696771
decoder/wavpack: wavpack_open_wvc() returns WavpackInput*
2014-05-22 12:36:55 +02:00
Max Kellermann
4eeea640f4
DecoderAPI: add function decoder_open_uri()
...
Move and refactor code from the Wavpack decoder plugin.
2014-05-22 12:35:20 +02:00
Max Kellermann
631b635652
decoder/wavpack: rename struct wavpack_input to WavpackInput
2014-05-22 10:52:34 +02:00
Max Kellermann
49695d47d3
input/curl: relock mutex in error paths
2014-05-21 19:00:47 +02:00
Max Kellermann
5cec477131
input/curl: pass remaining size to CircularBuffer::Append()
2014-05-21 18:59:51 +02:00
Max Kellermann
a5d0300787
input/curl: move code to IcyInputStream
2014-05-21 18:47:49 +02:00
Max Kellermann
09b84c51ee
input/rewind: move code to class ProxyInputStream
2014-05-21 18:47:49 +02:00
Max Kellermann
c42e412c0a
input/InputStream: move Open() to Open.cxx
...
Allow compiling test programs with only selected plugins.
2014-05-21 18:47:32 +02:00
Max Kellermann
542e7feba8
input/rewind: include cleanup
2014-05-21 18:47:22 +02:00
Max Kellermann
dc085e0bd2
input/rewind: work around assertion failure
...
Caused by commit 0b4fa41a
2014-05-21 18:47:12 +02:00
Max Kellermann
7c9517343c
ThreadInputStream: include cleanup
2014-05-12 19:04:32 +02:00
Max Kellermann
0b4fa41aff
InputStream: "protect" attributes
2014-05-12 18:59:46 +02:00
Max Kellermann
e138e2c880
input/cdio: convert to class
2014-05-12 18:59:25 +02:00
Max Kellermann
0d6345e98b
input/cdio: move initialization code to constructor
...
Make attributes const, don't allow partial initialization.
Instantiate the CdioParanoiaInputStream object at the end of
input_cdio_open().
2014-05-12 18:54:05 +02:00
Max Kellermann
a84bcf597d
input/cdio: handle cdio_open() failure
2014-05-12 18:53:47 +02:00
Max Kellermann
4bbd4ba855
input/cdio: initialize lsn_relofs in constructor
2014-05-12 18:48:16 +02:00
Max Kellermann
9e5b56b475
input/cdio: initialize attribute "buffer_lsn"
2014-05-12 18:47:27 +02:00
Max Kellermann
dd383037fd
input/cdio: remove unused attribute "trackno"
2014-05-12 18:41:45 +02:00
Max Kellermann
3cd24c0a51
release v0.18.11
...
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAABAgAGBQJTcPbuAAoJECNuiljG20US+LsQAI5LcUiQ2AxfDdXfEkIW+ryQ
U5htp4RAAizVFEAdgzdDOoHBVefkvwij6G9ND9WAbJRsUOZs62XwlnOFaB/uQPhd
VvoNIQLmuUNxltF1itaCTJ0UJkXi6ObVExpwMScGI242uUmoNnxwsWxDxyy2s4bn
On/OwT64zTOsPTjkYGdfGncwx4dhQc2KJvGGD6y/lMhxUnn3NoKG/VOgleN4ALcL
KQ0SFQOFbUHJcvMXYdMzhe426d7GiHzFVIfdU16yJz47/xHDmaM+VVJQCOF68rrw
kyb2POxR4VXhPMfIleF2RiCopvDGSvQfUE3jhQjKBgZE2NeFeI/5N6JcWbZgFJ/J
4ez3DcjSD1Oeoz6gzaq1QybCku4EZTvPa6Kbb5/84JNKmVdb/JowGF0L18bwTbGv
y5D5HN3zTdmBXwsiDnTNDtuwaSejvIDTN1k4AkdQ9mLMIMT+13NHLBs1rDE2JnlG
3xhXrIvwhUBdE1A4uFj8duzk11EWzNI+ltJBRnG8uEzAJxpv5Khiwmj2GciS6s5r
wp1YUIUA0BhrEgrtoTdE7x13lXkDrmydcJ5kA0kArJFQALliE7kivyg1gtrcNRj1
7fDRAb9QOxaJrrsJzM9f9pDaIttHRjRvurFtikD90oaRE1g+6ygeScmYJDPhPjvU
R6PxzvsMCn8kJFWq2ARg
=Ubmu
-----END PGP SIGNATURE-----
Merge tag 'v0.18.11'
2014-05-12 18:38:45 +02:00
Max Kellermann
41507d8129
icu/Collate: use u_strFoldCase() instead of ucol_getSortKey()
...
Turns out ucol_getSortKey() does not what I thought it does.
2014-05-12 14:43:30 +02:00
Max Kellermann
317a98a5a9
icu/Collate: UCharFromUTF8() returns WritableBuffer<UChar>
2014-05-12 14:39:40 +02:00
Max Kellermann
1395794923
icu/Collate: initialize error_code
...
Fixes the broken "search" command.
2014-05-12 14:13:09 +02:00
Max Kellermann
073e9d06ec
mixer/software: keep attribute "volume" in the 0..100 range
...
The attribute must be 0..100 and not 0..1024. Previously, the code
was inconsistent.
2014-05-12 12:46:14 +02:00
Max Kellermann
fd1b04932a
InputStream: remove attribute "plugin"
2014-05-11 18:25:55 +02:00
Max Kellermann
d4b625b48e
InputStream: make various methods abstract
...
Replace InputPlugin attributes.
2014-05-11 17:14:49 +02:00
Max Kellermann
82337dec44
InputStream: add virtual destructor
...
Replaces the method Close().
2014-05-11 17:12:50 +02:00
Max Kellermann
f1d0700252
input/plugins: make InputStream the base class
...
Prepare for adding virtual methods.
2014-05-11 17:12:50 +02:00
Max Kellermann
e1383a2d8e
input/rewind: convert to class
2014-05-11 17:12:50 +02:00
Max Kellermann
6773adc771
InputStream: convert to class
2014-05-11 15:34:48 +02:00
Max Kellermann
0adcda387a
PlaylistCommands: remove redundant playlist_load_spl() call
...
This case is handled already by playlist_open_in_playlist_dir() (via
playlist_mapper_open()). And the call didn't work anyway.
2014-05-10 19:02:33 +02:00
Max Kellermann
fc1664d9fc
PlaylistMapper: use map_spl_utf8_to_fs()
...
Eliminates some overhead and some duplicate code, and fixes a serious
bug: the old code did not append the ".m3u" suffix, and thus the
"load" command was completely broken for stored playlists. D'oh!
2014-05-10 19:00:46 +02:00
Max Kellermann
70bd35abe2
decoder/OggUtil: allow skipping up to 32 kB after seek
...
Fixes missing song length on high-latency Opus files.
According to tests with 320 kbit/s opus files with 60ms packets, we
need to skip up to 29 kB.
2014-04-29 11:56:05 +02:00
Max Kellermann
bc2a1160b8
db/Count: implement grouping
2014-04-27 22:27:43 +02:00
Max Kellermann
75542e8f5d
db/Count: add constructor
2014-04-27 22:27:28 +02:00
Max Kellermann
fcb55f841a
DatabasePrint: move PrintSongCount() to Count.cxx
2014-04-26 22:59:21 +02:00
Max Kellermann
0efb67b51e
DeferredMonitor: fix race condition when using GLib event loop
...
Turns out the lock-free code using atomics was not thread-safe. The
given callback could be invoked by GLib before the source_id attribute
was assigned. This commit changes the DeferredMonitor class to use a
Mutex to block the event loop until source_id is assigned. This bug
does not exist in the 0.19 branch because it does not use the GLib
main loop anymore.
2014-04-26 22:11:23 +02:00
Max Kellermann
154e601f4e
db/Helpers: split library
2014-04-25 18:39:21 +02:00
Max Kellermann
4cca75b2e1
DatabasePrint: refactor variable/function names
2014-04-25 18:36:07 +02:00
Max Kellermann
6d616e55ae
LogInit: fix file descriptor leak in SIGHUP handler
2014-04-25 12:31:06 +02:00
Max Kellermann
95b1a640b6
DatabaseCommands: disallow "grouping" by the selected tag
...
Fixes assertion failure.
2014-04-25 11:28:17 +02:00
Max Kellermann
ecc12c9ba1
db/Helpers: move code to tag/Set.cxx
2014-04-24 18:32:23 +02:00
Max Kellermann
9e50993c13
db/Helpers: move TagSet to dedicated header
2014-04-24 18:18:26 +02:00
Max Kellermann
b32ec857b1
db/Helpers: use set::emplace()
2014-04-24 18:17:07 +02:00
Max Kellermann
0de42d56fc
DatabasePrint: eliminate printAllIn(), printInfoForAllIn()
2014-04-24 18:09:39 +02:00
Max Kellermann
6378ad69bb
DatabasePrint: merge adjacent client_printf() calls
2014-04-24 18:07:12 +02:00
Max Kellermann
9616e9bf3b
DatabasePrint: pass const SearchStats reference
2014-04-24 18:06:46 +02:00
Max Kellermann
7c8b73bffb
DatabasePrint: use unsigned counts
2014-04-24 18:06:26 +02:00
Max Kellermann
ae178c77bd
DatabaseCommands: "list" allows grouping
2014-04-24 11:38:49 +02:00
Max Kellermann
2220651253
TagBuilder: add method AddEmptyItem()
2014-04-24 11:38:48 +02:00
Max Kellermann
7fdd801479
DatabaseCommands: simplify the handle_list() argument parser
2014-04-24 11:38:48 +02:00
Max Kellermann
27002ad1ea
db/Helpers: "list" on album artist falls back to the artist tag
2014-04-24 10:48:52 +02:00
Max Kellermann
986dd2fac1
db/Helpers: move code to CheckUniqueTag()
2014-04-24 10:47:53 +02:00
Max Kellermann
3965b490a9
db/Helpers: use reference instead of pointer
2014-04-24 10:31:19 +02:00
Max Kellermann
b999e16406
SongFilter: convert argv to ConstBuffer
2014-04-24 09:59:59 +02:00
Max Kellermann
7fb9bebd46
util/{Const,Writable}Buffer: add front(), back(), pop_{front,back}(), shift()
2014-04-24 09:50:19 +02:00
Max Kellermann
3b8a9dd6ec
util/{Const,Writable}Buffer: add typedef reference_type
2014-04-24 09:47:59 +02:00
Max Kellermann
c9aec3e866
DatabaseCommands: fix crash on "list base"
...
The string "base" is understood by locate_parse_type(), but not by
listAllUniqueTags(). The special tag type LOCATE_TAG_BASE_TYPE causes
a crash in PrintUniqueTag().
2014-04-24 08:19:08 +02:00
Max Kellermann
1d1f8be260
DatabasePrint: convert "type" to unsigned
2014-04-24 08:18:41 +02:00
Max Kellermann
38e6c0ad3f
DatabaseCommands: clarify compatibility comment
2014-04-24 08:11:06 +02:00
Max Kellermann
7ecf4ad54d
input/nfs: add missing string.h include
...
For strrchr(). Fixes build failure.
2014-04-23 12:53:19 +02:00
Max Kellermann
1c02b4b9f4
release v0.18.10
...
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAABAgAGBQJTRoKFAAoJECNuiljG20UScmgP/3bXQLBVqnGdMEzJio9qfTqz
inqbuaR8FrOSQFT5ULpYYipcjiqxCpG2ooE2M083F3wXDHF8u+j0S84NEvHQjv0T
WvA5EOOeEJS0o0gREZb8onO8NVwH+f1r4x34PAc4QbSeROiAiJRPmfTOZBDTaQkZ
Fy4CGte9UqLvUG10Jxpn1DgcBBeoge9Ruzm+drBLHh53lAfKZH6z9u23htNc4PH0
WMN3/orL7KZNxMtX37zqQDhkbPv2RjCWc0JJ8yxBzw3r/qG53GkmCBsStub6wKIi
iPgkoKXii+FAlg1oRmvVNELmOUDjhnBj8+g7q6WgJGpYqdcSCQBRIBnPPRn6Tfw3
wS7MtGoH7M4yihOfeburIzN0JiD4dtcnA7CrA9ghWt3C0Hci9Q/eni7xHgAuJ7Gp
fD0aEGeaQiQZC8r1UYkgvPuc+CXpsjPcpoN2TlYwDJ3VPQcikHVqTUkJxf5rEGbL
h5K0jhW/TzgT0quozd50w52X/n5J76X8oEng08271OPMlF+6gawGA2/AeDsomRTp
n8OPVutpyaGE3gKGYLGKj3cEnP15tQyt3U0kiU+ccG7osEPXr8JU/A4fipqcrwnN
lwejiIKzfZBU68kwS+gtQLiBncT3oh5tEiLJNzYYpPCF0wkDYt2u/rhRxnVjRoXO
5B9PRaOPuJ5N+6O2hGNS
=qsUE
-----END PGP SIGNATURE-----
Merge tag 'release-0.18.10'
2014-04-10 13:49:20 +02:00
Marcello Desantis
95ac6071b9
decoder/sndfile: work around libsndfile bug on partial read
2014-04-09 23:58:56 +02:00
Weng Xuetian
3a4e667078
PlaylistEdit: don't interrupt playback when current song gets deleted
2014-04-09 23:10:14 +02:00
Max Kellermann
afdefefbe4
icu/Collate: fix memory leak in IcuCaseFold()
2014-04-09 20:09:34 +02:00
Max Kellermann
5360c0c588
IOThread: make io_thread_get() "const"
2014-04-05 09:26:45 +02:00
Max Kellermann
74a05a7f53
pcm/Neon: explicit rounding
...
Convert to 31 bit first, then right-shift with rounding to 16 bit.
2014-03-19 06:54:06 +01:00
Max Kellermann
a68acf5c66
util/ConstBuffer: add FromVoid(), ToVoid() to "void" specialization
...
Provide the full API.
2014-03-18 12:09:17 +01:00
Max Kellermann
ce18c36ed9
decoder/ffmpeg: handle unknown stream start time
2014-03-18 09:16:09 +01:00
Max Kellermann
8e39cf62e7
decoder/ffmpeg: pass AVSEEK_FLAG_ANY to av_seek_frame()
...
This corrects a major mistake from commit 724a59aa
- there was one
small thing that commit was supposed to do, and it failed.
AV_TIME_BASE is not a seek flag.
2014-03-18 09:10:36 +01:00
Max Kellermann
707d379b97
input/mms: move blocking I/O to thread
2014-03-16 11:48:46 +01:00
Max Kellermann
88a0a48b03
input/BufferedInputStream: new wrapper for moving plugin to thread
2014-03-16 10:26:40 +01:00
Max Kellermann
d51b90a880
thread/Thread: make the destructor non-virtual
...
The class does not have any virtual methods, and thus the (debug-only)
destructor does not need to be virtual.
2014-03-16 10:26:23 +01:00
Max Kellermann
e9912bcf8a
input/alsa: don't initialize "seekable=false", "size=-1"
...
These are the default values already.
2014-03-16 09:52:17 +01:00
Max Kellermann
b55e1dcb5e
pcm/Neon: make neon_x4_b() variadic
2014-03-16 09:30:50 +01:00
Max Kellermann
6f4775a8ee
pcm/Neon: apply bit shift during float->int conversion
...
Avoid multiplication. This is a speedup of 20%.
2014-03-16 09:05:30 +01:00
Max Kellermann
c7e2f558a0
input/curl: use CircularBuffer
...
Replaces its own weird buffering code.
2014-03-16 00:35:28 +01:00
Max Kellermann
328860c8ba
util/CircularBuffer: add method GetSpace()
2014-03-16 00:28:42 +01:00
Max Kellermann
89ac111853
util/CircularBuffer: add method GetSize()
2014-03-16 00:27:18 +01:00
Max Kellermann
3d4f588a7f
util/CircularBuffer: rename GetSize() to GetCapacity()
2014-03-15 23:12:20 +01:00
Max Kellermann
8f74bf314d
input/curl: add method CurlInputStream::Open()
2014-03-15 22:56:05 +01:00
Max Kellermann
0dd5ebbdbe
input/curl: move _seek() into the CurlInputStream class
2014-03-15 22:42:37 +01:00
Max Kellermann
2ae60767a3
input/curl: move _easy_init() into the CurlInputStream class
2014-03-15 22:38:46 +01:00
Max Kellermann
64f31f70f9
input/curl: pass std::string&& to HeaderReceived()
...
Code simplification.
2014-03-15 22:02:59 +01:00
Max Kellermann
23eacbd132
input/curl: move code to CurlInputStream methods
2014-03-15 20:43:37 +01:00
Max Kellermann
e9f16fca96
input/curl: rename "error" to "error_buffer"
2014-03-15 20:43:17 +01:00
Max Kellermann
3d30de91f3
input/curl: rename struct input_curl to CurlInputStream
2014-03-15 20:38:08 +01:00
Max Kellermann
f68d2f7c7f
system/fd_util: export fd_set_cloexec()
2014-03-15 20:03:31 +01:00
Max Kellermann
f660d30138
util/CircularBuffer: new buffer class
2014-03-15 18:35:52 +01:00
Max Kellermann
7d353bbe2a
configure.ac: always define _GNU_SOURCE on Linux
...
Make sure glibc gives us all features.
2014-03-15 18:27:09 +01:00
Max Kellermann
5696f91a1e
pcm/PcmFormat: ARM NEON optimizations for float->s16
...
This is nearly 4 times faster than the "portable" algorithm.
2014-03-15 11:41:01 +01:00
Max Kellermann
bb6ee71f08
pcm/PcmFormat: don't use WritableBuffer
...
The previous commit eliminated the need for that.
2014-03-14 23:23:16 +01:00
Max Kellermann
0d0642fd67
pcm/PcmFormat: instantiate FloatToInteger<S32>
...
.. instead of reusing FloatToInteger<S24> and converting from S24 to
S32 in-place.
2014-03-14 23:21:20 +01:00
Max Kellermann
08e6cf3dd2
pcm/PcmFormat: eliminate more duplicate code with templates
...
Refactor the conversion functions to classes and pass an instance to
the new function AllocateConvert().
2014-03-14 20:54:09 +01:00
Max Kellermann
044134eba0
pcm/PcmFormat: eliminate local variable "bits"
2014-03-14 20:53:22 +01:00
Max Kellermann
9fa6fa522e
pcm/PcmFormat: remove obsolete AllocateFromFloat() overload
2014-03-14 20:53:14 +01:00
Pete Beardmore
d0cd98a63a
MultipleOutputs: ensure input_audio_format is zero-initialised
...
-fixes SIGABRT when mpd is started from a previously paused state
-regression introduced by commit: f5a923b9d1
:
'OutputAll: convert to class, move instance to class Partition'
-input_audio_format was previously declared using the static modifier
ensuring it was zero-initialised by default
-the current default-initialised input_audio_format contains garbage at
runtime which allows the AudioFormat.IsDefined() 'fail fast' test in
MultipleOutputs::Update to pass and the SIGABRT follows in
AudioOutput::Open when passed the invalid input_audio_format struct
-switching AudioFormat.IsDefined() for AudioFormat.IsValid() is an
alternative workaround
2014-03-14 20:27:21 +01:00
Max Kellermann
88eae9dabb
command/{storage,file}: suppress bogus format warnings on WIN32
2014-03-14 08:58:43 +01:00
Max Kellermann
f2f1801c25
db/proxy: check connect error before initializing SocketMonitor
...
Fixes crash bug because mpd_connection_get_async() was called without
a connection.
2014-03-06 13:35:42 +01:00
Max Kellermann
a9e351e00d
decoder/gme: fix memory leak in container_scan()
2014-03-06 13:12:39 +01:00
Pete Beardmore
9da57e7458
PulseOutputPlugin: avoid locking mainloop object from within mainloop thread
...
-fixes regression introduced by:
'8d6fedf8177d0d2ced81e6d93d35c368b2ac69db [PATCH] Mixer: add class MixerListener'
-listener.OnMixerVolumeChanged() called GetVolume() which attempted to acquire
the lock but as per 'pa_threaded_mainloop_lock()' documentation:
This function may not be called inside the event loop thread. Events that are
dispatched from the event loop thread are executed with this lock held
-this patch seperates the underlying action of GetVolume() into a new
GetVolumeInternal() function, to be called only when the lock is already held, as
is the case for the listener.OnMixerVolumeChanged() call
2014-03-05 17:17:41 +00:00
Pete Beardmore
3a3fb98f79
PulseOutputPlugin: set icon name
2014-03-04 15:18:30 +00:00
Max Kellermann
503ed9c331
release v0.18.9
...
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAABAgAGBQJTEwdzAAoJECNuiljG20USkFYP/i1PaM7O20e2EPE7ELhffk1I
PEL6WiuCxfEHP+JbH/RPy/CdyKIqx3TTeaktXzOJmCcU+5fAgbpIwfK689ZjpE7Y
U+7aPfGudfjYTxM/bigEo+1XAIYWJCJ2IlopN0lRIZSquUm8rfxosqsNzJFrhwsK
40Ps36XdpYUA3z9dugyJjeKQETkjJa5Y55C1yml5RRUz+yPqyiPelm0dSlx3Ggce
KpmNZfp8g8/stwb08iw+qk+cNKP75eJwPdFmQrsc91QxP1oW7ERWhiICA0ZtqaNe
T0Ld5+wZ6uTJSztQiUsWrJYS1yKix5q1Za8tyFr3a9NPI+iIjsALXqU9k7zmZ6Id
GK0Xr9Noo1o80QeGkd60nJyCQXbEU/V0p9D/QiDVei+IvK6mbxF3y2gPA7wobgrC
KEDgsJZ+0fjmgdx+eb8ydg0uIwHrk04u0YKukUqA3bkNS/PUEICPqblcg8Spf89I
RMdjq2HFcpkaIwGvryfHIbTNUbonAziMzmiJ0WQA1FCD3x1WELvBf09GzAsUEoFX
Be0Co15rODOByo5ryZvSJv5BCr2RuCPwzNF+V26nMaKK7EloQWmbO0rpkRLVRk81
qo1JmElm6SyeE3kHqVW/NyrPxLtd7VngV+z9hXr95szUjCjMv/MK169r4jumLTex
RLyPDkhkQLDIijamhjfZ
=nX0n
-----END PGP SIGNATURE-----
Merge tag 'release-0.18.9'
2014-03-02 11:46:07 +01:00
Max Kellermann
47ea69233b
output/alsa: remove the obsolete Raspberry Pi workaround
...
Has been superseded by the previous commit.
2014-03-02 11:22:04 +01:00
Max Kellermann
a884e37de1
output/alsa: call snd_pcm_prepare() after snd_pcm_drop()
...
Don't wait for an optimistic write to fail. This is an improved
workaround for the infamous Raspberry Pi bug (see commit af991765
).
It works much better and comes without the negative side effects. The
old workaround is now obsolete.
2014-03-02 11:12:25 +01:00
Max Kellermann
0102a8665a
event/SignalMonitor: fix build failure due to missing signal.h include
2014-03-02 10:21:31 +01:00
Max Kellermann
d77c83f4ba
Main: auto-configure state file on Android
2014-03-02 00:35:37 +01:00
Max Kellermann
8cf3ac200b
Main: use getExternalStorageDirectory() for locating mpd.conf
2014-03-02 00:24:31 +01:00
Max Kellermann
2bf2f34b12
InputPlugin: allow init() to soft-fail
...
Add enum InputResult which is a tri-state. Input plugins may now fail
and just become unavailable.
2014-03-02 00:17:32 +01:00
Max Kellermann
7453c26ec4
thread/Name: fall back to prctl()
2014-03-01 23:58:59 +01:00
Max Kellermann
b059ba69d6
output/sles: support stereo
2014-03-01 23:05:44 +01:00
Max Kellermann
36ca57a54e
fs/StandardDirectory: add GetUserCacheDir()
...
Move code from CreateConfiguredDatabase() and add XDG support. This
implements an automatic Linux fallback for the setting "db_file" if
none was specified.
2014-03-01 22:51:51 +01:00
Max Kellermann
b8f1850bba
db/Configured: store database file in cache directory
...
Add class Context which wraps the Android/Java Context class and add a
JNI wrapper for method Context.getCacheDir().
2014-03-01 22:20:28 +01:00
Max Kellermann
5268f55344
java/File: add method ToAbsolutePath() returning AllocatedPath
2014-03-01 20:53:39 +01:00
Max Kellermann
e44c9a000d
android/Environment: fix copyright header
...
Stole my own code from another project :-)
2014-03-01 20:22:22 +01:00
Max Kellermann
07c1ba1f5e
TagId3: disable charset conversion without GLib
2014-03-01 19:18:50 +01:00
Max Kellermann
14168eadb2
Main: inline mpd_main() on Android
2014-03-01 19:09:31 +01:00
Max Kellermann
58771fc41c
Android: obtain music directory from Environment.getExternalStoragePublicDirectory()
2014-03-01 18:48:20 +01:00
Max Kellermann
1e06c66c77
java: new helper library for the Android port
2014-03-01 18:48:20 +01:00
Max Kellermann
c73771e3ce
Main: load mpd.conf from /sdcard/ on Android
...
Hard-coded path. Will be replaced soon.
2014-03-01 18:48:20 +01:00
Max Kellermann
350d2bcd6e
storage/Configured: fix fallback music directory
...
This was accidently disabled when storage plugins were introduced.
2014-03-01 18:45:09 +01:00
Max Kellermann
7ccc609da2
db/update/ExcludeList: make no-op if GLib is disabled
...
Quick hack to allow using the database without GLib (for Android).
2014-03-01 08:16:13 +01:00
Max Kellermann
4ba7427fa0
util/{Const,Writable}Buffer: add operator[]
2014-03-01 07:49:13 +01:00
Max Kellermann
9dc5335e3e
util/{Const,Writable}Buffer: add template specialization for "void"
...
Omit a few methods that are not applicable.
2014-03-01 07:37:58 +01:00
Max Kellermann
d333de1980
util/ConstBuffer: remove cast operator ConstBuffer<void>
...
This was bugged, because it did not scale the "size".
2014-03-01 07:37:20 +01:00
Max Kellermann
96afa8bd2b
command: add command "listfiles"
...
Lists files and directories. Supports storage plugins.
2014-03-01 06:25:57 +01:00
Max Kellermann
20cdab5546
DatabasePrint: move code to PrintDirectoryURI()
2014-02-28 08:21:34 +01:00
Max Kellermann
6765234b60
DatabasePrint: add API documentation
2014-02-28 08:17:25 +01:00
Max Kellermann
4c27898ce7
{Other,Database}Commands: contract declaration and assignment
2014-02-28 07:12:04 +01:00
Max Kellermann
d34ae0850c
AllCommands: "findadd" requires the "add" permission
2014-02-27 23:08:22 +01:00
Max Kellermann
e9a85aa4e4
db/simple: mount points
...
A SimpleDatabase instance can now "mount" other Database instances at
certain locations. This is used to use a new SimpleDatabase instance
for each storage mount (issued with the "mount" protocol command).
Each such instance has its own database file, stored in the directory
that is specified with the "cache_directory" option.
2014-02-27 20:49:13 +01:00
Max Kellermann
2a16fc74fd
CompositeStorage: add method GetMount()
2014-02-27 20:49:13 +01:00
Max Kellermann
f65254680a
db/update/Queue: use std::list instead of std::queue
...
The problem with std::queue is that it doesn't give us enough control.
The method Clear() is a kludge already, but soon, we'll need
filtering.
2014-02-27 20:49:13 +01:00
Max Kellermann
d64edb6896
db/simple: GetRoot() returns reference
2014-02-27 19:29:10 +01:00
Max Kellermann
3f9ad8e104
db/update/Service: allocate UpdateWalk dynamically
2014-02-27 18:04:24 +01:00
Max Kellermann
1c772ef699
Playlist: use the Error library to return errors
2014-02-27 17:27:23 +01:00
Max Kellermann
809b89b5af
Playlist*: move to queue/
2014-02-27 17:12:42 +01:00
Max Kellermann
681e012fb5
db/update: cancel the update on shutdown
2014-02-27 16:58:35 +01:00
Max Kellermann
3be36643a1
db/UpdateGlue: rename to Service.cxx
2014-02-27 16:14:10 +01:00
Max Kellermann
21e19ef69f
db/simple/Directory: eliminate method LookupSong()
...
Move to SimpleDatabase::GetSong() to give that method more control.
2014-02-26 20:10:31 +01:00
Max Kellermann
69a42fc901
db/simple/Directory: LookupDirectory() return remaining URI
...
Code can now be reused in LookupSong().
2014-02-26 19:50:46 +01:00
Max Kellermann
525789cd36
db/simple/Directory: make variables more local
2014-02-26 19:50:36 +01:00
Max Kellermann
367d660c08
db/Directory: add DEVICE_* documentation
2014-02-26 10:00:38 +01:00
Max Kellermann
4d73e4d605
db/simple: create dedicated directory
2014-02-26 09:17:41 +01:00
Max Kellermann
d86cc5bf42
db/Song: update API documentation for SimpleDatabasePlugin
2014-02-25 22:16:20 +01:00
Max Kellermann
5f262da09d
db/simple: remove unused method LookupDirectory()
2014-02-25 20:13:40 +01:00
Max Kellermann
82985a9488
db/simple: make internal methods "private"
2014-02-25 19:48:01 +01:00
Max Kellermann
afcdb65f80
db/simple: add comment
2014-02-25 18:17:54 +01:00
Max Kellermann
6b66e86f40
db/simple: move Create() up
2014-02-25 18:17:39 +01:00
Max Kellermann
cb145d290e
DirectorySave: save the flags "DEVICE_INARCHIVE" and "DEVICE_CONTAINER"
...
Helps avoid unnecessary archive scans during database update on a
fresh MPD process.
2014-02-25 18:16:19 +01:00
Max Kellermann
167803d2a1
DatabaseSave: increase DB_FORMAT version
2014-02-25 18:16:06 +01:00
Max Kellermann
58a981d2f6
DatabaseSave: add constant OLDEST_DB_FORMAT
2014-02-25 18:15:55 +01:00
Max Kellermann
8963cd1fab
DirectorySave: move code to ParseLine()
2014-02-25 18:15:43 +01:00
Max Kellermann
6526de024a
output/pulse: remove bogus g_free() call
2014-02-24 21:23:49 +01:00
Max Kellermann
55cd5a9a78
DirectorySave: save the mtime only if it is known
2014-02-24 21:17:06 +01:00
Max Kellermann
3f4c283203
icu/Collate: pass UErrorCode* to ucol_strcollUTF8()
...
Fixes crash after database update.
2014-02-24 21:05:44 +01:00
Max Kellermann
1e63e7c08b
icu/Collate: initialize the error code before ucol_open()
...
Fixes initialization failure.
2014-02-24 21:04:23 +01:00
Max Kellermann
33fc3af775
SongSort, ...: use libicu instead of GLib's g_utf8_*()
2014-02-24 20:39:37 +01:00
Max Kellermann
6d9739165e
output/httpd/client: eliminate GLib
2014-02-24 20:39:37 +01:00
Max Kellermann
7c5396ffb9
output/{shout,win32}: include cleanup
2014-02-24 20:34:09 +01:00
Max Kellermann
8319398957
output/openal: use usleep() instead of g_usleep()
2014-02-24 20:33:15 +01:00
Max Kellermann
a1509876de
output/pulse: use setenv() instead of g_setenv()
...
There is no advantage in using g_setenv().
2014-02-24 20:31:38 +01:00
Max Kellermann
0f2cf51f43
output/pulse: remove bogus g_free() call
2014-02-24 20:29:29 +01:00
Max Kellermann
e99ff4fdbc
decoder/gme: use free() instead of g_free()
2014-02-24 20:19:34 +01:00
Max Kellermann
25431f32a2
DecoderPlugin: free the container_scan() return value with delete[]
2014-02-24 20:19:34 +01:00
Max Kellermann
6ba1fe7568
UriUtil: support ftp:// URLs in uri_remove_auth()
2014-02-24 19:59:53 +01:00
Max Kellermann
bfae92e307
Main: use INT_MAX instead of G_MAXUINT
2014-02-24 18:57:03 +01:00
Max Kellermann
8fe004e98e
fs/Charset: use "UTF-8" instead of "utf-8" as the default value
...
The upper-case name seems to be the canonical one.
2014-02-23 22:03:40 +01:00
Max Kellermann
09e5f17b5d
Directory: use PathTraitsUTF8::Build() instead of g_strconcat()
2014-02-23 22:02:39 +01:00
Max Kellermann
db20e29af6
Directory: pass std::string&& to constructor
2014-02-23 22:02:02 +01:00
Max Kellermann
240a697f6c
encoder/opus: use xalloc() instead of g_malloc()
2014-02-22 13:40:11 +01:00
Max Kellermann
5a0dc808fd
decoder/opus: use new[] instead of g_malloc()
2014-02-22 13:37:36 +01:00
Max Kellermann
4dcf0b8ae0
first Android release
...
Finally, MPD runs on Android. For some small value of "runs". Very
much work left, too much to describe.
2014-02-22 01:39:08 +01:00
Max Kellermann
9574d11dc8
output/sles: new output plugin for Android
2014-02-22 00:18:46 +01:00
Max Kellermann
3d4689756c
Main: disable command-line parser and signal handlers on Android
2014-02-22 00:18:46 +01:00
Max Kellermann
90114514a9
LogBackend: use __android_log_print() on Android
2014-02-22 00:18:46 +01:00
Max Kellermann
7757e59e78
input/curl: include cleanup
2014-02-22 00:18:29 +01:00
Max Kellermann
b7a7953757
db/Directory: use "unsigned" for inode and device
...
This is what we get from the storage plugin via FileInfo. Fixes a
compiler warning on Mac OS X where dev_t appears to be signed.
2014-02-21 10:48:43 +01:00
Max Kellermann
30a82076ba
PlayerListener: new interface to replace GlobalEvents access
2014-02-21 10:22:35 +01:00
Max Kellermann
008723c62f
ConfigGlobal: eliminate function config_get_next_param()
2014-02-20 00:04:23 +01:00
Max Kellermann
04ba433ca6
Main: initialize Partition before Listener
...
Fixes nullptr dereference (regression by commit df5f9f4a
).
2014-02-20 00:04:23 +01:00
Max Kellermann
d884272ba8
Listen: eliminate local variable
2014-02-19 23:50:47 +01:00
Max Kellermann
e609c88334
Listen: reduce overhead for builds without systemd
2014-02-19 23:49:34 +01:00
Max Kellermann
e92a41fa3a
db/upnp: move plugin source to upnp directory
2014-02-19 23:46:00 +01:00
Max Kellermann
df5f9f4a15
Listen: add Partition reference
2014-02-19 23:43:36 +01:00
Max Kellermann
150443b014
DatabasePlugin: add FLAG_REQUIRE_STORAGE
...
Ignore the storage configuration if FLAG_REQUIRE_STORAGE is not set in
the DatabasePlugin.
2014-02-19 23:24:17 +01:00
Max Kellermann
9e36af7916
DatabasePlugin: add attribute "flags"
2014-02-19 23:24:15 +01:00
Max Kellermann
85b8675e7a
db/Interface: add attribute "plugin"
...
The new method IsPlugin() replaces the "is_simple" flag.
2014-02-19 23:17:21 +01:00
Max Kellermann
ae594ad92c
DatabasePlugin: split header
2014-02-19 22:54:52 +01:00
Max Kellermann
8d6fedf817
Mixer: add class MixerListener
...
Use a listener interface instead of GlobalEvents.
2014-02-19 21:40:14 +01:00
Max Kellermann
f4f8fa7c94
output/Init: pass AudioOutput references
2014-02-19 21:38:48 +01:00
Max Kellermann
fb5fbb8088
util/Tokenizer: relicense to BSD-2
2014-02-19 10:41:48 +01:00
Max Kellermann
e624171ba1
StickerCommands: include cleanup
2014-02-19 09:53:22 +01:00
Max Kellermann
0bbfb28992
output/httpd: move to dedicated directory
2014-02-19 09:22:08 +01:00
Max Kellermann
ee7bd695fd
Timer: move to output/
2014-02-19 09:22:08 +01:00
Max Kellermann
1cc17bfe7a
cue/CueParser: move to playlist/
2014-02-19 08:56:58 +01:00
Max Kellermann
e8789d7cb9
system/FatalError: remove GError support
2014-02-18 23:05:40 +01:00
Max Kellermann
0053cd0d0d
Main: disable inotify check without database
...
Fix build failure.
2014-02-18 21:47:01 +01:00
Max Kellermann
c32477a223
Merge branch 'v0.18.x'
2014-02-18 21:46:41 +01:00
Max Kellermann
5e1e92626c
event/SignalMonitor: unblock signals after fork
...
Fixes hanging child process in the "pipe" output plugin.
2014-02-18 19:13:50 +01:00
Max Kellermann
a0c25941a8
Thread/Util: use __NR_ioprio_set instead of SYS_ioprio_set
...
Bionic doesn't have the SYS_* macros.
2014-02-18 10:44:18 +01:00
Max Kellermann
5eb468bce0
Thread/Util: make SCHED_RESET_ON_FORK optional
...
Use it if it exists, but don't insist if the C library is poor
(e.g. Bionic/Android).
2014-02-18 10:43:24 +01:00
Max Kellermann
9b7f492c65
thread/Posix{Mutex,Cond}: disable "constexpr" on Android
...
Bionic's pthread declarations are non-literal.
2014-02-18 09:54:35 +01:00
Max Kellermann
6eda79d02d
system/EPollFD: add epoll_create1() fallback for Android
2014-02-18 09:54:35 +01:00
Max Kellermann
e10a8d95f6
PlaylistRegistry: disable the "pls" plugin without GLib
2014-02-18 09:18:42 +01:00
Max Kellermann
97f2be348c
LogInit: disable SetLogCharset() without GLib
2014-02-18 09:18:42 +01:00
Max Kellermann
2b21312b36
util/StringUtil: add StringEndsWith()
...
Replaces g_str_has_suffix().
2014-02-18 09:18:42 +01:00
Max Kellermann
3a818b6d45
SongFilter: disable g_utf8_casefold() without GLib
...
Temporary hack for the experimental no-GLib build.
2014-02-18 09:18:42 +01:00
Max Kellermann
1709ab6810
fs/TextFile: use custom allocation instead of GString
2014-02-17 23:04:10 +01:00
Max Kellermann
ce925ba56f
fs/Charset: disable if GLib is disabled
2014-02-17 22:48:26 +01:00
Max Kellermann
4ad14f6a2c
TagId3: use xstrdup() instead of g_strdup()
2014-02-17 22:42:54 +01:00
Max Kellermann
579e48edbb
util/StringUtil: add function Strip()
...
Replaces g_strstrip().
2014-02-17 22:37:43 +01:00
Max Kellermann
6a08f2281a
TagString: disable UTF-8 validation if GLib is disabled
2014-02-17 22:33:10 +01:00
Max Kellermann
91729437a0
Main: initialize Database before Storage
2014-02-17 22:14:00 +01:00
Max Kellermann
3af7af0b8f
Main: move code to InitDatabaseAndStorage()
2014-02-17 22:13:53 +01:00
Max Kellermann
1ddd00433e
db/Configured: disallow both "db_file" and "database"
...
This is misconfiguration, and MPD should abort.
2014-02-17 22:13:53 +01:00
Max Kellermann
de160bb2d1
Main: move code to db/Configured.cxx
2014-02-17 22:13:53 +01:00
Max Kellermann
ff62b6742b
Main: check if database exists before attempting to close it
...
Fixes nullptr dereference.
2014-02-17 22:13:53 +01:00
Max Kellermann
6da0af94df
db/DatabaseSimple: remove obsolete header
2014-02-17 20:44:03 +01:00
Max Kellermann
df9667a497
StorageCommands: add command "unmount"
2014-02-12 23:48:08 +01:00
Max Kellermann
e3e2ad4ae5
CompositeStorage: fix tree walk in Directory::Unmount()
2014-02-12 23:48:08 +01:00
Max Kellermann
ace4ba3171
StorageCommands: emit IDLE_MOUNT on successful "mount"
...
Add the new idle event to Idle.hxx/Idle.cxx.
2014-02-12 23:06:47 +01:00
Max Kellermann
0935ae330a
StorageCommands: add command "listmounts"
2014-02-12 21:47:59 +01:00
Max Kellermann
d05ae4b444
util/HugeAllocator: relicense to BSD-2
2014-02-10 13:32:50 +01:00
Max Kellermann
73b0610d89
PlaylistSong: copy the "real" URI
...
Playback with some decoder plugins was broken because the Queue's
DetachedSong instances did not have the "real" URI (the mapped path).
2014-02-10 11:00:49 +01:00
Max Kellermann
73aec9ce63
StorageCommands: expose the "mount" command
2014-02-09 11:07:08 +01:00
Max Kellermann
a9fefcf600
Main: wrap the Storage instance in CompositeStorage
2014-02-09 11:07:08 +01:00
Max Kellermann
59ce67e2e5
CompositeStorage: new Storage implementation
...
This is the backend for the upcoming "mount" command.
2014-02-09 10:47:29 +01:00
Max Kellermann
2182209a8a
db/update/Walk: disable FindAncestorLoop() if device/inode==0
2014-02-09 10:47:29 +01:00
Max Kellermann
e29a8b3a9c
db/update/Walk: document FindAncestorLoop()
2014-02-09 10:46:39 +01:00
Max Kellermann
ace3f37af4
db/update/Walk: rename find_inode_ancestor() to FindAncestorLoop()
2014-02-09 10:46:39 +01:00
Max Kellermann
37b6899660
Main: move code to storage/Configured.cxx
2014-02-09 08:09:47 +01:00
Max Kellermann
570b12ec13
Idle: error out when unrecognized idle event was specified
...
Implements the error checks missing in commit 0bad8406
2014-02-09 08:07:48 +01:00
Max Kellermann
ac286ef734
OtherCommands: remove unnecessary nullptr check
2014-02-09 08:07:43 +01:00
Max Kellermann
b3663b5da2
storage/nfs: new storage plugin
2014-02-08 14:24:47 +01:00
Max Kellermann
d761d8b168
input/nfs: move nfs_domain to lib/nfs/Domain.cxx
2014-02-08 14:24:47 +01:00
Max Kellermann
fe7c6fee34
ArchivePlugin: pass Path to open()
2014-02-08 13:25:44 +01:00
Max Kellermann
9906daeca7
ArchivePlugin: rename struct archive_plugin to ArchivePlugin
2014-02-08 13:22:13 +01:00
Max Kellermann
3fdc678aae
Main: support arbitrary storage plugins
2014-02-08 00:04:29 +01:00
Max Kellermann
a0088ccce1
storage: add struct StoragePlugin and a plugin registry
2014-02-07 23:46:15 +01:00
Max Kellermann
be081929f4
storage/local: remove utf8 path from constructor
...
Build the UTF-8 version of the path automatically in the constructor.
2014-02-07 23:41:06 +01:00
Max Kellermann
b0b086d473
Main: move storage initialization to InitStorage()
2014-02-07 23:37:39 +01:00
Max Kellermann
6798af52b6
Mapper: obtain music directory from Storage
...
Eliminate duplicate variable.
2014-02-07 23:34:29 +01:00
Max Kellermann
4d5ebafa6d
Main: check the music directory
...
Move call from Mapper.cxx.
2014-02-07 23:29:20 +01:00
Max Kellermann
ec8873b178
Mapper: move check_directory() to the filesystem library
2014-02-07 23:25:47 +01:00
Max Kellermann
c45f205593
Main: chop separators from music directory
...
Move call from Mapper.cxx.
2014-02-07 23:13:24 +01:00
Max Kellermann
027b2063ba
Mapper: remove unused functions
2014-02-07 23:03:25 +01:00
Max Kellermann
b531c4c2fe
OtherCommands: use Storage::MapUTF8() instead of Mapper.cxx
2014-02-07 22:58:21 +01:00
Max Kellermann
4b010df99e
Main: create Storage instance in glue_mapper_init()
...
Don't use the obsolete Mapper library to create it.
2014-02-07 22:54:18 +01:00
Max Kellermann
5e4dd4be9c
Main: allow playlist directory without music directory
2014-02-07 22:39:17 +01:00
Max Kellermann
f947274626
InotifyUpdate: use class Storage instead of Mapper.cxx
2014-02-07 22:30:40 +01:00
Max Kellermann
f6939f71a7
InotifyUpdate: use the root name instead of mapper_get_music_directory_fs()
...
The root WatchDirectory instance already contains the music directory,
and we don't need to fetch it again.
2014-02-07 22:30:01 +01:00
Max Kellermann
25aa17ad89
InotifyUpdate: move functions into the WatchDirectory class
2014-02-07 22:24:26 +01:00
Max Kellermann
05ee057db5
InotifyUpdate: remove unnecessary #ifdefs
2014-02-07 22:17:27 +01:00
Max Kellermann
297e2747f3
PlaylistMapper: use class Storage instead of Mapper.cxx
2014-02-07 21:44:50 +01:00
Max Kellermann
77de233117
Playlist{Any,Registry,Mapper}: move functions to PlaylistStream.cxx
2014-02-07 21:30:49 +01:00
Max Kellermann
02b67edaf5
PlaylistSong: include cleanup
2014-02-07 21:30:03 +01:00
Max Kellermann
8549ccfd8c
playlist/CloseSongEnumerator: new wrapper class
...
Simplifies a lot of code, because we don't need to return both the
SongEnumerator and the InputStream.
2014-02-07 20:27:24 +01:00
Max Kellermann
ffd16b55a6
StoragePlugin: add method MapToRelativeUTF8()
...
Replaces map_to_relative_path() from Mapper.cxx.
2014-02-07 19:09:28 +01:00
Max Kellermann
d744c997d8
fs/Traits: add function Relative()
...
Move code from Path::RelativeFS() and make it generic.
2014-02-07 19:08:51 +01:00
Max Kellermann
6b421cc354
DecoderPlugin: pass Path instance to file_decode() and scan_file()
2014-02-07 18:52:19 +01:00
Max Kellermann
37ec29b225
Mapper: remove unused function map_song_fs()
2014-02-07 18:51:19 +01:00
Max Kellermann
ca7f6a26b5
DecoderThread: use only DetachedSong::GetRealURI()
...
Don't use the mapper - all DetachedSong instances we get have already
been mapped.
2014-02-07 18:50:07 +01:00
Max Kellermann
9b69d22d7e
DecoderThread: pass Path object around for local song files
2014-02-07 18:45:11 +01:00
Max Kellermann
4ab4cf8532
SongUpdate: pass Storage to UpdateFileInArchive()
2014-02-07 18:44:47 +01:00
Max Kellermann
3341b282b7
PlaylistSave: use DetachedSong::GetRealURI() in playlist_print_song()
...
The DetachedSong instance already knows its own absolute path, and
there is no need to ask the mapper again.
2014-02-07 18:42:16 +01:00
Max Kellermann
bb3b836dbb
FileCommands: support remove database files
2014-02-07 18:41:42 +01:00
Max Kellermann
1873c67540
FileCommands: use Storage::MapFS() instead of map_uri_fs()
2014-02-07 18:38:10 +01:00
Max Kellermann
8fd8f23a6b
FileCommands: move code to read_file_comments()
2014-02-07 18:33:43 +01:00
geneticdrift
f225051348
fixed possible format_context not closed in ffmpeg_decode
2014-02-07 12:07:43 +01:00
Max Kellermann
b2e3fdef0f
storage/local: hide the class declarations
...
Hide inside CreateLocalStorage().
2014-02-07 01:11:52 +01:00
Max Kellermann
c13810ebaa
Mapper: move map_song_detach() to db/DatabaseSong.cxx
...
Use Storage::MapUTF8() internally, don't use global variables.
2014-02-07 00:42:14 +01:00
Max Kellermann
19a982cf69
Mapper: convert IsInDatabase() check to assertion in map_song_detach()
2014-02-07 00:42:14 +01:00
Max Kellermann
327cbf48f5
pcm/FallbackResampler: add missing ConstBuffer<T>::ToVoid() call
2014-02-06 23:48:01 +01:00
geneticdrift
0f1f509be7
fixed leaked LocalDirectoryReader *const reader in UpdateWalk::UpdateDirectory
2014-02-06 23:08:24 +01:00
Max Kellermann
c8f0c7e9ed
*/smbclient: protect all libsmbclient calls with a mutex
...
libsmbclient is not thread-safe nor reentrant. We must protect all
function calls with a global mutex, unfortunately.
2014-02-06 22:19:59 +01:00
Max Kellermann
a7989077ab
neighbor/smbclient: move smbclient_domain to lib/smbclient/Domain.cxx
2014-02-06 22:12:50 +01:00
Max Kellermann
0a0659d737
mixer/Plugin: pass AudioOutput reference to init()
...
Passing a void pointer is unsafe.
2014-02-06 21:10:12 +01:00
Max Kellermann
b6df4680df
MixerPlugin: convert function pointers to Mixer virtual methods
2014-02-06 20:52:33 +01:00
Max Kellermann
e04090b477
Mixer: delete the implicit copy constructor
2014-02-06 20:52:25 +01:00
Max Kellermann
c9fb6f7bdb
Mixer: make the constructor "explicit"
2014-02-06 20:52:25 +01:00
Max Kellermann
ad6b05ae17
mixer/software: use IgnoreError()
2014-02-06 20:52:25 +01:00
Max Kellermann
29b18d9ab7
SongUpdate: use the Storage interface, support remote files
...
This commit finally allows the database update to scan remote files,
e.g. using the smbclient storage plugin. However, it is not yet
possible to configure that, therefore the feature is not accessible
yet.
2014-02-06 19:06:08 +01:00
Max Kellermann
ad309cdeae
SongUpdate: make variables more local
2014-02-06 18:58:56 +01:00
Max Kellermann
e4322a716c
input/nfs: new plugin using libnfs
2014-02-06 18:37:27 +01:00
Max Kellermann
957beeb0e9
storage/smbclient: Storage implementation using libsmbclient
2014-02-06 07:19:14 +01:00
Max Kellermann
522ad4cca6
Instance: narrow "storage" to class Storage
2014-02-06 07:19:14 +01:00
Max Kellermann
dc76b24e5f
storage/local: OpenDirectory() returns StorageDirectoryReader*
2014-02-05 19:35:41 +01:00
Max Kellermann
e3e3053f32
storage/Interface: explicitly delete copy constructors
2014-02-05 19:30:58 +01:00
Max Kellermann
c8c3f20840
storage/local: move to src/storage/plugins/
2014-02-05 19:26:21 +01:00
Max Kellermann
f6682aae77
db/update: include StorageInterface.hxx instead of LocalStorage.hxx
2014-02-05 19:26:18 +01:00
Max Kellermann
0ba1b73395
storage: add abstract interface
...
Prepare for the plugin interface.
2014-02-05 18:53:51 +01:00
Max Kellermann
4c995eb498
db/UpdateWalk: move LocalStorage to Instance
...
Keep only a reference.
2014-02-05 17:58:13 +01:00
Max Kellermann
144cfe70bf
db/update/Remove: initialize attribute "removed_song"
...
Fixes bogus assertion failure.
2014-02-05 17:58:13 +01:00
Max Kellermann
855f26c43d
Mixer: use reference instead of pointer for MixerPlugin
2014-02-05 17:25:47 +01:00
Max Kellermann
f86e159536
Mixer: rename struct mixer_plugin to MixerPlugin
2014-02-05 17:22:34 +01:00
Max Kellermann
243c4e1e83
Main: remove unused global variable "main_thread"
2014-02-05 17:04:16 +01:00
Max Kellermann
9ae7f186bc
LocalStorage: new API abstracting filesystem walk
...
Prepare to make this a new plugin API, for example to use a SMB share
for the music_directory.
2014-02-05 10:04:03 +01:00
Max Kellermann
f8d114be42
db/UpdateIO: add "pure" attributes
2014-02-05 10:04:03 +01:00
Max Kellermann
2c70251df1
db/UpdateGlue: relax assertion
...
Fixes assertion failure when update gets launched during MPD startup.
2014-02-05 10:04:03 +01:00
Max Kellermann
d380db25be
Instance: add attribute "event_loop"
...
Replaces global variable "main_loop".
2014-02-05 00:09:36 +01:00
Max Kellermann
e8938b1069
MixerPlugin: add EventLoop& init() parameter
2014-02-05 00:02:02 +01:00
Max Kellermann
4a28333039
event/Loop: remove the dummy constructor argument
2014-02-05 00:00:03 +01:00
Max Kellermann
ff665b37cb
db/DatabaseListener: add method OnDatabaseSongRemoved()
...
Decouples db/update/Remove.cpp from global variables.
2014-02-04 19:53:37 +01:00
Max Kellermann
ce73843014
db/proxy: include cleanup
2014-02-04 19:53:12 +01:00
Max Kellermann
bae6f653d1
Instance: merge DatabaseModified() into OnDatabaseModified()
2014-02-04 19:17:22 +01:00
Max Kellermann
eec6d09959
db/update/Service: use DatabaseListener instead of Instance
...
Don't use the global variable "instance".
2014-02-04 18:54:54 +01:00
Max Kellermann
c5fa8ed321
db/update/Service: use EventLoop::IsInside()
...
Don't use the global variable "main_thread".
2014-02-04 18:54:45 +01:00
Max Kellermann
abc16b919d
{Message,Neighbor}Commands: use Client::partition instead of Main.hxx
2014-02-04 11:35:23 +01:00
Max Kellermann
2de7cd32ea
ClientMessage: undefine GetMessage on WIN32
2014-02-04 11:35:14 +01:00
Max Kellermann
098aa18538
GlobalEvents: remove obsolete event DELETE
2014-02-04 11:25:41 +01:00
Max Kellermann
cf6281a5a7
Instance: add Database attribute
...
Move from db/DatabaseGlue.cxx, eliminating global variable.
2014-02-04 11:22:33 +01:00
Max Kellermann
f00710a57e
Main: create UpdateService instance in glue_db_init_and_load()
2014-02-04 11:22:32 +01:00
Max Kellermann
c953904343
db/update/Service: initialize "progress" and "update_task_id"
...
Database update was randomly broken due to these uninitialized
variables.
2014-02-04 11:22:13 +01:00
Max Kellermann
ddd36338da
StateFile: pass Database to SongLoader
...
Fixes loading database songs from state file (regression by commit
29072797c
).
2014-02-04 10:30:51 +01:00
Max Kellermann
d76b6f878e
db/update/Service: add SimpleDatabase reference
...
Don't use the global variables from the DatabaseSimple library.
2014-02-04 09:05:32 +01:00
Max Kellermann
f25ef8d682
db/update/Walk: add Directory reference parameter
...
Remove dependency on the DatabaseSimple library.
2014-02-04 09:05:32 +01:00
Max Kellermann
33a2c01ea2
db/Simple: remove unused function db_get_directory()
2014-02-04 09:03:17 +01:00
Max Kellermann
9c637df77e
SongSticker: add Database reference parameter
2014-02-04 01:15:08 +01:00
Max Kellermann
29072797ca
db/DatabasePlaylist: pass Database reference around
...
Reduce global variable usage, move to frontend code.
2014-02-04 00:57:43 +01:00
Max Kellermann
db69ceade6
db/LightSong: make "real_uri" a pointer
...
Reduce overhead. LightSong can always point to the "real" allocated
string.
2014-02-04 00:38:52 +01:00
Max Kellermann
b9c248e7e7
PlaylistFile: use class SongLoader
2014-02-03 23:50:19 +01:00
Max Kellermann
d533b59ee3
PlaylistFile: switch spl_append_uri() arguments
...
Playlist file name first, to be consistent with the other functions in
this library.
2014-02-03 23:33:25 +01:00
Max Kellermann
5ad2980d69
QueueSave: use class SongLoader
2014-02-03 23:32:31 +01:00
Max Kellermann
ca36ac2ba1
SongLoader: new class that merges duplicate code
...
There was quite a lot of duplicate code for loading DetachedSong
objects, with different semantics for "securely" loading local files.
2014-02-03 23:32:10 +01:00
Max Kellermann
ba675d6a55
FileCommands: use PathTraitsUTF8::IsAbsolute()
2014-02-03 23:31:28 +01:00
Max Kellermann
e4c5a4f61b
PlaylistSave: remove redundant backslash conversion
...
This is already being done by FixSeparators(), called from
PathToUTF8().
2014-02-03 23:15:57 +01:00
Max Kellermann
a8e52ad89f
ClientFile: move client_allow_file() into the Client class
2014-02-02 13:59:07 +01:00
Max Kellermann
8cf4fb53aa
Playlist: pass Database to DatabaseModified()
...
Don't use global variable.
2014-02-01 00:45:58 +01:00
Max Kellermann
1769ae54e4
Partition: disable DatabaseModified() if not ENABLE_DATABASE
2014-02-01 00:44:41 +01:00
Max Kellermann
e545679265
Main: don't measure DatabaseGlobalDeinit() time
...
Useless information.
2014-02-01 00:39:42 +01:00
Max Kellermann
981080500b
Stats: pass Database reference around
...
Call GetDatabase() only once.
2014-02-01 00:38:57 +01:00
Max Kellermann
636d28b784
Stats: remove obsolete "simple" plugin special case
...
The proxy plugin has now implemented the "idle" event listener.
2014-02-01 00:37:01 +01:00
Max Kellermann
188783ac1a
Stats: return false if update has failed
2014-02-01 00:36:36 +01:00
Max Kellermann
ff650d50a2
Mapper: assert that Song::parent is not nullptr
2014-01-31 23:14:13 +01:00
Max Kellermann
78689645dc
db/update/Archive: delete archive from database on error
2014-01-31 22:24:28 +01:00
Max Kellermann
26970579b8
db/update/Editor: add locking method variants
2014-01-31 22:17:49 +01:00
Max Kellermann
04b4f53488
db/update: convert runtime check to assertion
2014-01-31 21:59:35 +01:00
Max Kellermann
c310941f69
fs/AllocatedPath: add conversion constructor from Path
2014-01-30 23:36:57 +01:00
Max Kellermann
c02f146791
fs/DirectoryReader: GetEntry() returns Path, not AllocatedPath
...
Reduce overhead, don't duplicate the string.
2014-01-30 22:20:57 +01:00
Max Kellermann
a631200cca
update/Walk: declare std::string at assignment
...
Reduce overhead.
2014-01-30 22:19:56 +01:00
Max Kellermann
6207a3f999
PlaylistFile: narrow LoadPlaylistFileInfo() API to accept Path
2014-01-30 22:17:35 +01:00
Max Kellermann
0bd01824f6
fs/AllocatedPath: add Build() overlays with Path arguments
2014-01-30 22:15:13 +01:00
Max Kellermann
4465e2c46b
db: add compile-time option to disable database
2014-01-30 20:39:40 +01:00
Max Kellermann
34b309b99a
OtherCommands: merge duplicate code from handle_update(), handle_rescan()
2014-01-30 20:39:40 +01:00
Max Kellermann
c6725884bc
db/update: convert to OO API
...
Move global variables into the new classes. That may allow multiple
update threads for multiple databases one day.
2014-01-30 18:47:05 +01:00
Max Kellermann
a31738f6f1
Main, OutputThread: increase kernel timer slack (Linux)
...
Allows the kernel to combine timer wakeups with other processes,
reducing power usage.
2014-01-30 18:43:40 +01:00
Max Kellermann
d5b017407d
ExcludeList: move to db/update/
2014-01-30 10:11:12 +01:00
Max Kellermann
4b044bd8e1
InotifyUpdate: pass EventLoop to mpd_inotify_init()
2014-01-29 18:36:32 +01:00
Max Kellermann
aeaf64b467
Listen: pass EventLoop to listen_global_init()
...
Don't use global variables.
2014-01-29 18:32:28 +01:00
Max Kellermann
a137f817f5
db/Directory: move isRootDirectory() to Uri.hxx
...
Decouple command/OtherCommands.cxx from the "simple" database plugin.
2014-01-29 18:05:33 +01:00
Max Kellermann
ff87145537
sticker: don't use classes Directory and Song
...
Don't depend on the "simple" database plugin. This fixes an assertion
failure / crash and allows using stickers with other plugins.
2014-01-29 17:45:07 +01:00
Max Kellermann
667481c371
OutputThread: move more functions into the AudioOutput class
2014-01-29 09:26:11 +01:00
Max Kellermann
af71605769
output: rename "chunk" to "current_chunk"
2014-01-29 09:23:57 +01:00
Max Kellermann
4657a3bd0f
output: move functions into the AudioOutput struct
2014-01-29 08:10:46 +01:00
Max Kellermann
cb7366f472
AudioOutput: make "plugin" a reference
2014-01-29 08:10:36 +01:00
Max Kellermann
bf803e241f
AudioOutput: pass plugin to constructor
...
Make it "const".
2014-01-29 08:10:18 +01:00
Max Kellermann
5b3aa45e58
CommandLine: remove junk from string literal
2014-01-29 08:09:48 +01:00
Max Kellermann
c4403c523f
AudioOutput: add constructor and destructor
2014-01-28 12:37:58 +01:00
Max Kellermann
07b89b2bad
ConfigTemplates: rename "AudioOutput" back to "audio_output"
...
sed gone horribly wrong. D'oh!
2014-01-28 12:37:58 +01:00
Max Kellermann
68b79f97f3
output: rename source files
2014-01-28 11:42:54 +01:00
Max Kellermann
815d72065c
output: rename struct audio_output to AudioOutput
2014-01-28 11:34:09 +01:00
Max Kellermann
e0dc721324
OutputPlugin: rename struct audio_output_plugin to AudioOutputPlugin
2014-01-28 11:33:15 +01:00
Max Kellermann
2f873edc9c
thread/Name: implementation for Mac OS X
...
pthread_setname_np() doesn't have the "thread" argument on OS X.
2014-01-28 11:33:15 +01:00
Max Kellermann
f5a923b9d1
OutputAll: convert to class, move instance to class Partition
...
Another big chunk of code for multi-player support.
2014-01-28 09:20:53 +01:00
Max Kellermann
5273900b0e
neighbor/smbclient: add splice_after() fallback for gcc 4.6
2014-01-27 14:59:15 +01:00
Max Kellermann
f548a966f5
Playlist{Info,Vector}: move to db/
2014-01-27 11:05:21 +01:00
Max Kellermann
30fadaed7f
Merge branch 'v0.18.x'
2014-01-27 10:33:42 +01:00
Max Kellermann
2b10ecfa37
IcyMetadataParser: more robust tag parser
...
Allow semicolons and single quotes in the stream title. This is not
part of any specification, but found in real life.
2014-01-27 10:08:21 +01:00
Max Kellermann
0b3fbdba87
neighbor/upnp: UPnP media server discovery
2014-01-26 15:51:33 +01:00
Max Kellermann
3dad837ca6
db/upnp: remove sleep(2) call
...
This call was unnecessary. It is a bad idea anyway to block the MPD
process for some arbitrary amount of time.
2014-01-26 15:50:30 +01:00
Max Kellermann
d7e78059b0
upnp: initialize the client handle only once
...
Eliminate class LibUPnP and move the code to ClientInit.cxx. Its
initialization function can be called multiple times, but
UpnpRegisterClient() is called at most once.
2014-01-26 15:43:23 +01:00
Max Kellermann
01f7abfc63
upnp: move library initialization to Init.cxx
...
Allow calling UpnpGlobalInit() multiple times.
2014-01-26 15:23:26 +01:00
Max Kellermann
e57e89b9d5
upnp/discovery: use a plain UpnpClient_Handle instead of class LibUPnP
2014-01-26 15:22:33 +01:00
Max Kellermann
bcc1f93370
upnp: add class UpnpCallback
...
Each Upnp*Async() call passes a new cookie pointer, and the cookie
passed to UpnpRegisterClient() appears to be ignored. Using this
interface is a more elegant approach than having one single "handler"
function.
2014-01-26 15:04:56 +01:00
Max Kellermann
b161d72326
CueParser: don't "move" the filename
...
This invalidated the std::string instance, and thus broke the CUE
parser (commit 322b061632
).
2014-01-26 14:58:23 +01:00
Max Kellermann
66c013682f
upnp: remove obsolete global variable "theLib"
2014-01-26 13:54:48 +01:00
Max Kellermann
9f3ba737d6
upnp/Discovery: add listener interface
2014-01-26 13:41:40 +01:00
Max Kellermann
f86f5ad224
db/upnp: move generic code to lib/upnp/
2014-01-26 13:41:40 +01:00
Max Kellermann
8b6b3ff28a
neighbor/Glue: fix rollback range
2014-01-26 13:41:40 +01:00
Max Kellermann
4a3dc2cea2
db/upnp: rename variables
2014-01-26 13:08:52 +01:00
Max Kellermann
bd0cfffe23
neighbor/Info: add constructor
2014-01-26 13:07:53 +01:00
Max Kellermann
642be502c0
NeighborCommands: convert assertion to runtime check
2014-01-26 01:17:49 +01:00
Max Kellermann
5c4a42caa0
neighbor: new subsystem to detect file servers on the local network
...
This commit adds the NeighborPlugin API which can be used to detect
nearby file servers that can be used by input plugins. This list of
servers is exported using the new "listneighbors" command. The idle
even "neighbor" notifies interested clients when a new neighbor is
found or an existing one is lost.
There's a lot missing currently: protocol&user documentation, and a
way to "mount" remote servers into the music database. Obviously,
some code from the UPnP database plugin can be moved to a neighbor
plugin.
2014-01-26 00:10:05 +01:00
Max Kellermann
e847788569
lib/smbclient/Init: return empty username/password
...
This appears to be the right thing to do when we want anonymous login.
2014-01-26 00:08:50 +01:00
Max Kellermann
86ca5b3f16
input/smbclient: move code to lib/smbclient/Init.cxx
2014-01-25 23:29:42 +01:00
Max Kellermann
9b1fbdbca6
ConfigGlobal: add config_find_block()
...
Merge duplicate code.
2014-01-24 16:55:17 +01:00
Max Kellermann
97391fd4b9
DespotifyUtils, Expat: move to lib/
2014-01-24 16:44:36 +01:00
Max Kellermann
68eda78704
Mixer*: move to mixer/
2014-01-24 16:44:32 +01:00
Max Kellermann
7c52a1c04b
Filter*: move to filter/
2014-01-24 16:43:57 +01:00
Max Kellermann
9d34fc394c
Database*: move to db/
2014-01-24 16:38:44 +01:00
Max Kellermann
973c9872f9
Sticker*: move to sticker/
2014-01-24 16:38:15 +01:00
Max Kellermann
eef7ba48dd
Win32Main: move to win32/
2014-01-24 16:37:32 +01:00
Max Kellermann
299ff2b23f
move daemonization code to unix/
2014-01-24 16:37:21 +01:00
Max Kellermann
f8bfea8bae
Input*: move to input/
2014-01-24 16:33:33 +01:00
Max Kellermann
e199c33c6e
Client*: move to client/
2014-01-24 00:26:53 +01:00
Max Kellermann
08296cd66d
Update*: move to update/
2014-01-24 00:24:43 +01:00
Max Kellermann
197b503f3e
Config*: move to config/
2014-01-24 00:20:01 +01:00
Max Kellermann
129eb178eb
Queue*: move to queue/
2014-01-24 00:17:50 +01:00
Max Kellermann
6b70f5e490
Zeroconf*: move to zeroconf/
2014-01-24 00:14:54 +01:00
Max Kellermann
4aa6d39fd8
archive/*: move to archive/plugins/
2014-01-24 00:09:37 +01:00
Max Kellermann
51adaf2c47
decoder/*: move to decoder/plugins/
2014-01-24 00:02:24 +01:00
Max Kellermann
ea5b901bcc
output/*: move to output/plugins/
2014-01-23 23:49:50 +01:00
Max Kellermann
f1f19841bd
playlist/*: move to playlist/plugins/
2014-01-23 23:30:12 +01:00
Max Kellermann
655ad34414
Encoder*: move to src/encoder
...
.. and move the plugins to src/encoder/plugins/.
2014-01-23 23:09:14 +01:00
Max Kellermann
b8e382b011
db/upnp/Discovery: use std::list instead of std::map
...
There will only be very few items, and that does not justify the bloat
of std::map.
2014-01-23 22:35:22 +01:00
Max Kellermann
c9af358e4b
db/upnp/Discovery: move code to LockAdd(), LockRemove()
2014-01-23 22:35:22 +01:00
Max Kellermann
3afcfe3330
db/upnp/Discovery: un-inline the destructor
2014-01-23 22:35:22 +01:00
Max Kellermann
53a13e8bc6
DetachedSong: un-inline the destructor
...
Reduce bloat.
2014-01-23 21:22:52 +01:00