idle: added "update" event

Some clients have visual feedback for "database update is running".
Using the "database" idle event is unreliable, because it is only
emitted when the database was actually modified.  This patch adds the
"update" event, which is emitted when the update is started, and again
when the update is finished, disregarding whether it has been
modified.
This commit is contained in:
Max Kellermann 2009-07-05 08:46:53 +02:00
parent 46c19b8249
commit d4914fc9ef
5 changed files with 20 additions and 1 deletions

1
NEWS
View File

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

View File

@ -134,7 +134,16 @@
<listitem>
<para>
<returnvalue>database</returnvalue>: the song database
has been updated
has been modified
</para>
</listitem>
<listitem>
<para>
<returnvalue>update</returnvalue>: a database update
has started or finished. If the database was
modified during the update, the
<returnvalue>database</returnvalue> event is also
emitted.
</para>
</listitem>
<listitem>

View File

@ -40,6 +40,7 @@ static const char *const idle_names[] = {
"output",
"options",
"sticker",
"update",
NULL
};

View File

@ -50,6 +50,9 @@ enum {
/** a sticker has been modified. */
IDLE_STICKER = 0x80,
/** a database update has started or finished. */
IDLE_UPDATE = 0x100,
};
/**

View File

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