Granularise modify() so it won't check/parse both
This commit is contained in:
parent
a8c8ad221d
commit
d80c703eee
67
funcs.go
67
funcs.go
|
@ -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
|
||||
}
|
||||
|
|
19
handlers.go
19
handlers.go
|
@ -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())
|
||||
|
|
4
main.go
4
main.go
|
@ -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()
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue