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:
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__":