| Commit message (Collapse) | Author | Files | Lines |
|
This patch allows mpd to recognise the albumartist tag in the way foobar2000
and others write it to files.
|
|
Sorting songs by file name does not make much sense. Most of the
time, users want to add songs in track order to the playlist.
|
|
|
|
Path names in the directory and song structs are always encoded in
UTF-8. Don't use strcmp(), it cannot handle UTF-8 characters
properly. Use GLib's UTF-8 aware g_utf8_collate() function for that.
|
|
I was having problems with shoutcast stream outputs before applying
the attached patch, which enlarges the shoutcast output
buffer. Ideally, this should be configurable, but this resolves the
issue for my needs.
|
|
Don't depend on the daemon's locale settings. Comment names are
ASCII.
|
|
vorbis_parse_comment() should be a function which converts one comment
to a tag item. It should do everything required to do the conversion,
including looping over all possible tag types.
|
|
|
|
Eliminate some duplicate code.
|
|
Always allocate a new tag object before parsing the vorbis comments;
free it when it turns out to be empty. This simplifies the code a
bit.
|
|
Renamed functions and variables.
|
|
Make ogg_parseCommentAddToTag() return bool instead of unsigned int.
|
|
Read the id3 tags "TPE2" and "TSO2" into the "album artist" tag.
|
|
mpd uses some additional files to work, such as pid_file, state_file,
db_file, etc. when running mpd as non-root user, it is often that those
files end in ~/.mpd
in that case, we end up with 2 entries in a user's home, .mpdconf and
.mpd - which clutters homedirs.
this patch allows ~/.mpd/mpd.conf as an alternative to ~/.mpdconf,
allowing for a cleaner homedir
|
|
If a tag value is an empty string, the space after the colon was
removed by g_strchomp(). Fix this by removing the space check and
using g_strchug() on the return value.
|
|
The matchesAnMpdTagItemKey() API becomes more powerful and flexible if
the return value is the value pointer instead of a boolean. It also
removes (invalid and dangerous) assumptions about the string from its
caller.
|
|
|
|
When a song file is deleted during database update, all pointers to it
must be removed from the playlist. The "for" loop in
deleteASongFromPlaylist() did not deal with multiple copies of the
deleted song properly, and left instances of the (to-be-invalidated)
pointer in. Fix this by reversing the loop.
|
|
Added TAG_ITEM_ALBUM_ARTIST.
With this patch, MPD should be able to read the (inofficial)
"ALBUMARTIST" Vorbis comment. Implementations in other decoder
plugins will follow soon.
|
|
matchesAnMpdTagItemKey() broke when two tag items had the same prefix,
because it did not check if the tag name ended after the prefix. Add
a check for the colon and the space after the tag name.
|
|
If http_proxy_{host, port, user, password} are provided in mpd.conf
they are not passed on to libcurl. As a result mpd cannot stream from
behind an http proxy.
The attached patch `http_proxy.patch` makes the relevant calls to
curl_easy_setopt(...) for all proxy configuration parameters, but is
only tested for host and port.
|
|
There is only one valid error condition for setsid(): when the current
process is already the process group leader. This is non-critical.
|
|
To detach from the parent process, fork once and make the old process
exit. No need to do that twice.
|
|
MPD's shuffling algorithm was not implemented well: it considers songs
which were already swapped, making it somewhat non-random.
Fix the Fisher-Yates shuffle algorithm by passing the proper bounds to
the PRNG.
|
|
When decoder_run_song() (decoder_thread.c) waits for the input stream
to become ready, it did that in a busy loop. Add a select() call to
input_curl_buffer() during connect/handshake (i.e. before the first
chunk of body data was received), to let the CPU relax.
|
|
When the decoder thread is waiting for free chunks in the music pipe,
don't ignore the STOP command. Just return dc.command without further
checks.
|
|
MPD will (optionall) use sqlite databases in the future. Add a
configure option to enable that. There is no code yet to really use
sqlite, so the practical use of this patch is limited.
|
|
|
|
mixer (passing parameters)
|
|
If a range is "-1", display the whole list. This behavior is
undocumented, but some clients rely on it.
|
|
|
|
|
|
Free memory before exiting.
|
|
Free memory before exiting.
|
|
Make the listen socket an object, allowing us to add more fields
later. Convert listenSockets into a simple linked list.
|
|
|
|
This patch tryes to introduce pluggable mixer (struct mixer_plugin) along with some basic infrastructure (mixer_* functions). Instance of mixer (struct mixer) is used in
alsa and oss output plugin
|
|
A song index cannot be negative. Also require the second parameter to
be valid.
|
|
In a range "start:end", "end" itself should not be included. Use the
same semantics as other languages implementing ranges, e.g. Python.
|
|
Loosely based on a patch provided by lesion in bug #1766. The playlistinfo
command can now retrieve ranges of the playlist. The new argument indicates
which entry is the last one that will be displayed. The number of displayed
entries may be smaller than expected if the end of the playlist is reached.
Previous usage:
playlistinfo [start]
New usage:
playlistinfo [start[:end]]
|
|
A range argument looks like start[:end] and is used to specify the entries
of a list that should be returned (rather than the whole list).
|
|
|
|
|
|
|
|
|
|
Don't use fixed static buffers. GLib allocates a new string for us
anyway, let's just return this one instead of copying it.
|
|
The archive code was disabled, because config.h was not included and
thus ENABLE_ARCHIVE was not defined.
|
|
|
|
Save an empty database, even if the music directory is empty.
|
|
Use the PCM buffer library for the libsamplerate output buffer.
|