| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
Merged duplicate code from queueNextSongInPlaylist().
|
|
|
|
|
| |
Attempt to untie the playlist.c knot: moved the playlist storage code
to queue.c, struct queue.
|
|
|
|
| |
Check for current>=0, not queued>=0.
|
|
|
|
|
|
| |
The function moveSongInPlaylist() attempted to read the position of
the current song, even if it was -1. Check that first. The same bug
was in shufflePlaylist().
|
|
|
|
|
|
| |
It is possible that playlist.current is reset before the TAG event
handler playlist_tag_event() is called. Convert the assertion into a
run-time check.
|
|
|
|
|
|
| |
Don't attempt to restart the player if it was stopped, but there were
still songs left on the playlist. This looks like it has been a
workaround for a bug which has been fixed long time ago.
|
|
|
|
| |
Don't assign the result of getPlayerError() to an integer.
|
|
|
|
|
| |
Use g_free() consistently with g_malloc(). Don't clear the pointers
after freeing them.
|
|
|
|
|
| |
Simplify some code by using config_get_positive(), instead of doing
manual parsing and validation each time.
|
|
|
|
|
|
| |
The "TAG" event is emitted by the player thread when the current
song's tag has changed. Split this event from "PLAYLIST" and make it
a separate callback, which is more efficient.
|
| |
|
| |
|
|
|
|
| |
Renamed functions, types, variables.
|
|
|
|
|
|
| |
getBoolConfigParam() returns an int. It is not possible to check for
CONF_BOOL_UNSET after it has been assigned to a bool; use a temporary
int value for that.
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
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]]
|
| |
|
|
|
|
|
|
| |
Don't call command_error() if loading a song from the playlist fails.
This may result in assertion failures, since command_error() may be
called more than once.
|
| |
|
|
|
|
|
|
| |
For internal checks (i.e. not in command.c), we need to check whether
an URI is in the databse, in the local file system or a remote URI
with a scheme.
|
|
|
|
|
| |
If the state file cannot be read, for whatever reason, don't abort
MPD. The state file isn't _that_ important.
|
|
|
|
| |
It's been superseded by GLib's GSList.
|
| |
|
|
|
|
|
| |
To find out whether a file exists, use g_file_test() instead of
stat(), because it is more portable and easier to use.
|
|
|
|
| |
Don't pass a static buffer to map_spl_utf8_to_fs().
|
|
|
|
|
|
| |
There are no unix sockets on WIN32, and therefore no authentication.
WIN32 might have similar capabilities, but until we implement them,
disable that MPD feature.
|
|
|
|
| |
srandom() and random() are not portable. Use GLib's implementation.
|
|
|
|
|
| |
Only include headers which are really needed. os_compat.h aimed to
make MPD easily portable, but was never actually made portable.
|
|
|
|
| |
Replaced myFgets() with fgets() + g_strchomp().
|
|
|
|
|
| |
When a (remote) song is deleted from the playlist, there may still be
a reference to it in pc.errored_song. Clear this reference.
|
|
|
|
|
| |
The function didn't do anything useful, it was just several lines
obfuscating that it was only forwarding isRemoteUrl()'s return value.
|
|
|
|
|
| |
This patch extends commit 35a16b99, and amends several 2 missing
checks. It simplifies 2 more checks by merging "if" conditions.
|
|
|
|
|
| |
When the tag of the current song changes (e.g. a new tag was sent in
the stream), update the playlist, so clients pick up the new tag.
|
|
|
|
|
| |
Added the function map_spl_utf8_to_fs() which replaces
utf8_to_fs_playlist_path().
|
|
|
|
| |
Remove duplicated code from MPD.
|
|
|
|
| |
The function deletePlaylist() shouldn't be in playlist.c.
|
|
|
|
|
| |
Don't use our deprecated linked list library, use GLib's GPtrArray
instead.
|
|
|
|
|
|
| |
There are some integers which have a "magic" -1 value which means
"undefined" or "nothing". All others can be converted to unsigned,
since they must not contain a negative number.
|
|
|
|
|
|
| |
The two functions clearStoredPlaylist() and addToStoredPlaylist()
don't belong into playlist.c. clearStoredPlaylist() was a wrapper for
spl_clear(), and is converted into a CPP macro for now.
|
|
|
|
| |
Renamed all public functions, prefix is "spl_".
|
|
|
|
| |
No CamelCase in file names.
|
|
|
|
|
| |
Allow a local user to not only add his own files, but also all
world-readable files (mode 0444).
|
|
|
|
|
| |
Clients which have authenticated via unix socket may add local files
to the MPD playlist, provided that they own the file.
|
|
|
|
|
| |
Replace some complicated checks from addToPlaylist() to the simpler
function song_by_url().
|
|
|
|
|
|
|
| |
Some functions assume that a song is not in the database when it is a
remote song. Based on that, they decide whether they are responsible
for freeing the song struct. Add a special function which checks
whether a song is in the database (currently equal to song_is_file()).
|
|
|
|
|
|
| |
string_toupper() and strDupToUpper() were not able to deal with
character sets other than US-ASCII. Use GLib's g_utf8_casefold()
for strings.
|
|
|
|
|
|
| |
"idle" waits until something noteworthy happens on the server,
e.g. song change, playlist modified, database updated. This allows
clients to keep up to date without polling.
|