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 else
{ {
itsChanges.Playlist = mpd_status_get_queue_version(itsOldStatus) != mpd_status_get_queue_version(itsCurrentStatus); if (idle_mask != 0)
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.Playlist = idle_mask & MPD_IDLE_QUEUE;
itsChanges.DBUpdating = mpd_status_get_update_id(itsOldStatus) != mpd_status_get_update_id(itsCurrentStatus); itsChanges.Database = idle_mask & MPD_IDLE_DATABASE;
itsChanges.Volume = mpd_status_get_volume(itsOldStatus) != mpd_status_get_volume(itsCurrentStatus); itsChanges.DBUpdating = idle_mask & MPD_IDLE_UPDATE;
itsChanges.ElapsedTime = mpd_status_get_elapsed_time(itsOldStatus) != mpd_status_get_elapsed_time(itsCurrentStatus); itsChanges.Volume = idle_mask & MPD_IDLE_MIXER;
itsChanges.Crossfade = mpd_status_get_crossfade(itsOldStatus) != mpd_status_get_crossfade(itsCurrentStatus); itsChanges.StatusFlags = idle_mask & MPD_IDLE_OPTIONS;
itsChanges.Random = mpd_status_get_random(itsOldStatus) != mpd_status_get_random(itsCurrentStatus); }
itsChanges.Repeat = mpd_status_get_repeat(itsOldStatus) != mpd_status_get_repeat(itsCurrentStatus); else
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.Playlist = mpd_status_get_queue_version(itsOldStatus)
itsChanges.PlayerState = mpd_status_get_state(itsOldStatus) != mpd_status_get_state(itsCurrentStatus); != mpd_status_get_queue_version(itsCurrentStatus);
itsChanges.StatusFlags = itsChanges.Repeat || itsChanges.Random || itsChanges.Single || itsChanges.Consume || itsChanges.Crossfade || itsChanges.DBUpdating;
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); itsUpdater(this, itsChanges, itsErrorHandlerUserdata);
// below conditionals are a hack to workaround mpd bug 2608/2612 // below conditionals are a hack to workaround mpd bug 2608/2612