[Android] Remote access: allow picking a subtitle file in the client

Nicolas Pomepuy git at videolan.org
Wed Sep 9 06:43:36 UTC 2026


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Mon Aug 31 14:38:52 2026 +0200| [7b97bc77fc9b983581bebab02fb1535eee1b027e] | committer: Duncan McNamara

Remote access: allow picking a subtitle file in the client

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

 .../org/videolan/vlc/remoteaccessserver/TranslationMapping.kt |  1 +
 .../remoteaccessserver/websockets/RemoteAccessWebSockets.kt   | 11 +++++++++++
 .../vlc/remoteaccessserver/websockets/WSIncomingMessage.kt    |  3 ++-
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/TranslationMapping.kt b/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/TranslationMapping.kt
index d1f0085d87..714288bb58 100644
--- a/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/TranslationMapping.kt
+++ b/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/TranslationMapping.kt
@@ -175,5 +175,6 @@ object TranslationMapping {
         BROWSER_AUDIO_UNSUPPORTED_FORMAT(R.string.ra_browser_audio_unsupported_format),
         AUDIO_TRACK(R.string.track_audio),
         SUBTITLE_TRACK(R.string.track_text),
+        PICK_SUBTITLE(R.string.pick_file),
     }
 }
\ No newline at end of file
diff --git a/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/websockets/RemoteAccessWebSockets.kt b/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/websockets/RemoteAccessWebSockets.kt
index 30f47d763e..199eba3d6a 100644
--- a/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/websockets/RemoteAccessWebSockets.kt
+++ b/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/websockets/RemoteAccessWebSockets.kt
@@ -30,6 +30,7 @@ import android.media.AudioManager
 import android.support.v4.media.session.PlaybackStateCompat
 import android.util.Log
 import androidx.annotation.MainThread
+import androidx.core.net.toUri
 import com.squareup.moshi.Moshi
 import io.ktor.server.routing.Routing
 import io.ktor.server.websocket.WebSocketServerSession
@@ -41,6 +42,7 @@ import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.channels.Channel
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
+import org.videolan.libvlc.interfaces.IMedia
 import org.videolan.medialibrary.Tools
 import org.videolan.tools.AppScope
 import org.videolan.tools.REMOTE_ACCESS_PLAYBACK_CONTROL
@@ -52,6 +54,8 @@ import org.videolan.vlc.remoteaccessserver.RemoteAccessServer
 import org.videolan.vlc.remoteaccessserver.convertToJson
 import org.videolan.vlc.remoteaccessserver.ssl.SecretGenerator
 import org.videolan.vlc.remoteaccessserver.websockets.IncomingMessageType.*
+import org.videolan.vlc.repository.SlaveRepository
+import org.videolan.vlc.util.FileUtils
 import java.util.Calendar
 import java.util.Collections
 import java.util.concurrent.ConcurrentHashMap
@@ -250,6 +254,13 @@ object RemoteAccessWebSockets {
             }
             SET_AUDIO_TRACK -> incomingMessage.stringValue?.let { trackId -> service?.setAudioTrack(trackId) }
             SET_SUBTITLE_TRACK -> incomingMessage.stringValue?.let { trackId -> service?.setSpuTrack(trackId) }
+            PICK_SUBTITLE -> incomingMessage.stringValue?.let { subtitleMrl ->
+                val subtitleUri = subtitleMrl.toUri()
+                service?.addSubtitleTrack(FileUtils.getUri(subtitleUri) ?: subtitleUri, true)
+                service?.currentMediaWrapper?.let {
+                    SlaveRepository.getInstance(context).saveSlave(it.location, IMedia.Slave.Type.Subtitle, 2, subtitleMrl)
+                }
+            }
         }
         return true
     }
diff --git a/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/websockets/WSIncomingMessage.kt b/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/websockets/WSIncomingMessage.kt
index 48157db330..a78d64fba4 100644
--- a/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/websockets/WSIncomingMessage.kt
+++ b/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/websockets/WSIncomingMessage.kt
@@ -61,7 +61,8 @@ enum class IncomingMessageType(private val type: String, val controlRequired: Bo
     REMOTE("remote" ),
     SET_BROWSER_AUDIO("set-browser-audio"),
     SET_AUDIO_TRACK("set-audio-track"),
-    SET_SUBTITLE_TRACK("set-subtitle-track");
+    SET_SUBTITLE_TRACK("set-subtitle-track"),
+    PICK_SUBTITLE("pick-subtitle");
 
     override fun toString(): String = type
 



More information about the Android mailing list