aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-10-09 19:11:54 +0200
committerMax Kellermann <max@duempel.org>2008-10-09 19:11:54 +0200
commit7dd099a60f0a966382e5369ac064f9089ce0c8c9 (patch)
tree9758b6b6f278be7374aefb0487e4aafb4340e46b /src
parent0677116da0d61097af44e5d84d763ccae450c077 (diff)
downloadmpd-7dd099a60f0a966382e5369ac064f9089ce0c8c9.tar.gz
mpd-7dd099a60f0a966382e5369ac064f9089ce0c8c9.tar.xz
mpd-7dd099a60f0a966382e5369ac064f9089ce0c8c9.zip
update: don't export updateDirectory()
If the user requests database update during startup, call directory_update_init(). This should be changed to fully asynchronous update later. For this to work, main_notify has to be initialized before db_init().
Diffstat (limited to '')
-rw-r--r--src/database.c14
-rw-r--r--src/main.c3
-rw-r--r--src/update.c11
-rw-r--r--src/update.h11
4 files changed, 25 insertions, 14 deletions
diff --git a/src/database.c b/src/database.c
index 93d0d7ef8..bd069f8b4 100644
--- a/src/database.c
+++ b/src/database.c
@@ -29,6 +29,7 @@
#include "utils.h"
#include "dbUtils.h"
#include "update.h"
+#include "main_notify.h"
#include <assert.h>
#include <string.h>
@@ -40,8 +41,19 @@ static time_t directory_dbModTime;
void
db_init(void)
{
+ int ret;
+
music_root = directory_new("", NULL);
- updateDirectory(music_root);
+
+ ret = directory_update_init(NULL);
+ if (ret < 0)
+ FATAL("directory update failed\n");
+
+ do {
+ wait_main_task();
+ reap_update_task();
+ } while (isUpdatingDB());
+
stats.numberOfSongs = countSongsIn(NULL);
stats.dbPlayTime = sumSongTimesIn(NULL);
}
diff --git a/src/main.c b/src/main.c
index f0079e438..8e6314a82 100644
--- a/src/main.c
+++ b/src/main.c
@@ -412,6 +412,8 @@ int main(int argc, char *argv[])
initPlaylist();
decoder_plugin_init_all();
+ init_main_notify();
+
openDB(&options, argv[0]);
initCommands();
@@ -429,7 +431,6 @@ int main(int argc, char *argv[])
daemonize(&options);
- init_main_notify();
setup_log_output(options.stdOutput);
initSigHandlers();
diff --git a/src/update.c b/src/update.c
index 3e9d98453..2c84d2521 100644
--- a/src/update.c
+++ b/src/update.c
@@ -30,6 +30,12 @@
#include "condition.h"
#include "update.h"
+enum update_return {
+ UPDATE_RETURN_ERROR = -1,
+ UPDATE_RETURN_NOUPDATE = 0,
+ UPDATE_RETURN_UPDATED = 1
+};
+
enum update_progress {
UPDATE_PROGRESS_IDLE = 0,
UPDATE_PROGRESS_RUNNING = 1,
@@ -204,6 +210,9 @@ inodeFoundInParent(struct directory *parent, ino_t inode, dev_t device)
}
static enum update_return
+updateDirectory(struct directory *directory);
+
+static enum update_return
addSubDirectoryToDirectory(struct directory *directory,
const char *name, const struct stat *st)
{
@@ -280,7 +289,7 @@ static int skip_path(const char *path)
return (path[0] == '.' || strchr(path, '\n')) ? 1 : 0;
}
-enum update_return
+static enum update_return
updateDirectory(struct directory *directory)
{
bool was_empty = directory_is_empty(directory);
diff --git a/src/update.h b/src/update.h
index 5edf62a57..0c0d74416 100644
--- a/src/update.h
+++ b/src/update.h
@@ -20,19 +20,8 @@
#ifndef UPDATE_H
#define UPDATE_H
-struct directory;
-
-enum update_return {
- UPDATE_RETURN_ERROR = -1,
- UPDATE_RETURN_NOUPDATE = 0,
- UPDATE_RETURN_UPDATED = 1
-};
-
int isUpdatingDB(void);
-enum update_return
-updateDirectory(struct directory *directory);
-
/*
* returns the non-negative update job ID on success,
* returns -1 if busy