From 2e1dabdc13930d0fbc70da4fe2332ccc5d05eae1 Mon Sep 17 00:00:00 2001 From: Laptop Date: Sat, 26 Oct 2024 21:34:59 +0300 Subject: [PATCH] also retry requests if connection closed; add /_/info endpoint --- lib/cfg/init.go | 3 +++ lib/sc/init.go | 2 +- main.go | 22 ++++++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/cfg/init.go b/lib/cfg/init.go index f656fbc..18d667a 100644 --- a/lib/cfg/init.go +++ b/lib/cfg/init.go @@ -18,6 +18,9 @@ const ImageCacheControl = "max-age=600; public" // 10 minutes by default, only u // proxy streams (hls playlist files and track parts) const ProxyStreams = false +// enable /_/info endpoint (shows if some settings are enabled/disabled) +const InstanceInfo = true + // time-to-live for clientid cache // larger number will improve performance (no need to recheck everytime) but might make soundcloak briefly unusable for a larger amount of time if the client id is invalidated const ClientIDTTL = 30 * time.Minute diff --git a/lib/sc/init.go b/lib/sc/init.go index 7e3e6f9..d33d560 100644 --- a/lib/sc/init.go +++ b/lib/sc/init.go @@ -123,7 +123,7 @@ func DoWithRetry(httpc *fasthttp.HostClient, req *fasthttp.Request, resp *fastht return nil } - if !os.IsTimeout(err) && err != fasthttp.ErrTimeout { + if !os.IsTimeout(err) && err != fasthttp.ErrTimeout && err != fasthttp.ErrConnectionClosed { return } } diff --git a/main.go b/main.go index 086d50b..fbaa312 100644 --- a/main.go +++ b/main.go @@ -142,6 +142,28 @@ func main() { proxystreams.Load(app) } + if cfg.InstanceInfo { + type info struct { + ProxyImages bool + ProxyStreams bool + FullyPreloadTrack bool + } + + data, err := cfg.JSON.Marshal(info{ + ProxyImages: cfg.ProxyImages, + ProxyStreams: cfg.ProxyStreams, + FullyPreloadTrack: cfg.FullyPreloadTrack, + }) + if err != nil { + log.Println("Failed to marshal instance info:", err) + } + + app.Get("/_/info", func(c *fiber.Ctx) error { + c.Set("Content-Type", "application/json") + return c.Send(data) + }) + } + app.Get("/:user/sets", func(c *fiber.Ctx) error { user, err := sc.GetUser(c.Params("user")) if err != nil {