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().
This commit is contained in:
Max Kellermann 2008-10-09 19:11:54 +02:00
parent 0677116da0
commit 7dd099a60f
4 changed files with 25 additions and 14 deletions

View File

@ -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);
}

View File

@ -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();

View File

@ -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);

View File

@ -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