geomyidae

A small C-based gopherd. (gopher://bitreich.org/1/scm/geomyidae)
git clone git://r-36.net/geomyidae
Log | Files | Refs | README | LICENSE

commit 5f8346a44327a384b989b92ec9936389ea0ff58b
parent a541c4f4710d4e11847d082a623e11ab8fca6c31
Author: Christoph Lohmann <20h@r-36.net>
Date:   Sun,  3 Apr 2022 23:59:22 +0200

Add number support to umnlisting.dcgi.

Noone has done this before for all cases!

Diffstat:
cgi-examples/umnlisting.dcgi | 52+++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 45 insertions(+), 7 deletions(-)

diff --git a/cgi-examples/umnlisting.dcgi b/cgi-examples/umnlisting.dcgi @@ -96,12 +96,15 @@ def main(args): fd.close() outputlinks = {} + numblinks = {} linkspath = "%s/.Links" % (basedir) if os.path.exists(linkspath): linkslinks = parselinksfile(linkspath) for linkkey in linkslinks.keys(): outputlinks[linkkey] = linkslinks[linkkey] + if "number" in linkslinks[linkkey]: + numblinks[linkkey] = linkslinks[linkkey] entries = os.listdir(basedir) for entry in entries: @@ -116,6 +119,8 @@ def main(args): if os.path.exists(capspath): caplink = parselinksfile(capspath, entrylink) outputlinks[entrylink["path"]] = entrylink + if "number" in entrylink: + numblinks[entrylink["path"]] = entrylink namespath = "%s/.names" % (basedir) if os.path.exists(namespath): @@ -128,6 +133,9 @@ def main(args): namelink[key] else: outputlinks[namekey] = nameslinks[namekey] + if "number" in outputlinks[namekey]: + numblinks[namekey] = outputlinks[namekey] + displaylinks = {} for link in outputlinks.keys(): if "name" in outputlinks[link]: @@ -143,13 +151,41 @@ def main(args): displaylinks[link] = link displaykeys = sorted(displaylinks) - for key in displaykeys: - path = displaylinks[key] - if path == "./.Links" or \ - path == "./.cap" or \ - path == "./.names" or \ - path == "./.abstract": - continue + for dotfile in [".Links", ".names", ".cap", ".abstract"]: + try: + displaykeys.remove(dotfile) + except ValueError: + pass + + # This is why the UMN format really sucks. + numbers = {} + for numb in numblinks.keys(): + link = outputlinks[numb] + numbers[link["number"]] = outputlinks[numb] + if "name" in link: + displaykeys.remove(link["name"]) + elif "path" in link: + if link["path"].startswith("./"): + displaykeys.remove(link["path"][2:]) + else: + displaykeys.remove(link["path"]) + + curnumber = 1 + while 1: + if curnumber in numbers.keys(): + path = numbers[curnumber]["path"] + numbers.pop(curnumber) + else: + key = displaykeys.pop() + path = displaylinks[key] + + # Work on the rest of the numbered links, when no display + # entries are left. + if len(displaykeys) == 0: + if len(numbers) == 0: + break + randnumb = numbers.pop() + path = randnumb["path"] link = outputlinks[path] if "port" not in link: @@ -174,6 +210,8 @@ def main(args): if "abstract" in link: dcgifilterprint(link["abstract"].split("\n")) + curnumber += 1 + return 0 if __name__ == "__main__":