diff options
author | Nguyễn Gia Phong <mcsinyx@disroot.org> | 2022-06-28 17:49:14 +0900 |
---|---|---|
committer | Nguyễn Gia Phong <mcsinyx@disroot.org> | 2022-06-28 17:49:14 +0900 |
commit | a2abfc596965111c28ea43d9ab986732692e022f (patch) | |
tree | 5e60fe2d301a9e9e98af33ed953037db852e7da9 /main.go | |
parent | 5ba68fae053ccabc3161ee4f80963ac0c47ddaf2 (diff) | |
download | phylactery-a2abfc596965111c28ea43d9ab986732692e022f.tar.gz |
Write response as soon as data is ready
Previously the entire archive had to be read before the template is executed, thus large archives takes forever to render from slow backing FS.
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/main.go b/main.go index b364d20..dfc01a5 100644 --- a/main.go +++ b/main.go @@ -48,7 +48,6 @@ type Archive struct { Title string Prev string Next string - Entries []Page } // Type Directory represents a library directory in file system. @@ -147,7 +146,17 @@ func main() { // Render archive page entries, _ := os.ReadDir(path.Join(p, "..")) index := find(entries, stat.Name()) - var pages []Page + prev := "" + if index > 0 { + prev = entries[index-1].Name() + } + next := "" + if index < len(entries)-1 { + next = entries[index+1].Name() + } + t.ExecuteTemplate(w, "archive-head.html", + Archive{ stat.Name(), prev, next }) + for i, f := range cbz.File { image, _ := cbz.File[i].Open() defer image.Close() @@ -155,21 +164,11 @@ func main() { n, _ := image.Read(buf) mime := http.DetectContentType(buf[:n]) if strings.HasPrefix(mime, "image/") { - pages = append(pages, Page{i, f.Name}) + t.ExecuteTemplate(w, "archive-page.html", + Page{i, f.Name}) } } - - prev := "" - if index > 0 { - prev = entries[index-1].Name() - } - next := "" - if index < len(entries)-1 { - next = entries[index+1].Name() - } - t.ExecuteTemplate(w, "archive.html", Archive{ - stat.Name(), prev, next, pages, - }) + t.ExecuteTemplate(w, "archive-foot.html", nil) }) addr := os.Getenv("PHYLACTERY_ADDRESS") |