Commit Graph

272 Commits

Author SHA1 Message Date
Max Kellermann
19397a84cc playlist: added G_LOG_DOMAIN
Removed the explicit "playlist:" prefix from all log messages.
2009-02-04 22:15:31 +01:00
Max Kellermann
cbea8a2a00 playlist: pass const playlist pointers
Pass constant playlist objects to functions which do not modify it.
2009-02-04 22:08:39 +01:00
Max Kellermann
15f914a74a playlist: moved code to playlist_edit.c
Moved functions for playlist editing (append, delete, shuffle, move)
to playlist_edit.c.
2009-02-04 20:31:53 +01:00
Max Kellermann
f3d6d536f6 playlist: moved code to playlist_control.c
Moved handlers for control commands (play, stop, next, prev) to
playlist_control.c.
2009-02-04 20:31:22 +01:00
Max Kellermann
4db51eeccd playlist: call syncPlaylistWithQueue() only in the event handler
Don't call syncPlaylistWithQueue() in nextSongInPlaylist() and
previousSongInPlaylist().  This is a relic from the time when there
was no event, and was a workaround to the timing problem.
2009-02-04 19:44:32 +01:00
Max Kellermann
8d3205871c playlist: renamed global "playlist" variable to "g_playlist"
Export the "g_playlist" variable, and pass it to all playlist
functions.  This way, we can split playlist.c easier into separate
parts.  The code which initializes the singleton variable is moved to
playlist_global.c.
2009-02-04 18:56:41 +01:00
Max Kellermann
1720c7090d playlist: moved code to playlist_state.c
Moved everything related to saving or loading the playlist from/to the
state file to playlist_state.c.
2009-02-04 18:52:39 +01:00
Max Kellermann
e27a665b89 playlist: simplified playlist.queued updates
Before every operation which modifies the playlist, remember a pointer
to the song struct.  After the modification, determine the "next song"
again, and if it differs, dequeue and queue the new song.

This removes a lot of complexity from the playlist update code, and
makes it more robust.
2009-02-04 18:52:37 +01:00
Max Kellermann
6aa734dc35 playlist: clear playlist.playing when deleting current song
This fixes an assertion failure: when the last song in the playlist
was playing, and you deleted it, MPD aborted.
2009-01-30 19:54:19 +01:00
Max Kellermann
bdfb6c239a playlist: moved is_valid_playlist_name() to stored_playlist.c 2009-01-25 14:19:28 +01:00
Max Kellermann
98cb8f3969 playlist: moved savePlaylist() and loadPlaylsit() to playlist_save.c 2009-01-25 14:11:47 +01:00
Max Kellermann
69c74afa25 playlist: removed g_rand, PLAYLIST_HASH_MULT
Both are unused.
2009-01-25 14:01:27 +01:00
Max Kellermann
688880bc0b queue: added queue_shuffle_order_last()
This function shuffles the last song of a range.  This is used by
addSongToPlaylist().
2009-01-25 14:00:51 +01:00
Max Kellermann
1a59afa388 stored_playlist: moved configuration variables from playlist.c
Don't declare and export variables specific to stored playlists in
playlist.c/playlist.h.
2009-01-25 13:53:16 +01:00
Max Kellermann
cf9595df18 playlist: removed locate functions to queue_print.c
Now playlist.c does not contain any protocol specific code anymore.
2009-01-24 14:55:28 +01:00
Max Kellermann
53e712aca4 locate: renamed LocateTagItem to "struct locate_item"
No CamelCase and no typedefs.
2009-01-24 14:52:05 +01:00
Max Kellermann
627d590ce5 command: use queue_print_*()
Replaced several wrapper functions from playlist.c, and make command.c
use the queue print functions directly.
2009-01-24 14:52:04 +01:00
Max Kellermann
d449d6abab playlist: added playlist_get_queue()
To allow code outside playlist.c to access the "queue" object,
provide a function which returns a const pointer.
2009-01-24 14:51:35 +01:00
Max Kellermann
6cfe032b94 playlist: renamed the Playlist typedef to "struct playlist"
No typedefs.
2009-01-24 13:34:53 +01:00
Max Kellermann
ae2d13ac3e playlist: moved stopOnError and errorCount into struct playlist
Moved the 2 remaining global variables into the playlist struct.
2009-01-24 13:20:07 +01:00
Max Kellermann
0e5af7d0f6 playlist: restore random mode after playlist is loaded
When the playlist was loaded from the state file, the order numbers
were the same as the positions.  In random mode, we need to shuffle
the queue order.  To accomplish that, call setPlaylistRandomStatus()
at the end of readPlaylistState(), and do a fresh shuffle.
2009-01-23 18:41:12 +01:00
Max Kellermann
62159e8875 playlist: removed song_id_to_position()
song_id_to_position() is only a wrapper for queue_id_to_position().
2009-01-23 18:16:21 +01:00
Max Kellermann
a6ad0cdecc playlist: fix "clear" crash in random mode
When MPD is not playing while in random mode, and the client issues
the "clear" command, MPD crashes in stopPlaylist(), or more exactly,
in queue_order_to_position(-1).  Exit from stopPlaylist() if MPD isn't
playing.
2009-01-23 18:15:25 +01:00
Max Kellermann
349d249867 playlist: moved saving/loading code to queue_save.c
Create a new library which saves/loads the queue to/from the state
file.
2009-01-23 16:35:04 +01:00
Max Kellermann
8afe24c1de playlist: moved PlaylistInfo() to playlist_print.c
PlaylistInfo() (notice the capital 'P') sends a stored playlist to the
client.  Move it to a separate library, where all the code which glues
the playlist and the MPD protocol together will live.
2009-01-23 16:34:27 +01:00
Max Kellermann
ed25bdf55a playlist: moved some printing code to queue_print.c
Moved protocol printing functions which operate on the queue to
queue_print.c.
2009-01-23 16:23:59 +01:00
Max Kellermann
4c77a4c494 playlist: pass const pointers to search functions
The LocateTagItem objects are not modified.
2009-01-23 16:22:43 +01:00
Max Kellermann
3a86a6ca16 playlist: removed swapSongs()
swapSongs() is only a wrapper for queue_swap().
2009-01-23 16:22:38 +01:00
Max Kellermann
276843edd5 playlist: don't unpause on delete
When you delete a song from the playlist which was paused, MPD forgot
that it was paused and started playing the next song.
2009-01-23 16:17:21 +01:00
Max Kellermann
cf3a9ef065 playlist: added source comments
The playlist.c source is currently quite hard to understand.  I have
managed to wrap my head around it, and this patch attempts to explain
it to the next guy.
2009-01-23 11:33:24 +01:00
Max Kellermann
b5abc02379 playlist: assert in playPlaylistIfPlayerStopped()
The function playPlaylistIfPlayerStopped() is only called when the
player thread is stopped.  Converted that runtime check into an
assertion, and remove one indent level.
2009-01-23 11:33:03 +01:00
Max Kellermann
cfbafbefdc playlist: don't shuffle if not in random mode
One of the previous patches removed the "random" mode check from
nextSongInPlaylist(), which caused a shuffle whenever MPD wrapped to
the first song in "repeat" mode.  Re-add that "random" check.
2009-01-23 11:32:36 +01:00
Max Kellermann
5d31e7e7d2 playlist: removed unreachable "playing" check
In playPlaylist(), the second "song==-1 && playing" check can never be
reached, because at this point, the function has already returned
(after unpausing).
2009-01-23 11:32:07 +01:00
Max Kellermann
e5c323fd57 playlist: removed stopOnError flag from playPlaylist()
All callers pass false.  Don't bother to collect that parameter.
2009-01-23 00:10:50 +01:00
Max Kellermann
9da7ae02f0 playlist: restart playing in deleteFromPlaylist()
When a song is deleted, start playing the next song immediately,
within deleteFromPlaylist().  This allows us to remove the ugly
playlist_noGoToNext flag, and the currentSongInPlaylist() function.
2009-01-23 00:10:38 +01:00
Max Kellermann
0d4319ed30 playlist: calculate next song before deleting the current one
By calling queue_next_order() before playlist.current is invalidated
(by the deletion of a song), we get more robust results, and the code
becomes a little bit easier.  incrPlaylistCurrent() is unused now, and
can be removed.
2009-01-23 00:10:33 +01:00
Max Kellermann
bd71d3ea78 playlist: return early from shufflePlaylist()
Remove one indent level by returning diretly after the check.  This
makes the function more readable.
2009-01-23 00:09:29 +01:00
Max Kellermann
00541f8ce9 playlist: replaced playlist_state with flag playlist.playing
There were only two possible states: STOP and PLAY.  The code looks a
lot easier if we use a bool instead.  Move the variable into the
playlist struct.
2009-01-23 00:09:26 +01:00
Max Kellermann
3a1de741bb queue: added queue_shuffle_order()
The function shuffles the virtual order of songs, but does not move
them physically.  This is used in random mode.

