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

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

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

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

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

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