Warning: session_start(): open(/var/lib/php/sessions/sess_v98gqhf3hbjt3ehp9hec6cnlal, 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
sclass FilesInDirectory extends DynSCP {
new DynModuleRef mate;
S dir;
L files;
transient JTable table;
File dirObject() { ret newFile(dir); }
JComponent visualize2() {
if (table == null) {
table = sexyTable();
onDoubleClickOrEnter(table, voidfunc(int row) {
File f = newFile(newFile(dir), (S) getTableCell(row, 0));
S info = dm_makeModule("#1015916/DirectoryInfo");
call(dm_getModule(info), 'setDir, f);
S files = dm_makeModule("#1016457/FilesInDirectory");
call(dm_getModule(files), 'setMate, info);
});
updateTable();
}
if (mate! == null) ret jcenteredlabel("Need directory");
ret table;
}
void update {
int oldChangeCount = mate! == null ? -1 : changeCount;
try {
if (mate! != null && !dm_moduleStillThere(mate!)) mate.set(null);
if (mate! == null)
if (setField(mate := DynModuleRef(print("Mate: ", dm_findMateOfType(this, 'DirectoryInfo)))))
revisualize2();
if (mate == null) ret;
setField(dir := (S) call(mate!, 'getDir));
L files = castCall(mate!, 'getFiles);
if (this.files != files) setField(+files);
} finally {
if (changeCount != oldChangeCount) updateTable();
}
}
void updateTable {
if (dir == null || table == null) ret with setModuleName("Files in directory");
L l = sortFilesByDate(
fileNamesInDirToFile(new File(dir), files));
dataToTable_uneditable(map(func(File f) -> Map {
litorderedmap(
"Name" := f.getName(),
"Size" := f.isDirectory() ? "Directory" : toK(fileSize(f)) + " K")
}, l), table);
setModuleName(files == null
? "Not allowed to look in directory " + fileName(dirObject())
: n2(l, "element") + " in directory " + fileName(dirObject()));
}
void setMate(S id) { mate.set(id); }
}