#pragma once #include #include #include #include #include #include namespace faset::editor { class AutosaveController { public: using Clock = std::chrono::steady_clock; using SaveFn = std::function; explicit AutosaveController(SaveFn save); // Called from the Editor event loop with an injected monotonic clock for // deterministic tests. Only a named dirty scene becomes eligible to save. void observe(const Json& documents, Clock::time_point now, bool enabled); Json status() const; private: struct Entry { std::uint64_t revision{}; std::string path, state = "saved", error; Clock::time_point deadline{}; }; SaveFn save_; mutable std::mutex mutex_; std::map entries_; bool enabled_ = true; }; } // namespace faset::editor