Return to pass-by-value instead of globals, to make Sean happy

This commit is contained in:
Seednode 2023-09-26 15:50:16 -05:00
parent 5e1a957541
commit 88a8aff135
4 changed files with 40 additions and 13 deletions

View File

@ -6,9 +6,11 @@ package cmd
import ( import (
"encoding/gob" "encoding/gob"
"fmt"
"net/http" "net/http"
"os" "os"
"sync" "sync"
"time"
"github.com/julienschmidt/httprouter" "github.com/julienschmidt/httprouter"
"github.com/klauspost/compress/zstd" "github.com/klauspost/compress/zstd"
@ -79,6 +81,8 @@ func (cache *fileCache) isEmpty() bool {
} }
func (cache *fileCache) Export(path string) error { func (cache *fileCache) Export(path string) error {
startTime := time.Now()
file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil { if err != nil {
return err return err
@ -95,12 +99,23 @@ func (cache *fileCache) Export(path string) error {
cache.mutex.RLock() cache.mutex.RLock()
enc.Encode(&cache.list) enc.Encode(&cache.list)
length := len(cache.list)
cache.mutex.RUnlock() cache.mutex.RUnlock()
if Verbose {
fmt.Printf("%s | CACHE: Exported %d entries in %s\n",
time.Now().Format(logDate),
length,
time.Since(startTime),
)
}
return nil return nil
} }
func (cache *fileCache) Import(path string) error { func (cache *fileCache) Import(path string) error {
startTime := time.Now()
file, err := os.OpenFile(path, os.O_RDONLY, 0600) file, err := os.OpenFile(path, os.O_RDONLY, 0600)
if err != nil { if err != nil {
return err return err
@ -116,15 +131,22 @@ func (cache *fileCache) Import(path string) error {
dec := gob.NewDecoder(z) dec := gob.NewDecoder(z)
cache.mutex.Lock() cache.mutex.Lock()
err = dec.Decode(&cache.list) err = dec.Decode(&cache.list)
length := len(cache.list)
cache.mutex.Unlock() cache.mutex.Unlock()
if err != nil { if err != nil {
return err return err
} }
if Verbose {
fmt.Printf("%s | CACHE: Imported %d entries in %s\n",
time.Now().Format(logDate),
length,
time.Since(startTime),
)
}
return nil return nil
} }
@ -146,6 +168,12 @@ func serveCacheClear(args []string, cache *fileCache, formats *types.Types, erro
} }
func registerCacheHandlers(mux *httprouter.Router, args []string, cache *fileCache, formats *types.Types, errorChannel chan<- error) error { func registerCacheHandlers(mux *httprouter.Router, args []string, cache *fileCache, formats *types.Types, errorChannel chan<- error) error {
register(mux, Prefix+"/clear_cache", serveCacheClear(args, cache, formats, errorChannel))
return nil
}
func importCache(args []string, cache *fileCache, formats *types.Types) error {
skipIndex := false skipIndex := false
if CacheFile != "" { if CacheFile != "" {
@ -156,15 +184,11 @@ func registerCacheHandlers(mux *httprouter.Router, args []string, cache *fileCac
} }
if !skipIndex { if !skipIndex {
list, err := fileList(args, &filters{}, "", &fileCache{}, formats) _, err := fileList(args, &filters{}, "", cache, formats)
if err != nil { if err != nil {
return err return err
} }
cache.set(list)
} }
register(mux, Prefix+"/clear_cache", serveCacheClear(args, cache, formats, errorChannel))
return nil return nil
} }

View File

@ -27,14 +27,12 @@ const (
<meta name="theme-color" content="#ffffff">` <meta name="theme-color" content="#ffffff">`
) )
func serveFavicons(errorChannel chan<- error) httprouter.Handle { func serveFavicons() httprouter.Handle {
return func(w http.ResponseWriter, r *http.Request, p httprouter.Params) { return func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
fname := strings.TrimPrefix(r.URL.Path, "/") fname := strings.TrimPrefix(r.URL.Path, "/")
data, err := favicons.ReadFile(fname) data, err := favicons.ReadFile(fname)
if err != nil { if err != nil {
errorChannel <- err
return return
} }

View File

@ -12,7 +12,7 @@ import (
) )
const ( const (
ReleaseVersion string = "0.94.0" ReleaseVersion string = "0.96.0"
) )
var ( var (

View File

@ -445,6 +445,11 @@ func ServePage(args []string) error {
list: []string{}, list: []string{},
} }
err = importCache(paths, cache, formats)
if err != nil {
return err
}
regexes := &regexes{ regexes := &regexes{
filename: regexp.MustCompile(`(.+)([0-9]{3})(\..+)`), filename: regexp.MustCompile(`(.+)([0-9]{3})(\..+)`),
alphanumeric: regexp.MustCompile(`^[A-z0-9]*$`), alphanumeric: regexp.MustCompile(`^[A-z0-9]*$`),
@ -485,9 +490,9 @@ func ServePage(args []string) error {
register(mux, "/", redirectRoot()) register(mux, "/", redirectRoot())
} }
register(mux, Prefix+"/favicons/*favicon", serveFavicons(errorChannel)) register(mux, Prefix+"/favicons/*favicon", serveFavicons())
register(mux, Prefix+"/favicon.ico", serveFavicons(errorChannel)) register(mux, Prefix+"/favicon.ico", serveFavicons())
register(mux, Prefix+mediaPrefix+"/*media", serveMedia(paths, regexes, cache, formats, errorChannel)) register(mux, Prefix+mediaPrefix+"/*media", serveMedia(paths, regexes, cache, formats, errorChannel))