diff options
-rw-r--r-- | src/StateFile.cxx | 33 | ||||
-rw-r--r-- | src/StateFile.hxx | 12 |
2 files changed, 33 insertions, 12 deletions
diff --git a/src/StateFile.cxx b/src/StateFile.cxx index a15eb7220..301ae9abb 100644 --- a/src/StateFile.cxx +++ b/src/StateFile.cxx @@ -45,6 +45,24 @@ StateFile::StateFile(Path &&_path, const char *_path_utf8, } void +StateFile::RememberVersions() +{ + prev_volume_version = sw_volume_state_get_hash(); + prev_output_version = audio_output_state_get_version(); + prev_playlist_version = playlist_state_get_hash(&partition.playlist, + &partition.pc); +} + +bool +StateFile::IsModified() const +{ + return prev_volume_version != sw_volume_state_get_hash() || + prev_output_version != audio_output_state_get_version() || + prev_playlist_version != playlist_state_get_hash(&partition.playlist, + &partition.pc); +} + +void StateFile::Write() { g_debug("Saving state file %s", path_utf8.c_str()); @@ -62,10 +80,7 @@ StateFile::Write() fclose(fp); - prev_volume_version = sw_volume_state_get_hash(); - prev_output_version = audio_output_state_get_version(); - prev_playlist_version = playlist_state_get_hash(&partition.playlist, - &partition.pc); + RememberVersions(); } void @@ -92,19 +107,13 @@ StateFile::Read() g_warning("Unrecognized line in state file: %s", line); } - prev_volume_version = sw_volume_state_get_hash(); - prev_output_version = audio_output_state_get_version(); - prev_playlist_version = playlist_state_get_hash(&partition.playlist, - &partition.pc); + RememberVersions(); } inline void StateFile::AutoWrite() { - if (prev_volume_version == sw_volume_state_get_hash() && - prev_output_version == audio_output_state_get_version() && - prev_playlist_version == playlist_state_get_hash(&partition.playlist, - &partition.pc)) + if (!IsModified()) /* nothing has changed - don't save the state file, don't spin up the hard disk */ return; diff --git a/src/StateFile.hxx b/src/StateFile.hxx index a81b8d91f..7d57d5422 100644 --- a/src/StateFile.hxx +++ b/src/StateFile.hxx @@ -49,6 +49,18 @@ public: void Write(); private: + /** + * Save the current state versions for use with IsModified(). + */ + void RememberVersions(); + + /** + * Check if MPD's state was modified since the last + * RememberVersions() call. + */ + gcc_pure + bool IsModified() const; + void AutoWrite(); /* virtual methods from TimeoutMonitor */ |