Warning: session_start(): open(/var/lib/php/sessions/sess_vca10jb0k6jq6l9dlo94qamt6g, 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
concept Page {
S url;
S mimeType;
long loadedWhen, loadTime;
bool shouldLoad;
File contentsFile() {
ret javaxCachesDir("Loaded Web Pages/" + uniqueFileNameUsingMD5_80_v2(url));
}
long contentSize() { ret l(contentsFile()); }
}
cmodule MultiWebpageLoader > DynCRUD {
transient Q loaderQ;
start {
loaderQ = dm_startQ("Loader Queue");
indexConceptField(Page, 'url);
crud.renderer = func(Page page) -> Map {
litorderedmap(
"URL" := page.url,
"Should load" := page.shouldLoad,
"Loaded" := formatDateWithSeconds(page.loadedWhen),
"Load time" := formatDouble(msToSeconds(page.loadTime), 1) + " s",
"Content type" := page.mimeType)
};
}
afterVisualize {
addButton("Add URL...", rThreadEnter {
inputText("URL to load", voidfunc(S url) enter {
addURLIfNotKnown(url);
});
});
tablePopupMenuItemsThreaded_top(table(),
"Load now", r {
loaderQ.add(r { loadAPage(selected()) })
});
}
void loadAPage(Page page) {
if (page == null) ret;
long loadedWhen = now();
cset(page, shouldLoad := false, +loadedWhen, mimeType := null);
S mimeType;
try {
byte[] content = loadBinaryPage(page.url);
saveFile(page.contentsFile(), content);
mimeType = or2(first(lookupPossiblyIgnoreCase(loadBinaryPage_responseHeaders!, "Content-Type")), "?");
} catch print e {
mimeType = "ERROR: " + exceptionToStringShort(e);
}
long loadTime = now()-loadedWhen;
cset(page, +loadTime, +mimeType);
}
// API
void addURLIfNotKnown(S url) {
cset(uniq_returnIfNew Page(+url), shouldLoad := true);
}
}