Warning: session_start(): open(/var/lib/php/sessions/sess_vsgq5c84e6bg7hmq5lvq22epav, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
srecord noeq G22AutoStarter(G22Utils g22utils) > MetaWithChangeListeners is AutoCloseable {
settableWithVar volatile bool enabled = true;
settable volatile int initialDelay = 3;
settableWithVar volatile int nScriptsRun;
settableWithVar volatile AutoStartScript currentScript;
new Flag started;
new Flag waited;
new Flag ctrlPressed;
L scripts = syncL();
AutoCloseable ctrlListener;
ReliableSingleThread rst = rst(l0 _run);
record noeq AutoStartScript(G22LeftArrowScript script) > RunResultWithTimestamps {
run {
LASCompileResult cr = script.compileForAutoRun();
if (cr == null) cr = script.compileSaved();
reMutable cr;
run(-> {
G22AutoStarter.this.change();
if (cr == null) fail("Script is not saved: " + script);
var parsed = cr.parsedScriptMandatory();
ret parsed!;
});
}
}
void init() {
if (ctrlListener != null) ret;
scripts.clear();
var scripts = conceptsWhere(g22utils.concepts, G22LeftArrowScript, runOnProjectOpen := true);
var sorted = sortByCalculatedFieldAlphaNumIC(scripts, s -> s.runOrder);
for (script : sorted)
this.scripts.add(new AutoStartScript(script));
change();
ctrlListener = tempAddGlobalCtrlKeyListener(b -> {
if (b) {
ctrlPressed.raise();
cancel();
}
});
}
void start {
print("G22AutoStarter: Start");
if (enabled) rst!;
}
void _run {
if (!enabled) ret;
temp g22utils.backgroundProcessesUI.tempAdd("Auto-Start Scripts", );
if (started.raise()) change();
if (!waited!) {
print("G22AutoStarter: Sleeping");
while (initialDelay > 0) {
sleepSeconds(1);
initialDelay(initialDelay-1);
}
waited.raise();
change();
print("G22AutoStarter: Slept");
}
while (enabled && !done()) {
var script = scripts.get(nScriptsRun);
currentScript(script);
change();
script.run();
nScriptsRun(nScriptsRun+1);
currentScript(null);
change();
}
change();
close();
}
bool done() { ret nScriptsRun >= l(scripts); }
void cancel { setEnabled(false); }
void resume {
if (done())
ret with infoBox("Nothing to resume - auto-start is done");
if (enabled)
ret with infoBox("Already running");
infoBox("Resuming auto-start");
setEnabled(true);
rst!;
}
S status() {
ret !enabled ?
ctrlPressed!
? "Cancelled due to ctrl key"
: "Cancelled"
: done() ? "Done"
: waited! ? "Started"
: started! ? "Pre-start wait (" + formatDouble1(initialDelay) + "s)"
: "Not started";
}
S stats() {
ret status() + ". " + scriptsRunStats();
}
S scriptsRunStats() {
ret "Scripts run: " + nScriptsRun() + "/" + l(scripts);
}
S currentScriptStats() {
var s = currentScript;
if (s == null) ret "";
ret "Running: " + s.script;
}
close { dispose ctrlListener; }
void waitUntilDone {
waitForVarPredicate(varNScriptsRun(), -> done());
}
}