| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
The return value of map_directory_child_fs() must be freed.
|
|
|
|
|
| |
Removed the NULL check. If that NULL check was correct, that would
have been a memory leak (vtrack).
|
|
|
|
|
|
|
| |
MPD checks if every flac (possibly other types as well) file contains
cuesheet on every update, which produces unneeded I/O. My music
collection is on NFS share, so it's quite noticeable. IMHO, it
shouldn't re-read unchanged files, so I wrote simple patch to fix it.
|
|
|
|
| |
The return value of map_directory_child_fs() must be freed.
|
|
|
|
|
| |
When you pass an empty string to directory_update_init(), it was not
freed by update_task().
|
|
|
|
| |
Check for NULL not necessary here
|
|
|
|
|
|
|
|
| |
This updates the copyright header to all be the same, which is
pretty much an update of where to mail request for a copy of the GPL
and the years of the MPD project. This also puts all committers under
'The Music Player Project' umbrella. These entries should go
individually in the AUTHORS file, for consistancy.
|
|
|
|
|
|
|
| |
After adding the container_scan() method the update_regular_file() method was quite hard to read.
Now there's update_container_file() which deals with container files.
That way normal container files (i.e. without embedded tracks) are handled by the old code like a regular file.
This will fix some of the odd behaviour observed.
|
|
|
|
|
|
|
| |
Until now every flac file got removed unconditionally (and then re-added)
whenever the update command was issued. Now there is a check if we need
to that, so the file will only be removed if there is a embedded cuesheet
in that file
|
|
|
|
|
|
|
|
|
| |
So far only seekpoints are supported, so no proper tagging yet
except for track number and track length.
Tagging should be done by parsing the cue sheet which
is often embedded as vorbis comment in flac files.
Furthermore the pathname should be configurable like "%A - %t - %T",
where %A means Artist, %t track number and %T Title or so.
|
|
|
|
|
| |
[mk: fixed whitespace errors; use delete_song() instead of
songvec_delete()]
|
|
|
|
|
|
|
|
|
| |
When checking whether database entries have been deleted, don't check
if an archive file is a directory (G_FILE_TEST_IS_DIR), use
G_FILE_TEST_IS_REGULAR for this case instead. To determine if a
"struct directory" is an archive, check for device==DEVICE_INARCHIVE.
This is always false after loading the database, so this patch is not
complete yet.
|
|
|
|
|
| |
When the mtime of an archive time hasn't changed, don't update it
again.
|
|
|
|
|
|
| |
Remember the modification time of each directory. This is important
for archives (which are virtual directories right now), but may also
be useful for an automatic update mechanism.
|
|
|
|
| |
Simplify the rather large function update_regular_file().
|
|
|
|
|
|
|
| |
MPD used to be silent when it could stat() a directory, but could not
opendir() it to read its contents. This caused a lot of support
headache with users who have wrong file permissions. Add another
warning message.
|
|
|
|
|
| |
"ls" is a bad name for a library which parses URIs. We'll move the
rest of the "ls" library later.
|
|
|
|
|
|
| |
Use delete_directory() for removing sub directories instead of
dirvec_clear(). This ensures that all memory occupied by
subdirectories of deleted directories is freed.
|
|
|
|
|
|
|
| |
When a directory is deleted, MPD deleted only the directory from the
database; it did not bother to walk the full tree to free all memory
and to remove deleted songs from the playlist. Replace a
dirvec_delete() with delete_directory().
|
|
|
|
|
| |
If stickers are not configured at runtime, don't call
sticker_song_delete().
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
On some platforms, g_free() must be used for memory allocated by
GLib. This patch intends to correct a lot of occurrences, but is
probably not complete.
|
|
|
|
|
|
|
| |
When a song is deleted from the database, remove its sticker, too.
What's still missing is some sort of garbage collector after a fresh
database create (--create-db).
|
|
|
|
| |
Without a music_directory, MPD is an excellent streaming client.
|
| |
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
| |
The notify library is easier to use, and has no disadvantages.
|
| |
|
|
|
|
|
|
| |
Handle the DELETE and UPDATE events in separate callbacks:
song_delete_event() safely deletes a song, and update_finished_event()
is called when database update is complete.
|
|
|
|
|
| |
GLib mandates that you initialize all GError objects with NULL prior
to passing it.
|
|
|
|
| |
Use GLib's g_build_filename() instead of pfx_dir().
|
| |
|
|
|
|
|
| |
directory_is_root() is cheaper than
isRootDirectory(directory_get_path()).
|
| |
|
|
|
|
| |
The struct delete_data has only one member left and can be eliminated.
|
|
|
|
|
|
|
|
| |
Determine the suffix manually, and use decoder_plugin_from_suffix()
and archive_plugin_from_suffix() instead.
This way, song_file_update_inarchive() can be optimized: it does not
have to translate its path.
|
| |
|
|
|
|
|
| |
Reverse the condition: delete directories which don't exist anymore.
This typo caused a slowdown during partial database update.
|
|
|
|
|
|
| |
WIN32 does have some kind of symbolic links (e.g. in NTFS), but the
readlink() function is not available. Disable symlink checking for
now.
|
| |
|
| |
|
|
|
|
| |
Don't use fixed stack buffers.
|
|
|
|
| |
Don't use fixed stack buffers.
|
|
|
|
|
| |
If we want to check whether a file is a directory, use GLib's
g_file_test() instead of stat().
|
|
|
|
|
|
|
|
|
| |
Make the event_pipe (formerly main_notify) send/receive a set of
events, with a callback for each one.
The default event PIPE_EVENT_SIGNAL does not have a callback. It
is still there for waking up the main thread, when it is waiting for
the player thread.
|
|
|
|
| |
Continuing the previous patch.
|
|
|
|
|
|
| |
We are going to migrate away from the concept of notifying the main
thread. There should be events sent to it instead. This patch starts
a series to implement that.
|