[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