include(config.m4)dnl #!__CMD_AWK__ -f # __CGIPATH__/download # # Show file downloads using either direct http or gopher proxy links include(src/config.awk) incl(src/api.awk) incl(src/cgi.awk) incl(src/util.awk) function main( cmd, files, file_size, format, iaout, is_archive, is_proxy, item_server, label, mtime, name, out, sel, source, url) { out = "" if (topdir == "download") { is_proxy = 1 } else { # topdir == "direct" is_proxy = 0 } iaout = gettemp() url = api_endpoint "/metadata/" search api_request(url, "GET", iaout) # format search results as a gopher directory (menu) cmd = sprintf("%s <%s 2>&1", cmd_json2tsv, iaout) FS = "\t" dir = "" files = 0 delete format item_server = "" delete mtime delete name delete file_size delete source while ((cmd | getline) > 0) { if ($1 == ".dir" && $2 == "s") { dir = $3 } else if ($1 == ".files[]" && $2 == "o") { files++ } else if ($1 == ".files[].format" && $2 == "s") { format[files] = $3 } else if ($1 == ".files[].mtime" && $2 == "s") { mtime[files] = $3 } else if ($1 == ".files[].name" && $2 == "s") { name[files] = $3 } else if ($1 == ".files[].size" && $2 == "s") { file_size[files] = $3 } else if ($1 == ".files[].source" && $2 == "s") { source[files] = $3 } else if ($1 == ".server" && $2 == "s") { item_server = $3 } } close(cmd) for (i = 1; i <= files; i++) { label = sprintf("%s %s %s", shorten_left(name[i], 40), strftime("%Y-%m-%d %H:%M", mtime[i]), human_size(file_size[i])) url = sprintf("http://%s%s/%s", item_server, dir, name[i]) if (is_proxy) { if (max_bin_size > 0 && file_size[i] > max_bin_size * size_mb) { sel = "URL:" uri_encode(url) item(out, "h", label, sel, server, port) } else { sel = cgipath "/links?" url item(out, "1", label, sel, server, port) } } else { sel = "URL:" uri_encode(url) item(out, "h", label, sel, server, port) } is_archive = detect_archive(url) if (is_archive) { url = sprintf("http://%s/view_archive.php?archive=%s/%s", item_server, dir, name[i]) label = shorten_left(name[i], 40) " (View Contents)" sel = "URL:" uri_encode(url) item(out, "h", label, sel, server, port) } } sel = cgipath "/direct?" search item(out, "1", "Downloads via http", sel, server, port) unlink(iaout) exit 0 } BEGIN { config_init() cgi_init() uri_encode_init() util_init() main() }