Add callback script to periodically save a backup snapshot
authorRobin Gareus <robin@gareus.org>
Sun, 11 Nov 2018 20:26:50 +0000 (21:26 +0100)
committerRobin Gareus <robin@gareus.org>
Sun, 11 Nov 2018 20:26:50 +0000 (21:26 +0100)
scripts/periodic_backup.lua [new file with mode: 0644]

diff --git a/scripts/periodic_backup.lua b/scripts/periodic_backup.lua
new file mode 100644 (file)
index 0000000..42c6fdd
--- /dev/null
@@ -0,0 +1,38 @@
+ardour {
+       ["type"]    = "EditorHook",
+       name        = "Periodically Save Snapshot",
+       author      = "Ardour Lua Task Force",
+       description = "Save a session-snapshot peridocally (every 15mins) named after the current date-time",
+}
+
+-- subscribe to signals
+-- http://manual.ardour.org/lua-scripting/class_reference/#LuaSignal.LuaSignal
+function signals ()
+       return LuaSignal.Set():add ({[LuaSignal.LuaTimerDS] = true})
+end
+
+-- create callback function
+function factory ()
+       local _last_snapshot_time = 0 -- persistent variable
+
+       -- callback function which invoked when signal is emitted, every 100ms
+       return function (signal, ref, ...)
+
+               local now = os.time (); -- unix-time, seconds since 1970
+
+               -- skip initial save when script is loaded
+               if (_last_snapshot_time == 0) then
+                       _last_snapshot_time = now;
+               end
+
+               -- every 15 mins
+               if (now > _last_snapshot_time + 60 * 15) then
+                       _last_snapshot_time = now
+                       -- format date-time (avoid colon)
+                       local snapshot_name = os.date ("%Y-%m-%d %H.%M.%S", now)
+                       -- save session -- http://manual.ardour.org/lua-scripting/class_reference/#ARDOUR:Session
+                       Session:save_state ("backup " .. snapshot_name, false, false, false)
+               end
+
+       end
+end