use idle mask to see what changed instead of comparing old and new status
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user