player_thread: moved code to update_song_tag()

This commit is contained in:
Max Kellermann 2009-07-23 12:26:26 +02:00
parent 54889c72e3
commit 0749dbfadf

View File

@ -414,6 +414,31 @@ static void player_process_command(struct player *player)
} }
} }
static void
update_song_tag(struct song *song, const struct tag *new_tag)
{
struct tag *old_tag;
if (song_is_file(song))
/* don't update tags of local files, only remote
streams may change tags dynamically */
return;
old_tag = song->tag;
song->tag = tag_dup(new_tag);
if (old_tag != NULL)
tag_free(old_tag);
/* the main thread will update the playlist version when he
receives this event */
event_pipe_emit(PIPE_EVENT_TAG);
/* notify all clients that the tag of the current song has
changed */
idle_add(IDLE_PLAYER);
}
/** /**
* Plays a #music_chunk object (after applying software volume). If * Plays a #music_chunk object (after applying software volume). If
* it contains a (stream) tag, copy it to the current song, so MPD's * it contains a (stream) tag, copy it to the current song, so MPD's
@ -425,25 +450,8 @@ play_chunk(struct song *song, struct music_chunk *chunk,
{ {
assert(music_chunk_check_format(chunk, format)); assert(music_chunk_check_format(chunk, format));
if (chunk->tag != NULL) { if (chunk->tag != NULL)
if (!song_is_file(song)) { update_song_tag(song, chunk->tag);
/* always update the tag of remote streams */
struct tag *old_tag = song->tag;
song->tag = tag_dup(chunk->tag);
if (old_tag != NULL)
tag_free(old_tag);
/* the main thread will update the playlist
version when he receives this event */
event_pipe_emit(PIPE_EVENT_TAG);
/* notify all clients that the tag of the
current song has changed */
idle_add(IDLE_PLAYER);
}
}
if (chunk->length == 0) { if (chunk->length == 0) {
music_buffer_return(player_buffer, chunk); music_buffer_return(player_buffer, chunk);