Commit 42af040f authored by Max Kellermann's avatar Max Kellermann

StateFile: configurable interval

parent d383d617
...@@ -898,6 +898,18 @@ systemctl start mpd.socket</programlisting> ...@@ -898,6 +898,18 @@ systemctl start mpd.socket</programlisting>
(<parameter>+wx</parameter>). (<parameter>+wx</parameter>).
</entry> </entry>
</row> </row>
<row>
<entry>
<varname>state_file_interval</varname>
<parameter>SECONDS</parameter>
</entry>
<entry>
Auto-save the state file this number of seconds
after each state change. Defaults to
<parameter>120</parameter> (2 minutes).
</entry>
</row>
</tbody> </tbody>
</tgroup> </tgroup>
</informaltable> </informaltable>
......
...@@ -279,7 +279,10 @@ glue_state_file_init(Error &error) ...@@ -279,7 +279,10 @@ glue_state_file_init(Error &error)
#endif #endif
} }
state_file = new StateFile(std::move(path_fs), unsigned interval = config_get_unsigned(CONF_STATE_FILE_INTERVAL,
StateFile::DEFAULT_INTERVAL);
state_file = new StateFile(std::move(path_fs), interval,
*instance->partition, *instance->partition,
*instance->event_loop); *instance->event_loop);
state_file->Read(); state_file->Read();
......
...@@ -36,10 +36,11 @@ ...@@ -36,10 +36,11 @@
static constexpr Domain state_file_domain("state_file"); static constexpr Domain state_file_domain("state_file");
StateFile::StateFile(AllocatedPath &&_path, StateFile::StateFile(AllocatedPath &&_path, unsigned _interval,
Partition &_partition, EventLoop &_loop) Partition &_partition, EventLoop &_loop)
:TimeoutMonitor(_loop), :TimeoutMonitor(_loop),
path(std::move(_path)), path_utf8(path.ToUTF8()), path(std::move(_path)), path_utf8(path.ToUTF8()),
interval(_interval),
partition(_partition), partition(_partition),
prev_volume_version(0), prev_output_version(0), prev_volume_version(0), prev_output_version(0),
prev_playlist_version(0) prev_playlist_version(0)
...@@ -137,7 +138,7 @@ void ...@@ -137,7 +138,7 @@ void
StateFile::CheckModified() StateFile::CheckModified()
{ {
if (!IsActive() && IsModified()) if (!IsActive() && IsModified())
ScheduleSeconds(2 * 60); ScheduleSeconds(interval);
} }
void void
......
...@@ -34,6 +34,8 @@ class StateFile final : private TimeoutMonitor { ...@@ -34,6 +34,8 @@ class StateFile final : private TimeoutMonitor {
const AllocatedPath path; const AllocatedPath path;
const std::string path_utf8; const std::string path_utf8;
const unsigned interval;
Partition &partition; Partition &partition;
/** /**
...@@ -44,7 +46,10 @@ class StateFile final : private TimeoutMonitor { ...@@ -44,7 +46,10 @@ class StateFile final : private TimeoutMonitor {
prev_playlist_version; prev_playlist_version;
public: public:
StateFile(AllocatedPath &&path, Partition &partition, EventLoop &loop); static constexpr unsigned DEFAULT_INTERVAL = 2 * 60;
StateFile(AllocatedPath &&path, unsigned interval,
Partition &partition, EventLoop &loop);
void Read(); void Read();
void Write(); void Write();
......
...@@ -32,6 +32,7 @@ enum ConfigOption { ...@@ -32,6 +32,7 @@ enum ConfigOption {
CONF_LOG_FILE, CONF_LOG_FILE,
CONF_PID_FILE, CONF_PID_FILE,
CONF_STATE_FILE, CONF_STATE_FILE,
CONF_STATE_FILE_INTERVAL,
CONF_RESTORE_PAUSED, CONF_RESTORE_PAUSED,
CONF_USER, CONF_USER,
CONF_GROUP, CONF_GROUP,
......
...@@ -32,6 +32,7 @@ const ConfigTemplate config_templates[] = { ...@@ -32,6 +32,7 @@ const ConfigTemplate config_templates[] = {
{ "log_file", false, false }, { "log_file", false, false },
{ "pid_file", false, false }, { "pid_file", false, false },
{ "state_file", false, false }, { "state_file", false, false },
{ "state_file_interval", false, false },
{ "restore_paused", false, false }, { "restore_paused", false, false },
{ "user", false, false }, { "user", false, false },
{ "group", false, false }, { "group", false, false },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment