!7 !include #1001372 // direct nohupJavax for fast program starting // useful stuff to avoid transpilation please include function rpcNoArgs. concept Suggestion { long date; S text; S author; S actionCode; } static Suggestion showing; static ReliableSingleThread rstUpdate = new(f updateImpl); static PastValueKeeper past = new(3600.0); p-subst { defaultFrameTitle("Suggestion"); autoRestart(); db(); botWithInput("Suggestion Master.", [=[ me suggests hello with action [[infoBox("hello")]] ]=]); } answer { if "* suggests * with action *" { cnew(Suggestion, date := now(), text := $2, author := $1, actionCode := $3); rstUpdate!; ret "OK"; } if "show last suggestion" { showLastSuggestion(); ret "OK"; } } svoid updateImpl { Suggestion latest = highestByField(list(Suggestion), 'date); if (latest != showing) { showing = latest; print("Showing suggestion: " + showing.text); logQuotedWithDate(javaxDataDir("suggestions.log"), "Showing: " + struct(showing)); past.add(showing); showSuggestion_master(showing.text, r { printIndent(showing.actionCode); optimizedJavaEval(showing.actionCode); }); } } svoid showLastSuggestion { double lookback = 1.0; print('showLastSuggestion); Suggestion s = past.valueAt_orFirst(toMS(lookback)); if (s != null) ccopyFields(s, cnew(Suggestion, date := now()), 'text, 'author, 'actionCode); rstUpdate!; }