diff foosdk/sdk/foobar2000/SDK/system_time_keeper.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/foosdk/sdk/foobar2000/SDK/system_time_keeper.h	Mon Jan 05 02:15:46 2026 -0500
@@ -0,0 +1,50 @@
+#pragma once
+
+namespace system_time_periods {
+	static constexpr t_filetimestamp second = filetimestamp_1second_increment;
+	static constexpr t_filetimestamp minute = second * 60;
+	static constexpr t_filetimestamp hour = minute * 60;
+	static constexpr t_filetimestamp day = hour * 24;
+	static constexpr t_filetimestamp week = day * 7;
+};
+class system_time_callback {
+public:
+	virtual void on_time_changed(t_filetimestamp newVal) = 0;
+};
+//! \since 0.9.6
+class system_time_keeper : public service_base {
+public:
+	//! The callback object receives an on_changed() call with the current time inside the register_callback() call.
+	virtual void register_callback(system_time_callback * callback, t_filetimestamp resolution) = 0;
+
+	virtual void unregister_callback(system_time_callback * callback) = 0;
+
+	FB2K_MAKE_SERVICE_COREAPI(system_time_keeper)
+};
+
+class system_time_callback_impl : public system_time_callback {
+public:
+	system_time_callback_impl() {}
+	~system_time_callback_impl() {stop_timer();}
+
+	void stop_timer() {
+		if (m_registered) {
+			system_time_keeper::get()->unregister_callback(this);
+			m_registered = false;
+		}
+	}
+	//! You get a on_changed() call inside the initialize_timer() call.
+	void initialize_timer(t_filetimestamp period) {
+		stop_timer();
+		system_time_keeper::get()->register_callback(this, period);
+		m_registered = true;
+	}
+
+	//! Override me
+	void on_time_changed(t_filetimestamp) override {}
+
+	PFC_CLASS_NOT_COPYABLE_EX(system_time_callback_impl)
+private:
+	bool m_registered = false;
+};
+