sS quickVisualize_progID = #1007145; static Lock quickVisualize_lock = lock(); static bool quickVisualize_hasCached(S query) { ret quickVisualize_imageFile(query).length() != 0; } static BufferedImage quickVisualize_fromCache(S query) { File f = quickVisualize_imageFile(query); if (f.length() != 0) pcall { ret loadPNG(f); } null; } static S quickVisualize_preprocess(S query) { ret toUpper(shorten(trim(query), 200)); } static BufferedImage quickVisualize(S query) { query = quickVisualize_preprocess(query); if (empty(query)) null; BufferedImage img = quickVisualize_fromCache(query); if (img != null) ret img; File f = quickVisualize_imageFile(query); /*L urls = googleImageSearch_multi(query); saveTextFile(quickVisualize_urlsFile(query), joinLines(urls)); if (empty(urls)) null; img = loadBufferedImage(first(urls));*/ lock quickVisualize_lock; img = googleImageSearch_new(query); if (img == null) null; savePNG(f, img); ret img; } static S quickVisualize_imagePath(S query) { query = quickVisualize_preprocess(query); ret fsI(quickVisualize_progID) + "/" + urlencode(query) + ".png"; } static File quickVisualize_imageFile(S query) { query = quickVisualize_preprocess(query); ret prepareProgramFile(quickVisualize_progID, urlencode(query) + ".png"); } static File quickVisualize_urlsFile(S query) { query = quickVisualize_preprocess(query); ret prepareProgramFile(quickVisualize_progID, "urls-" + urlencode(query) + ".txt"); }