diff --git a/src/Main.cxx b/src/Main.cxx index 8a5ed7506..fd10d2253 100644 --- a/src/Main.cxx +++ b/src/Main.cxx @@ -211,7 +211,7 @@ glue_db_init_and_load(void) return true; SimpleDatabase &db = *(SimpleDatabase *)instance->database; - instance->update = new UpdateService(*main_loop, db); + instance->update = new UpdateService(*main_loop, db, *instance); /* run database update after daemonization? */ return db.FileExists(); diff --git a/src/db/update/Service.hxx b/src/db/update/Service.hxx index 815be6dbc..a41c311b6 100644 --- a/src/db/update/Service.hxx +++ b/src/db/update/Service.hxx @@ -27,6 +27,7 @@ #include "thread/Thread.hxx" class SimpleDatabase; +class DatabaseListener; /** * This class manages the update queue and runs the update thread. @@ -40,6 +41,8 @@ class UpdateService final : DeferredMonitor { SimpleDatabase &db; + DatabaseListener &listener; + Progress progress; bool modified; @@ -57,7 +60,8 @@ class UpdateService final : DeferredMonitor { UpdateWalk walk; public: - UpdateService(EventLoop &_loop, SimpleDatabase &_db); + UpdateService(EventLoop &_loop, SimpleDatabase &_db, + DatabaseListener &_listener); /** * Returns a non-zero job id when we are currently updating diff --git a/src/db/update/UpdateGlue.cxx b/src/db/update/UpdateGlue.cxx index 40fe68afc..ea1bf6f09 100644 --- a/src/db/update/UpdateGlue.cxx +++ b/src/db/update/UpdateGlue.cxx @@ -20,11 +20,11 @@ #include "config.h" #include "Service.hxx" #include "UpdateDomain.hxx" +#include "db/DatabaseListener.hxx" #include "db/plugins/SimpleDatabasePlugin.hxx" #include "Idle.hxx" #include "util/Error.hxx" #include "Log.hxx" -#include "Main.hxx" #include "Instance.hxx" #include "system/FatalError.hxx" #include "thread/Id.hxx" @@ -139,7 +139,7 @@ UpdateService::RunDeferred() if (modified) /* send "idle" events */ - instance->DatabaseModified(); + listener.OnDatabaseModified(); auto i = queue.Pop(); if (i.IsDefined()) { @@ -150,8 +150,10 @@ UpdateService::RunDeferred() } } -UpdateService::UpdateService(EventLoop &_loop, SimpleDatabase &_db) - :DeferredMonitor(_loop), db(_db), progress(UPDATE_PROGRESS_IDLE), +UpdateService::UpdateService(EventLoop &_loop, SimpleDatabase &_db, + DatabaseListener &_listener) + :DeferredMonitor(_loop), db(_db), listener(_listener), + progress(UPDATE_PROGRESS_IDLE), update_task_id(0), walk(_loop) {