Commit 7dd099a6 authored by Max Kellermann's avatar Max Kellermann

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().
parent 0677116d
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "utils.h" #include "utils.h"
#include "dbUtils.h" #include "dbUtils.h"
#include "update.h" #include "update.h"
#include "main_notify.h"
#include <assert.h> #include <assert.h>
#include <string.h> #include <string.h>
...@@ -40,8 +41,19 @@ static time_t directory_dbModTime; ...@@ -40,8 +41,19 @@ static time_t directory_dbModTime;
void void
db_init(void) db_init(void)
{ {
int ret;
music_root = directory_new("", NULL); 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.numberOfSongs = countSongsIn(NULL);
stats.dbPlayTime = sumSongTimesIn(NULL); stats.dbPlayTime = sumSongTimesIn(NULL);
} }
......
...@@ -412,6 +412,8 @@ int main(int argc, char *argv[]) ...@@ -412,6 +412,8 @@ int main(int argc, char *argv[])
initPlaylist(); initPlaylist();
decoder_plugin_init_all(); decoder_plugin_init_all();
init_main_notify();
openDB(&options, argv[0]); openDB(&options, argv[0]);
initCommands(); initCommands();
...@@ -429,7 +431,6 @@ int main(int argc, char *argv[]) ...@@ -429,7 +431,6 @@ int main(int argc, char *argv[])
daemonize(&options); daemonize(&options);
init_main_notify();
setup_log_output(options.stdOutput); setup_log_output(options.stdOutput);
initSigHandlers(); initSigHandlers();
......
...@@ -30,6 +30,12 @@ ...@@ -30,6 +30,12 @@
#include "condition.h" #include "condition.h"
#include "update.h" #include "update.h"
enum update_return {
UPDATE_RETURN_ERROR = -1,
UPDATE_RETURN_NOUPDATE = 0,
UPDATE_RETURN_UPDATED = 1
};
enum update_progress { enum update_progress {
UPDATE_PROGRESS_IDLE = 0, UPDATE_PROGRESS_IDLE = 0,
UPDATE_PROGRESS_RUNNING = 1, UPDATE_PROGRESS_RUNNING = 1,
...@@ -204,6 +210,9 @@ inodeFoundInParent(struct directory *parent, ino_t inode, dev_t device) ...@@ -204,6 +210,9 @@ inodeFoundInParent(struct directory *parent, ino_t inode, dev_t device)
} }
static enum update_return static enum update_return
updateDirectory(struct directory *directory);
static enum update_return
addSubDirectoryToDirectory(struct directory *directory, addSubDirectoryToDirectory(struct directory *directory,
const char *name, const struct stat *st) const char *name, const struct stat *st)
{ {
...@@ -280,7 +289,7 @@ static int skip_path(const char *path) ...@@ -280,7 +289,7 @@ static int skip_path(const char *path)
return (path[0] == '.' || strchr(path, '\n')) ? 1 : 0; return (path[0] == '.' || strchr(path, '\n')) ? 1 : 0;
} }
enum update_return static enum update_return
updateDirectory(struct directory *directory) updateDirectory(struct directory *directory)
{ {
bool was_empty = directory_is_empty(directory); bool was_empty = directory_is_empty(directory);
......
...@@ -20,19 +20,8 @@ ...@@ -20,19 +20,8 @@
#ifndef UPDATE_H #ifndef UPDATE_H
#define 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); int isUpdatingDB(void);
enum update_return
updateDirectory(struct directory *directory);
/* /*
* returns the non-negative update job ID on success, * returns the non-negative update job ID on success,
* returns -1 if busy * returns -1 if busy
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment