update: always look up parent directory in updatePath()
By always creating the parent directory, we can use delete_name_in() without further lookups. The parents which may non exist will be pruned later. An update request for a non-existing or empty directory should be quite unusual, so this doesn't add any measurable overhead.
This commit is contained in:
parent
a52343732b
commit
94a5a5a985
30
src/update.c
30
src/update.c
|
@ -161,23 +161,6 @@ delete_song_if_removed(struct song *song, void *_data)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
delete_path(const char *path)
|
|
||||||
{
|
|
||||||
struct directory *directory = db_get_directory(path);
|
|
||||||
struct song *song = db_get_song(path);
|
|
||||||
|
|
||||||
if (directory != NULL) {
|
|
||||||
delete_directory(directory);
|
|
||||||
modified = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (song != NULL) {
|
|
||||||
delete_song(song->parent, song);
|
|
||||||
modified = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
removeDeletedFromDirectory(char *path_max_tmp, struct directory *directory)
|
removeDeletedFromDirectory(char *path_max_tmp, struct directory *directory)
|
||||||
{
|
{
|
||||||
|
@ -405,13 +388,20 @@ addParentPathToDB(const char *utf8path)
|
||||||
static void
|
static void
|
||||||
updatePath(const char *path)
|
updatePath(const char *path)
|
||||||
{
|
{
|
||||||
|
struct directory *parent;
|
||||||
|
const char *name;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
|
parent = addParentPathToDB(path);
|
||||||
|
if (parent == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
name = mpd_basename(path);
|
||||||
|
|
||||||
if (myStat(path, &st) == 0)
|
if (myStat(path, &st) == 0)
|
||||||
updateInDirectory(addParentPathToDB(path),
|
updateInDirectory(parent, name, &st);
|
||||||
mpd_basename(path), &st);
|
|
||||||
else
|
else
|
||||||
delete_path(path);
|
delete_name_in(parent, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void * update_task(void *_path)
|
static void * update_task(void *_path)
|
||||||
|
|
Loading…
Reference in New Issue