diff --git a/docs/docs/development/SC/api.md b/docs/docs/development/SC/api.md index 6c14e3fd..04957586 100644 --- a/docs/docs/development/SC/api.md +++ b/docs/docs/development/SC/api.md @@ -49,7 +49,13 @@ Current map background image * Base url with no parameters returns map image file as-is without any processing. * setting `width` or `height` query parameters ensures that at least one of these will be matched while preserving original image aspect ratio. [check it out](http://localhost:20727/backgroundImage?width=500&height=500) - * in addition, setting `crop=1` disregards image aspect ratio and returns cropped image with specified dimensions, resizing it beforehand if necessary. [check it out](http://localhost:20727/backgroundImage?width=500&height=500&crop=1) + * in addition, setting `crop=true` disregards image aspect ratio and returns cropped image with specified dimensions, resizing it beforehand if necessary. [check it out](http://localhost:20727/backgroundImage?width=500&height=500&crop=true) +* Set `cache=true` and SC will set the [**Cache-Control**](https://developer.mozilla.org/docs/Web/HTTP/Headers/Cache-Control) response header to instruct the browser to cache background images. When images are repeatedly loaded, it will save a lot of loading time. + ::: tip cache usage + When using caching, it is necessary to add some query parameters to distinguish requests. If no other parameters are added, it will result in your browser always reusing the background image of the first loaded map. For example, you can use Id of the current map to create unique urls: + + `/backgroundImage?cache=true&mapId=123456` + ::: ### [`Songs`](http://localhost:20727/Songs) diff --git a/plugins/WebSocketDataSender/WebSocketDataGetter.cs b/plugins/WebSocketDataSender/WebSocketDataGetter.cs index b17f3386..a3a11095 100644 --- a/plugins/WebSocketDataSender/WebSocketDataGetter.cs +++ b/plugins/WebSocketDataSender/WebSocketDataGetter.cs @@ -165,6 +165,10 @@ private async Task SendCurrentBeatmapImage(IHttpContext context) if (!File.Exists(location)) return; + bool.TryParse(context.Request.QueryString.Get("cache"), out var enableCache); + if (enableCache) + context.Response.Headers.Add("Cache-Control", "public, max-age=7200"); + await using var fs = new FileStream(location, FileMode.Open, FileAccess.Read); if (!(context.Request.QueryString.ContainsKey("width") || context.Request.QueryString.ContainsKey("height")))