diff --git a/NEWS b/NEWS
index a8828d345..168c3dc48 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,7 @@
ver 0.16 (20??/??/??)
* protocol:
- send song modification time to client
+ - added "update" idle event
* decoders:
- ffmpeg: support multiple tags
* mixers:
diff --git a/doc/protocol.xml b/doc/protocol.xml
index 7ef1dc379..6b2ff587f 100644
--- a/doc/protocol.xml
+++ b/doc/protocol.xml
@@ -134,7 +134,16 @@
database: the song database
- has been updated
+ has been modified
+
+
+
+
+ update: a database update
+ has started or finished. If the database was
+ modified during the update, the
+ database event is also
+ emitted.
diff --git a/src/idle.c b/src/idle.c
index 11b57376d..c0bb7a908 100644
--- a/src/idle.c
+++ b/src/idle.c
@@ -40,6 +40,7 @@ static const char *const idle_names[] = {
"output",
"options",
"sticker",
+ "update",
NULL
};
diff --git a/src/idle.h b/src/idle.h
index a69acabb0..c8ed57f74 100644
--- a/src/idle.h
+++ b/src/idle.h
@@ -50,6 +50,9 @@ enum {
/** a sticker has been modified. */
IDLE_STICKER = 0x80,
+
+ /** a database update has started or finished. */
+ IDLE_UPDATE = 0x100,
};
/**
diff --git a/src/update.c b/src/update.c
index 1088f5338..d3e3b7650 100644
--- a/src/update.c
+++ b/src/update.c
@@ -822,6 +822,9 @@ directory_update_init(char *path)
return next_task_id > update_task_id_max ? 1 : next_task_id;
}
spawn_update_task(path);
+
+ idle_add(IDLE_UPDATE);
+
return update_task_id;
}
@@ -861,6 +864,8 @@ static void update_finished_event(void)
g_thread_join(update_thr);
+ idle_add(IDLE_UPDATE);
+
if (modified) {
/* send "idle" events */
playlistVersionChange(&g_playlist);