From 7dd099a60f0a966382e5369ac064f9089ce0c8c9 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 9 Oct 2008 19:11:54 +0200 Subject: 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(). --- src/database.c | 14 +++++++++++++- src/main.c | 3 ++- src/update.c | 11 ++++++++++- src/update.h | 11 ----------- 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 #include @@ -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, @@ -203,6 +209,9 @@ inodeFoundInParent(struct directory *parent, ino_t inode, dev_t device) return 0; } +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 -- cgit v1.2.3