From dc3eda40479b877265b3dc926959c4efcfa9a17a Mon Sep 17 00:00:00 2001 From: Seednode Date: Tue, 30 Jan 2024 06:25:14 -0600 Subject: [PATCH] Move index rebuild timer function into index.go --- cmd/index.go | 32 ++++++++++++++++++++++++++++ cmd/root.go | 2 +- cmd/web.go | 60 +++++++++++++--------------------------------------- 3 files changed, 48 insertions(+), 46 deletions(-) diff --git a/cmd/index.go b/cmd/index.go index 1d524ca..b800ead 100644 --- a/cmd/index.go +++ b/cmd/index.go @@ -188,6 +188,38 @@ func (index *fileIndex) Import(path string, errorChannel chan<- error) { } } +func registerIndexInterval(args []string, index *fileIndex, formats types.Types, encoder *zstd.Encoder, quit <-chan struct{}, errorChannel chan<- error) { + interval, err := time.ParseDuration(IndexInterval) + if err != nil { + errorChannel <- err + + return + } + ticker := time.NewTicker(interval) + + go func() { + for { + select { + case <-ticker.C: + startTime := time.Now() + + rebuildIndex(args, index, formats, encoder, errorChannel) + + if Verbose { + fmt.Printf("%s | INDEX: Automatic rebuild took %s\n", + startTime.Format(logDate), + time.Since(startTime).Round(time.Microsecond), + ) + } + case <-quit: + ticker.Stop() + + return + } + } + }() +} + func rebuildIndex(args []string, index *fileIndex, formats types.Types, encoder *zstd.Encoder, errorChannel chan<- error) { index.clear() diff --git a/cmd/root.go b/cmd/root.go index 05a3836..b50fb35 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -17,7 +17,7 @@ import ( const ( AllowedCharacters string = `^[A-z0-9.\-_]+$` - ReleaseVersion string = "6.4.2" + ReleaseVersion string = "6.4.3" ) var ( diff --git a/cmd/web.go b/cmd/web.go index aadcca9..53f5f3a 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -52,21 +52,6 @@ func newPage(title, body string) string { return htmlBody.String() } -func noFiles(w http.ResponseWriter, r *http.Request) { - startTime := time.Now() - - w.Header().Set("Content-Type", "text/plain;charset=UTF-8") - - w.Write([]byte("No files found in the specified path(s).\n")) - - if Verbose { - fmt.Printf("%s | SERVE: Empty path notification to %s\n", - startTime.Format(logDate), - r.RemoteAddr, - ) - } -} - func serveStaticFile(paths []string, index *fileIndex, errorChannel chan<- error) httprouter.Handle { return func(w http.ResponseWriter, r *http.Request, p httprouter.Params) { prefix := Prefix + sourcePrefix @@ -221,7 +206,18 @@ func serveRoot(paths []string, index *fileIndex, filename *regexp.Regexp, format path, err = newFile(list, sortOrder, filename, formats) switch { case path == "": - noFiles(w, r) + startTime := time.Now() + + w.Header().Set("Content-Type", "text/plain;charset=UTF-8") + + w.Write([]byte("No files found in the specified path(s).\n")) + + if Verbose { + fmt.Printf("%s | SERVE: Empty path notification to %s\n", + startTime.Format(logDate), + r.RemoteAddr, + ) + } return case err != nil && err == ErrNoMediaFound: @@ -458,9 +454,10 @@ func redirectRoot() httprouter.Handle { } func ServePage(args []string) error { + var err error + timeZone := os.Getenv("TZ") if timeZone != "" { - var err error time.Local, err = time.LoadLocation(timeZone) if err != nil { return err @@ -593,34 +590,7 @@ func ServePage(args []string) error { importIndex(paths, index, formats, encoder, errorChannel) if IndexInterval != "" { - interval, err := time.ParseDuration(IndexInterval) - if err != nil { - return err - } - - ticker := time.NewTicker(interval) - - go func() { - for { - select { - case <-ticker.C: - startTime := time.Now() - - rebuildIndex(args, index, formats, encoder, errorChannel) - - if Verbose { - fmt.Printf("%s | INDEX: Automatic rebuild took %s\n", - startTime.Format(logDate), - time.Since(startTime).Round(time.Microsecond), - ) - } - case <-quit: - ticker.Stop() - - return - } - } - }() + registerIndexInterval(args, index, formats, encoder, quit, errorChannel) } }