go-webring/funcs.go
2021-12-31 12:49:26 -05:00

75 lines
1.8 KiB
Go

// SPDX-FileCopyrightText: 2021 Amolith <amolith@secluded.site>
//
// SPDX-License-Identifier: BSD-2-Clause
package main
import (
"html/template"
"io/ioutil"
"log"
"os"
"strings"
)
// Link returns an HTML, HTTPS link of a given URI
func link(l string) string {
return "<a href='https://" + l + "'>" + l + "</a>"
}
// parseIndex parses the index template and returns a template struct.
func (m *model) parseIndex() {
tmpl, err := template.ParseFiles(*flagIndex)
if err != nil {
log.Fatal(err)
}
m.index = tmpl
}
// List parses the list of members, appends the data to a slice of type list,
// then returns the slice
func (m *model) parseList() {
file, err := ioutil.ReadFile(*flagMembers)
if err != nil {
log.Fatal("Error while loading list of webring members: ", err)
}
lines := strings.Split(string(file), "\n")
for _, line := range lines[:len(lines)-1] {
fields := strings.Fields(line)
m.ring = append(m.ring, ring{handle: fields[0], url: fields[1]})
}
}
// Modify takes arguments "index" or "ring" and returns true if either have been
// modified since last read
func (m *model) modify(a string) bool {
if a == "ring" {
members, err := os.Stat(*flagMembers)
if err != nil {
log.Fatalln(err)
}
curRingModTime := members.ModTime().Unix()
if m.ringModTime == 0 {
m.ringModTime = curRingModTime
} else if m.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 m.indexModTime == 0 {
m.indexModTime = curIndexModTime
} else if m.indexModTime < curIndexModTime {
return true
}
return false
} else {
log.Fatalln("Please call modify() with argument of either \"index\" or \"ring\"")
}
return true
}