diff --git a/app/src/main/assets/native-10.7/chrome.cast.js b/app/src/main/assets/native-10.7/chrome.cast.js index 3817941d..57b04c3d 100644 --- a/app/src/main/assets/native-10.7/chrome.cast.js +++ b/app/src/main/assets/native-10.7/chrome.cast.js @@ -1378,6 +1378,7 @@ execute('setup', function (err, args) { }); window.chrome.cast = chrome.cast; +console.info('Applied custom cast interface to window'); /** * Updates the current session with the incoming javaSession @@ -1404,6 +1405,7 @@ function execute (action) { throw new Error('Not initialized. Must call chrome.cast.initialize first.'); } + console.debug('execCast', action); window.NativeShell.execCast(action, args, callback); } @@ -1429,6 +1431,7 @@ function handleError (err, callback) { } var error = new chrome.cast.Error(err, desc, {}); + console.error('Encountered cast error', error); if (callback) { callback(error); } diff --git a/app/src/main/assets/native-10.7/nativeshell.js b/app/src/main/assets/native-10.7/nativeshell.js index 88854b24..412f2364 100644 --- a/app/src/main/assets/native-10.7/nativeshell.js +++ b/app/src/main/assets/native-10.7/nativeshell.js @@ -74,13 +74,13 @@ window.NativeShell = { return plugins; }, - execCast(action, args, callback) { + async execCast(action, args, callback) { this.castCallbacks = this.castCallbacks || {}; this.castCallbacks[action] = callback; window.NativeInterface.execCast(action, JSON.stringify(args)); }, - castCallback(action, keep, err, result) { + async castCallback(action, keep, err, result) { const callbacks = this.castCallbacks || {}; const callback = callbacks[action]; callback && callback(err || null, result); diff --git a/app/src/main/java/org/jellyfin/mobile/fragment/WebViewFragment.kt b/app/src/main/java/org/jellyfin/mobile/fragment/WebViewFragment.kt index 9dc537b4..ac5827c0 100644 --- a/app/src/main/java/org/jellyfin/mobile/fragment/WebViewFragment.kt +++ b/app/src/main/java/org/jellyfin/mobile/fragment/WebViewFragment.kt @@ -146,6 +146,10 @@ class WebViewFragment : Fragment() { null // continue loading normally } path.contains("native") -> webView.context.loadAsset("native-${assetsVersion}/${url.lastPathSegment}") + path.endsWith(Constants.CAST_SDK_PATH) -> { + // Load the chrome.cast.js library instead + webView.context.loadAsset("native-${assetsVersion}/chrome.cast.js") + } path.endsWith(Constants.SELECT_SERVER_PATH) -> { runOnUiThread { onSelectServer() } emptyResponse diff --git a/app/src/main/java/org/jellyfin/mobile/utils/Constants.kt b/app/src/main/java/org/jellyfin/mobile/utils/Constants.kt index 99a23ae7..093c3708 100644 --- a/app/src/main/java/org/jellyfin/mobile/utils/Constants.kt +++ b/app/src/main/java/org/jellyfin/mobile/utils/Constants.kt @@ -11,6 +11,7 @@ object Constants { // Webapp constants const val APPLOADER_PATH = "scripts/apploader.js" // 10.6.4 <= const val ANY_BUNDLE_PATH = ".bundle.js" // 10.7 >= + const val CAST_SDK_PATH = "cast_sender.js" const val SELECT_SERVER_PATH = "selectserver.html" const val SESSION_CAPABILITIES_PATH = "sessions/capabilities/full" diff --git a/app/src/main/java/org/jellyfin/mobile/utils/WebAppUtils.kt b/app/src/main/java/org/jellyfin/mobile/utils/WebAppUtils.kt index b48ab462..aefd9730 100644 --- a/app/src/main/java/org/jellyfin/mobile/utils/WebAppUtils.kt +++ b/app/src/main/java/org/jellyfin/mobile/utils/WebAppUtils.kt @@ -13,7 +13,6 @@ const val JS_INJECTION_CODE = """ var scripts = [ '/native/nativeshell.js', '/native/EventEmitter.js', - '/native/chrome.cast.js', ]; scripts.forEach(function(src) { var scriptElement = document.createElement('script');