[Android] Add module for cache control

Robert Stone git at videolan.org
Thu Dec 5 09:16:49 UTC 2024


vlc-android | branch: master | Robert Stone <rhstone at gmail.com> | Fri Nov  8 11:54:21 2024 -0800| [ac1006298654fe529cc385c124700315675dcc79] | committer: Nicolas Pomepuy

Add module for cache control

> https://code.videolan.org/videolan/vlc-android/commit/ac1006298654fe529cc385c124700315675dcc79
---

 application/webserver/build.gradle                 |  1 +
 .../videolan/vlc/webserver/RemoteAccessServer.kt   | 27 ++++++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/application/webserver/build.gradle b/application/webserver/build.gradle
index 50f328ebdc..bf3bb105c6 100644
--- a/application/webserver/build.gradle
+++ b/application/webserver/build.gradle
@@ -86,6 +86,7 @@ dependencies {
     implementation "io.ktor:ktor-server-netty:$rootProject.ext.ktorVersion"
     implementation "io.ktor:ktor-gson:1.6.8"
     implementation "io.ktor:ktor-server-websockets:$rootProject.ext.ktorVersion"
+    implementation "io.ktor:ktor-server-caching-headers:$rootProject.ext.ktorVersion"
     implementation "io.ktor:ktor-server-cors:$rootProject.ext.ktorVersion"
     implementation("io.ktor:ktor-server-auth:$rootProject.ext.ktorVersion")
     implementation("io.ktor:ktor-server-partial-content:$rootProject.ext.ktorVersion")
diff --git a/application/webserver/src/main/java/org/videolan/vlc/webserver/RemoteAccessServer.kt b/application/webserver/src/main/java/org/videolan/vlc/webserver/RemoteAccessServer.kt
index 93bb004dd0..dfe7a6d6b3 100644
--- a/application/webserver/src/main/java/org/videolan/vlc/webserver/RemoteAccessServer.kt
+++ b/application/webserver/src/main/java/org/videolan/vlc/webserver/RemoteAccessServer.kt
@@ -32,9 +32,12 @@ import android.net.Uri
 import android.util.Log
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
+import io.ktor.http.CacheControl
+import io.ktor.http.ContentType
 import io.ktor.http.HttpHeaders
 import io.ktor.http.HttpMethod
 import io.ktor.http.HttpStatusCode
+import io.ktor.http.content.CachingOptions
 import io.ktor.server.application.ApplicationCall
 import io.ktor.server.application.ApplicationStarted
 import io.ktor.server.application.ApplicationStopped
@@ -48,6 +51,7 @@ import io.ktor.server.engine.embeddedServer
 import io.ktor.server.engine.sslConnector
 import io.ktor.server.netty.Netty
 import io.ktor.server.netty.NettyApplicationEngine
+import io.ktor.server.plugins.cachingheaders.CachingHeaders
 import io.ktor.server.plugins.callloging.CallLogging
 import io.ktor.server.plugins.cors.routing.CORS
 import io.ktor.server.plugins.origin
@@ -478,6 +482,29 @@ class RemoteAccessServer(private val context: Context) : PlaybackService.Callbac
                     maxFrameSize = Long.MAX_VALUE
                     masking = false
                 }
+                install(CachingHeaders) {
+                    options { _, content ->
+                        when (content.contentType?.withoutParameters()) {
+                            ContentType.Text.Plain,
+                            ContentType.Application.Json -> {
+                                CachingOptions(CacheControl.NoStore(CacheControl.Visibility.Private))
+                            }
+                            ContentType.Image.GIF,
+                            ContentType.Image.PNG,
+                            ContentType.Image.SVG,
+                            ContentType.Image.JPEG,
+                            ContentType.Image.XIcon,
+                            ContentType.Text.CSS,
+                            ContentType.Text.Xml,
+                            ContentType.Text.Html,
+                            ContentType.Text.JavaScript,
+                            ContentType.Application.JavaScript -> {
+                                CachingOptions(CacheControl.MaxAge(maxAgeSeconds = 86400, visibility = CacheControl.Visibility.Private))
+                            }
+                            else -> null
+                        }
+                    }
+                }
                 install(CORS) {
                     allowMethod(HttpMethod.Options)
                     allowMethod(HttpMethod.Post)



More information about the Android mailing list