From eec6d0995982a59960dfb38cddad8bf4567e6b3c Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Tue, 4 Feb 2014 18:51:01 +0100
Subject: [PATCH] db/update/Service: use DatabaseListener instead of Instance

Don't use the global variable "instance".
---
 src/Main.cxx                 |  2 +-
 src/db/update/Service.hxx    |  6 +++++-
 src/db/update/UpdateGlue.cxx | 10 ++++++----
 3 files changed, 12 insertions(+), 6 deletions(-)

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)
 {