diff options
Diffstat (limited to 'db.go')
| -rw-r--r-- | db.go | 69 |
1 files changed, 67 insertions, 2 deletions
@@ -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, "<center><h1>No results found for %s %s(%s)</h1></center>", 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{ "<h1 style=\"text-transform: uppercase;\">" + osName + "</h1><ui>" } + 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("<li><a href=\"%s\">%s(%d)</a></li>", eUrl, entry.name, entry.section) + links = append(links, link) + } + + links = append(links, "</ui>") + + 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, "<li class=\"topLink\"><a href=\"/\">home</a></li>") + for rows.Next() { + var osName string + + if err := rows.Scan(&osName); err != nil { + log.Println(err) + ErrorPage(w, 500) + return + } + + fmt.Fprintf(w, "<li class=\"topLink\"><a href=\"/%s\">%s</a></li>", osName, osName) + } +} + |
