| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
The mapper library maps directory and song objects to file system
paths. With this central library, the code mixture in path.c should
be cleaned up, and we will be able to add neat features like aliasing.
|
|
|
|
|
| |
playlist_print_song() and playlist_print_uri() handle charset
conversion and (optional) music directory prefixing.
|
|
|
|
|
|
| |
The only caller of deletePlaylist() appends PLAYLIST_FILE_SUFFIX, so
we can be sure it's already there. We don't need to stat the file,
since unlink() does all the checking.
|
|
|
|
|
|
| |
QUEUE adds a new song to the player's queue. CANCEL clears the queue.
These two commands replace the old and complex queueState and
queueLockState code.
|
|
|
|
|
|
| |
Simplify and merge several if clauses before the clearPlayerQueue()
invocation. Call clearPlayerQueue() only if a song is actually
queued; add an assertion for that in clearPlayerQueue().
|
|
|
|
| |
Search'n'replace typo..
|
|
|
|
| |
Yet another CamelCase removal patch.
|
|
|
|
|
|
| |
Taming the directory.c monster, part II: move the database management
stuff to database. directory.c should only contain code which works
on directory objects.
|
|
|
|
| |
CamelCase is ugly... rename all functions.
|
|
|
|
|
|
| |
Provide separate constructors for creating a remote song, a local
song, and one for loading data from a song file. This way, we can add
more assertions.
|
|
|
|
|
| |
Check the old status before assigning. This saves a temporary
variable.
|
|
|
|
| |
"bool" should be used in C99 programs for boolean values.
|
|
|
|
| |
Again, a data type which can be forward-declared.
|
|
|
|
|
|
| |
This make argument order more consistent for iterators.
Additionally, these now return ssize_t results for error
checking.
|
|
|
|
|
|
|
| |
We already know if a song is a URL or not based on whether it
has parentDir defined or not. Hopefully one day in the future
we can drop HTTP support from MPD entirely when an HTTP
filesystem comes along and we can access streams via open(2).
|
|
|
|
|
| |
Do full C99 integer type conversion in all modules which were not
touched by Eric's merged patch.
|
|
|
|
| |
We don't change the song pointer there, either.
|
|
|
|
|
| |
LOC reduction and less noise makes things easier for
tired old folks to follow.
|
|
|
|
|
|
|
| |
Since all callers of song_id_exists() will map it to a song position
after the check, introduce a new function called song_id_to_position()
which performs both the check and the map lookup, including nice
assertions.
|
|
|
|
| |
Pass the client struct instead of the raw file descriptor.
|
|
|
|
|
|
| |
The shared code in showPlaylist() isn't worth it, because we aim to
remove fdprintf(). Duplicate this small function, and enable stdio
buffering for saved playlists.
|
|
|
|
|
|
|
| |
The function loadPlaylist() wants to report incremental errors to the
client, for this reason we cannot remove its protocol dependency right
now. Instead, make it use the client struct instead of the raw file
descriptor.
|
|
|
|
|
|
| |
Don't pass the raw file descriptor around. This migration patch is
rather large, because all of the sources have inter dependencies - we
have to change all of them at the same time.
|
|
|
|
|
|
| |
Continuing the effort of removing protocol specific calls from the
core libraries: let the command.c code call commandError() based on
PlaylistInfo's return value.
|
|
|
|
|
| |
Return an "enum playlist_result" value instead of calling
commandError() in storedPlaylist.c.
|
|
|
|
|
|
| |
The playlist library shouldn't talk to the client if possible.
Introduce the "enum playlist_result" type which the caller
(i.e. command.c) may use to generate an error message.
|
|
|
|
| |
Make them both return void.
|
|
|
|
|
|
|
|
| |
Client's input values should be validated by the command
implementation, and the core libraries shouldn't talk to the client
directly if possible. Thus, setPlaylistRepeatStatus() and
setPlaylistRandomStatus() don't get the file descriptor, and cannot
fail (return void).
|
|
|
|
|
|
|
|
| |
The function valid_playlist_name() checks the name, but it insists on
reporting an eventual error to the client. The new function
is_valid_playlist_name() is more generic: it just returns a boolean,
and does not care what the caller will use it for. The old function
valid_playlist_name() will be removed later.
|
|
|
|
|
|
|
| |
Move everything which dumps song information (via tag_print.c) to a
separate source file. song_print.c gets code which writes song data
to the client; song_save.c is responsible for serializing songs from
the tag cache.
|
|
|
|
| |
The usual bunch of const pointer conversions.
|
| |
|
|
|
|
|
| |
Give player.c a better name, meaning that the code is used to control
the player thread.
|
|
|
|
|
|
| |
We should avoid having protocol specific code in player.c. Just
return success or failure, and let the caller send the error code to
the MPD client.
|
| |
|
|
|
|
|
| |
There is only one caller which passes "true", so we can move the
queueNextSongInPlaylist() invocation there.
|
|
|
|
|
|
| |
There is no unlocked caller of clearPlayerQueue(), and the functions
lockPlaylistInteraction() and unlockPlaylistInteraction() are trivial
- merge them.
|
| |
|
|
|
|
|
|
|
| |
Since playerPlay() already calls playerStop(), we can remove its
invocation of playerStop() from playPlaylistOrderNumber().
We can also make playerStop a static function.
|
|
|
|
|
|
|
| |
All (indirect) callers of queueSong() ensure that the queue state is
BLANK, so there is no need to check it in queueSong() again. As a
side effect, queueSong() cannot fail anymore, and can return void.
Also, playlist_queueError and all its error handling can go away.
|