use idle mask to see what changed instead of comparing old and new status

This commit is contained in:
Andrzej Rybczak
2009-10-25 21:16:21 +01:00
parent dd04406ee5
commit 9f5e9e60ff

View File

@@ -252,19 +252,59 @@ void Connection::UpdateStatus()
}
else
{
itsChanges.Playlist = mpd_status_get_queue_version(itsOldStatus) != mpd_status_get_queue_version(itsCurrentStatus);
itsChanges.SongID = mpd_status_get_song_id(itsOldStatus) != mpd_status_get_song_id(itsCurrentStatus);
itsChanges.Database = mpd_status_get_update_id(itsOldStatus) && !mpd_status_get_update_id(itsCurrentStatus);
itsChanges.DBUpdating = mpd_status_get_update_id(itsOldStatus) != mpd_status_get_update_id(itsCurrentStatus);
itsChanges.Volume = mpd_status_get_volume(itsOldStatus) != mpd_status_get_volume(itsCurrentStatus);
itsChanges.ElapsedTime = mpd_status_get_elapsed_time(itsOldStatus) != mpd_status_get_elapsed_time(itsCurrentStatus);
itsChanges.Crossfade = mpd_status_get_crossfade(itsOldStatus) != mpd_status_get_crossfade(itsCurrentStatus);
itsChanges.Random = mpd_status_get_random(itsOldStatus) != mpd_status_get_random(itsCurrentStatus);
itsChanges.Repeat = mpd_status_get_repeat(itsOldStatus) != mpd_status_get_repeat(itsCurrentStatus);
itsChanges.Single = mpd_status_get_single(itsOldStatus) != mpd_status_get_single(itsCurrentStatus);
itsChanges.Consume = mpd_status_get_consume(itsOldStatus) != mpd_status_get_consume(itsCurrentStatus);
itsChanges.PlayerState = mpd_status_get_state(itsOldStatus) != mpd_status_get_state(itsCurrentStatus);
itsChanges.StatusFlags = itsChanges.Repeat || itsChanges.Random || itsChanges.Single || itsChanges.Consume || itsChanges.Crossfade || itsChanges.DBUpdating;
if (idle_mask != 0)
{
itsChanges.Playlist = idle_mask & MPD_IDLE_QUEUE;
itsChanges.Database = idle_mask & MPD_IDLE_DATABASE;
itsChanges.DBUpdating = idle_mask & MPD_IDLE_UPDATE;
itsChanges.Volume = idle_mask & MPD_IDLE_MIXER;
itsChanges.StatusFlags = idle_mask & MPD_IDLE_OPTIONS;
}
else
{
itsChanges.Playlist = mpd_status_get_queue_version(itsOldStatus)
!= mpd_status_get_queue_version(itsCurrentStatus);
itsChanges.Database = mpd_status_get_update_id(itsOldStatus)
&& !mpd_status_get_update_id(itsCurrentStatus);
itsChanges.DBUpdating = mpd_status_get_update_id(itsOldStatus)
!= mpd_status_get_update_id(itsCurrentStatus);
itsChanges.Volume = mpd_status_get_volume(itsOldStatus)
!= mpd_status_get_volume(itsCurrentStatus);
itsChanges.StatusFlags = itsChanges.Repeat
|| itsChanges.Random
|| itsChanges.Single
|| itsChanges.Consume
|| itsChanges.Crossfade
|| itsChanges.DBUpdating;
}
itsChanges.SongID = mpd_status_get_song_id(itsOldStatus)
!= mpd_status_get_song_id(itsCurrentStatus);
itsChanges.ElapsedTime = mpd_status_get_elapsed_time(itsOldStatus)
!= mpd_status_get_elapsed_time(itsCurrentStatus);
itsChanges.Crossfade = mpd_status_get_crossfade(itsOldStatus)
!= mpd_status_get_crossfade(itsCurrentStatus);
itsChanges.Random = mpd_status_get_random(itsOldStatus)
!= mpd_status_get_random(itsCurrentStatus);
itsChanges.Repeat = mpd_status_get_repeat(itsOldStatus)
!= mpd_status_get_repeat(itsCurrentStatus);
itsChanges.Single = mpd_status_get_single(itsOldStatus)
!= mpd_status_get_single(itsCurrentStatus);
itsChanges.Consume = mpd_status_get_consume(itsOldStatus)
!= mpd_status_get_consume(itsCurrentStatus);
itsChanges.PlayerState = mpd_status_get_state(itsOldStatus)
!= mpd_status_get_state(itsCurrentStatus);
}
itsUpdater(this, itsChanges, itsErrorHandlerUserdata);
// below conditionals are a hack to workaround mpd bug 2608/2612