From 9633239b69afce856b46e66021e0e479cf8772ae Mon Sep 17 00:00:00 2001 From: Seednode Date: Mon, 9 Oct 2023 08:17:32 -0500 Subject: [PATCH] Spacebar now also resumes automatic refreshing --- README.md | 4 +++- cmd/refresh.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ cmd/root.go | 2 +- cmd/uri.go | 16 ---------------- cmd/web.go | 4 +--- 5 files changed, 51 insertions(+), 21 deletions(-) create mode 100644 cmd/refresh.go diff --git a/README.md b/README.md index 114b1d4..1e0f492 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,9 @@ The remaining four endpoints—`/available_extensions`, `/enabled_extensions`, ` ## Refresh If the `--refresh` flag is passed and a positive-value `refresh=` query parameter is provided, the page will reload after that interval. -This can be used to generate a sort of slideshow of files. Pressing Space will pause automatic refreshing until the page is manually refreshed or a new page is loaded. +This can be used to generate a sort of slideshow of files in any browser with Javascript support. + +Pressing Spacebar will pause automatic refreshing until Spacebar is pressed again, the page is manually refreshed, or a new page is loaded. Minimum accepted value is 500ms, as anything lower seems to cause inconsistent behavior. This might be changed in a future release. diff --git a/cmd/refresh.go b/cmd/refresh.go new file mode 100644 index 0000000..a27af58 --- /dev/null +++ b/cmd/refresh.go @@ -0,0 +1,46 @@ +/* +Copyright © 2023 Seednode +*/ + +package cmd + +import ( + "fmt" + "net/http" + "strings" + "time" +) + +func refreshInterval(r *http.Request) (int64, string) { + interval := r.URL.Query().Get("refresh") + + duration, err := time.ParseDuration(interval) + + switch { + case err != nil || duration == 0 || !Refresh: + return 0, "0ms" + case duration < 500*time.Millisecond: + return 500, "500ms" + default: + return duration.Milliseconds(), interval + } +} + +func refreshFunction(rootUrl string, refreshTimer int64) string { + var htmlBody strings.Builder + + htmlBody.WriteString(fmt.Sprintf("`) + + return htmlBody.String() +} diff --git a/cmd/root.go b/cmd/root.go index 1ee9200..8f5393c 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -12,7 +12,7 @@ import ( ) const ( - ReleaseVersion string = "2.8.0" + ReleaseVersion string = "2.8.1" ) var ( diff --git a/cmd/uri.go b/cmd/uri.go index 3c2b6a3..fca0bca 100644 --- a/cmd/uri.go +++ b/cmd/uri.go @@ -10,24 +10,8 @@ import ( "net/url" "runtime" "strings" - "time" ) -func refreshInterval(r *http.Request) (int64, string) { - interval := r.URL.Query().Get("refresh") - - duration, err := time.ParseDuration(interval) - - switch { - case err != nil || duration == 0 || !Refresh: - return 0, "0ms" - case duration < 500*time.Millisecond: - return 500, "500ms" - default: - return duration.Milliseconds(), interval - } -} - func sortOrder(r *http.Request) string { sortOrder := r.URL.Query().Get("sort") if sortOrder == "asc" || sortOrder == "desc" { diff --git a/cmd/web.go b/cmd/web.go index 4e2b6e7..bb27901 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -325,9 +325,7 @@ func serveMedia(paths []string, regexes *regexes, index *fileIndex, formats type htmlBody.WriteString(title) htmlBody.WriteString(``) if refreshInterval != "0ms" { - htmlBody.WriteString(fmt.Sprintf("", - rootUrl, - refreshTimer)) + htmlBody.WriteString(refreshFunction(rootUrl, refreshTimer)) } body, err := format.Body(rootUrl, fileUri, path, fileName, Prefix, mimeType)