!7 concept PostedLine { S globalID = aGlobalIDUnlessLoading(); S channelID; S text; bool isImage; S context; // not null if post successful long posted; // timestamp - not 0 if post successful } cm GPostedLines > DynCRUD { // API // returns ID of entry S postingLine(S channelID, S text) { ret cnew PostedLine(+channelID, +text).globalID; } S postingImage(S channelID, S imageURL) { ret cnew PostedLine(+channelID, text := imageURL, isImage := true).globalID; } void donePosting(S postID, S context) { cset(conceptWhere PostedLine(globalID := postID), posted := now(), +context); } void deleteAll { print("Deleting all lines."); cdelete PostedLine(); } }