The new function replaces playlist.c's randomizeOrder() function,
which was aware of playlist.current and playlist.queued.  The latter
is always -1 anyway, and the former as preserved by the caller, by
converting playlist.current to a position, and then back to an order
number.
2009-01-23 00:08:40 +01:00
Max Kellermann
fb2ef107d1 playlist: check if repeat mode changes
Add a "changed" check to setPlaylistRepeatStatus(): when the new
repeat mode is the same as the old one, don't do anything at all.  No
more checks, no "idle" event.
2009-01-23 00:07:20 +01:00
Max Kellermann
9cad342056 playlist: recalculate the queued song after random is toggled
When the random mode is toggled, MPD did not clear the queue.  Because
of this, MPD continued with the next (random or non-random) song
according to the previous mode.  Clear the queued song to fix that.
2009-01-23 00:07:10 +01:00
Max Kellermann
144a91cace playlist: moved code to playlist_queue_song_order()
Merged duplicate code from queueNextSongInPlaylist().
2009-01-23 00:06:54 +01:00
Max Kellermann
f78cddb407 playlist: moved code to queue.c
Attempt to untie the playlist.c knot: moved the playlist storage code
to queue.c, struct queue.
2009-01-22 23:40:11 +01:00
Max Kellermann
d5dcd0ed66 playlist: corrected shuffle underflow test
Check for current>=0, not queued>=0.
2009-01-22 20:10:17 +01:00
Max Kellermann
1f8a1cbc08 playlist: fix buffer underflow when getting current song
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().
2009-01-22 16:14:34 +01:00
Max Kellermann
8484c3708b playlist: convert assertion to check in TAG event handler
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.
2009-01-21 17:11:41 +01:00
Max Kellermann
5541015ac6 command: don't restart player in the "status" command
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.
2009-01-21 16:17:57 +01:00
Max Kellermann
699b31178d playlist: use the "enum player_error" type
Don't assign the result of getPlayerError() to an integer.
2009-01-21 16:17:57 +01:00
Max Kellermann
6fd8c28d2e playlist: free memory with g_free()
Use g_free() consistently with g_malloc().  Don't clear the pointers
after freeing them.
2009-01-21 16:17:57 +01:00
Max Kellermann
2362ee4a48 use config_get_positive() instead of manual parsing
Simplify some code by using config_get_positive(), instead of doing
manual parsing and validation each time.
2009-01-21 08:48:02 +01:00