Warning: session_start(): open(/var/lib/php/sessions/sess_i5ft2skkhrtid4ptt15icfpa6q, 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
!7
// class AIConcept comes from #1007160
static JTable table;
p-substance {
conceptsAndBot();
showConceptsTable_postProcess.set(f reversedList);
table = makeConceptsTable(AIConcept, func(AIConcept c) {
litorderedmap("Concept ID" := c.globalID, "Name/Description" := c.name, "Comments" := c.comment, "Has Image?" := c.pngFile.has(), "Imported From" := c.importedFrom, "Exportable" := c.exportable)
});
showFrame("My AI Concepts", tableWithSearcher(table));
onEnter(tableSearchField(table), f newConcept);
onDoubleClick(table, r { editConcept(selectedConcept()) });
addToWindow(table, jRightAlignedLine(
jbutton("New Concept...", f newConcept),
tableDependButton(table, "Edit", r { editConcept(selectedConcept()) }),
jbutton("Import...", f doImport)));
tablePopupMenu(table, voidfunc(JPopupMenu menu, final int row) {
addMenuItem(menu, "Edit...", r {
final S globalID = (S) getTableCell(table, row, 0);
editConcept(findConcept(AIConcept, +globalID));
});
addMenuItem(menu, "Delete", r {
final S globalID = (S) getTableCell(table, row, 0);
withDBLock(r { deleteConceptsWhere(AIConcept, +globalID) });
});
});
hideConsole();
}
svoid editConcept(final AIConcept c) {
if (c == null) ret;
final JTextField a = jTextField(c.name);
final JTextField b = jTextField(c.comment);
final JTextField cc = jTextField(c.globalID);
final ImageChooser ic = new ImageChooser(c.pngFile.has() ? c.pngFile->getImage() : null);
Runnable r = r {
BufferedImage image = ic.getImage();
if (image == null && c.pngFile.has()) {
//c.pngFile->delete();
c.pngFile.clear();
} else if (image != null &&
(!c.pngFile.has() || !imagesIdentical(c.pngFile->getImage(), image))) {
//if (c.pngFile.has()) c.pngFile->delete();
c.pngFile.set(new PNGFile(image));
}
cset(c,
name := getTextTrim(a), comment := getTextTrim(b),
globalID := getTextTrim(cc));
};
O[] params = {
"Description/Name", a,
"Comment (optional)", b,
"Global ID", cc,
"Example Image (optional)", ic,
r };
//for i over params: print("#" + i + ": " + params[i]);
renameSubmitButton("Save", showFormTitled("Edit concept " + c.globalID, params));
}
sS searcherInput() {
ret getTextTrim(tableSearchField(table));
}
svoid newConcept {
final JTextField a = jTextField(searcherInput());
final JTextField b = jTextField();
final JTextField cc = jTextField(aGlobalID());
final new ImageChooser ic;
Runnable r = r {
cnew(AIConcept,
name := getTextTrim(a), comment := getTextTrim(b), globalID := getTextTrim(cc),
pngFile := ic.createPNGFile())
};
renameSubmitButton("Create", showFormTitled("New concept",
"Description/Name", a,
"Comment (optional)", b,
"Global ID", cc,
"Example Image (optional)", ic,
r));
}
static AIConcept selectedConcept() {
ret findConcept(AIConcept, globalID := selectedTableCell(table, 0));
}
svoid doImport {
final JTextField tf = jTextField(#1007208);
showFormTitled("Import A. I. Concepts",
"Snippet ID", tf, r-thread {
importFrom(getTextTrim(tf));
});
}
svoid importFrom(S snippetID) {
S text = loadSnippet(snippetID);
Concepts newConcepts = new Concepts(snippetID).safeLoad(text);
print(n(list(newConcepts, "AIConcept"), "concept") + " loaded from " + snippetID);
Concepts myConcepts = new Concepts(#1006463).load();
print("I have " + n(list(myConcepts, "AIConcept"), "concept");
Map myIDs = indexByField(list(myConcepts, AIConcept), "globalID");
int nNew = 0;
for (Concept c : list(newConcepts, "AIConcept")) {
S id = getString(c, "globalID");
bool has = myIDs.containsKey(id);
print("ID: " + id + " - " + (has ? "I have it" : "I don't have it"));
if (!has) {
AIConcept c2 = cnew(AIConcept, importedFrom := snippetID);
copyConceptFields(c, c2, "globalID", "name", "comment");
myIDs.put(id, c2);
++nNew;
}
}
infoBox("Import done. " + n(nNew, "new concepts"));
}