Granularise modify() so it won't check/parse both

This commit is contained in:
Amolith 2021-12-30 18:45:47 -05:00
parent a8c8ad221d
commit d80c703eee
No known key found for this signature in database
GPG key ID: 5548AD9930655715
3 changed files with 50 additions and 40 deletions

View file

@ -1,12 +1,22 @@
package main
import (
"html/template"
"io/ioutil"
"log"
"os"
"strings"
)
// parseIndex parses the index template and returns a template struct.
func (s server) parseIndex() {
tmpl, err := template.ParseFiles(*flagIndex)
if err != nil {
log.Fatal(err)
}
s.index = tmpl
}
// List parses the list of members, appends the data to a slice of type list,
// then returns the slice
func (s server) parseList() {
@ -26,32 +36,35 @@ func link(l string) string {
return "<a href='https://" + l + "'>" + l + "</a>"
}
// Modify returns true if the index and ring list have been modified since last
// read
func (s server) modify() bool {
members, err := os.Stat(*flagMembers)
if err != nil {
log.Fatalln(err)
// Modify takes arguments "index" or "ring" and returns true if either have been
// modified since last read
func (s server) modify(a string) bool {
if a == "ring" {
members, err := os.Stat(*flagMembers)
if err != nil {
log.Fatalln(err)
}
curRingModTime := members.ModTime().Unix()
if s.ringModTime == 0 {
s.ringModTime = curRingModTime
} else if s.ringModTime < curRingModTime {
return true
}
return false
} else if a == "index" {
index, err := os.Stat(*flagIndex)
if err != nil {
log.Fatalln(err)
}
curIndexModTime := index.ModTime().Unix()
if s.indexModTime == 0 {
s.indexModTime = curIndexModTime
} else if s.indexModTime < curIndexModTime {
return true
}
return false
} else {
log.Fatalln("Please call modify() with argument of either \"index\" or \"ring\"")
}
index, err := os.Stat(*flagIndex)
if err != nil {
log.Fatalln(err)
}
curRingModTime := members.ModTime().Unix()
curIndexModTime := index.ModTime().Unix()
if s.ringModTime == 0 {
s.ringModTime = curRingModTime
} else if s.ringModTime < curRingModTime {
return true
}
if s.indexModTime == 0 {
s.indexModTime = curIndexModTime
} else if s.indexModTime < curIndexModTime {
return true
}
return false
return true
}

View file

@ -2,7 +2,6 @@ package main
import (
"html/template"
"log"
"math/rand"
"net/http"
"time"
@ -10,8 +9,10 @@ import (
// Serves the webpage created by createRoot()
func (s server) root(writer http.ResponseWriter, request *http.Request) {
if s.modify() {
if s.modify("ring") {
s.parseList()
} else if s.modify("index") {
s.parseIndex()
}
var table string
for _, member := range s.ring {
@ -20,19 +21,13 @@ func (s server) root(writer http.ResponseWriter, request *http.Request) {
table = table + " <td>" + link(member.url) + "</td>\n"
table = table + " </tr>\n"
}
tmpl, err := template.ParseFiles(*flagIndex)
if err != nil {
log.Fatal(err)
}
tmpl.Execute(writer, template.HTML(table))
s.index.Execute(writer, template.HTML(table))
}
// Redirects the visitor to the next member, wrapping around the list if the
// next would be out-of-bounds
func (s server) next(writer http.ResponseWriter, request *http.Request) {
if s.modify() {
if s.modify("ring") {
s.parseList()
}
host := request.URL.Query().Get("host")
@ -59,7 +54,7 @@ func (s server) next(writer http.ResponseWriter, request *http.Request) {
// Redirects the visitor to the previous member, wrapping around the list if the
// next would be out-of-bounds
func (s server) previous(writer http.ResponseWriter, request *http.Request) {
if s.modify() {
if s.modify("ring") {
s.parseList()
}
host := request.URL.Query().Get("host")
@ -83,7 +78,7 @@ func (s server) previous(writer http.ResponseWriter, request *http.Request) {
// Redirects the visitor to a random member
func (s server) random(writer http.ResponseWriter, request *http.Request) {
if s.modify() {
if s.modify("ring") {
s.parseList()
}
rand.Seed(time.Now().Unix())

View file

@ -3,6 +3,7 @@ package main
import (
_ "embed"
"fmt"
"html/template"
"log"
"net/http"
@ -16,7 +17,7 @@ type ring struct {
type server struct {
ring []ring
index string
index *template.Template
ringModTime int64
indexModTime int64
}
@ -53,4 +54,5 @@ func (s server) init() {
fmt.Println("Looking for members in", *flagMembers)
s.parseList()
fmt.Println("Building homepage with", *flagIndex)
s.parseIndex()
}