From 888d48300fd2d098a676503a69ac96db94e61a04 Mon Sep 17 00:00:00 2001 From: Jacob McDonnell Date: Sun, 26 Apr 2026 20:17:51 -0400 Subject: feat: OS Index Pages --- db.go | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 2 deletions(-) (limited to 'db.go') diff --git a/db.go b/db.go index 49e7656a..6248cd79 100644 --- a/db.go +++ b/db.go @@ -3,9 +3,11 @@ package main import ( "database/sql" "fmt" + "html/template" "log" _ "modernc.org/sqlite" "net/http" + "strings" "os" ) @@ -20,8 +22,12 @@ type Entry struct { path string } -func (d *Database) GetOS(w http.ResponseWriter, r *http.Request) { - rows, err := d.DB.Query("SELECT DISTINCT os FROM manpages;") +func (d *Database) GetOS() (*sql.Rows, error) { + return d.DB.Query("SELECT DISTINCT os FROM manpages;") +} + +func (d *Database) GetOptionOS(w http.ResponseWriter, r *http.Request) { + rows, err := d.GetOS() if err != nil { log.Println(err) ErrorPage(w, 500) @@ -90,3 +96,62 @@ func (d *Database) Search(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "

No results found for %s %s(%s)

", osName, name, section) } } + +func (d *Database) Index(w http.ResponseWriter, r *http.Request) { + url := r.URL.String() + + osName, _ := strings.CutPrefix(url, "/") + + rows, err := d.DB.Query("SELECT * FROM manpages WHERE os == ? ORDER BY section, name", osName) + if err != nil { + log.Println(err) + ErrorPage(w, 500) + return + } + + links := []string{ "

" + osName + "

" } + for rows.Next() { + var entry Entry + + if err := rows.Scan(&entry.os, &entry.name, &entry.section, &entry.path); err != nil { + log.Println(err) + ErrorPage(w, 500) + return + } + + eUrl, _ := strings.CutPrefix(entry.path, "static") + link := fmt.Sprintf("
  • %s(%d)
  • ", eUrl, entry.name, entry.section) + links = append(links, link) + } + + links = append(links, "
    ") + + if len(links) > 2 { + t := template.Must(template.ParseFiles("templates/template.html")) + + t.Execute(w, template.HTML(strings.Join(links, ""))) + } +} + +func (d *Database) IndexLinks(w http.ResponseWriter, r *http.Request) { + rows, err := d.GetOS() + if err != nil { + log.Println(err) + ErrorPage(w, 500) + return + } + + fmt.Fprintf(w, "
  • home
  • ") + for rows.Next() { + var osName string + + if err := rows.Scan(&osName); err != nil { + log.Println(err) + ErrorPage(w, 500) + return + } + + fmt.Fprintf(w, "
  • %s
  • ", osName, osName) + } +} + -- cgit v1.2.3