From 3ac043740e1b11ec7c6f0f9a791f5f38b0f3c8e4 Mon Sep 17 00:00:00 2001 From: Kelvin Date: Wed, 27 Dec 2023 15:21:43 +0100 Subject: [PATCH] Fix RequestModifier not being applied, and add default option to add pre-existing headers --- app/src/main/assets/scripts/source.js | 8 ++++++ .../media/models/modifier/IModifierOptions.kt | 1 + .../media/platforms/js/models/JSRequest.kt | 28 +++++++++++++++---- .../platforms/js/models/sources/JSSource.kt | 2 +- 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/app/src/main/assets/scripts/source.js b/app/src/main/assets/scripts/source.js index aef3ed6f..f254370e 100644 --- a/app/src/main/assets/scripts/source.js +++ b/app/src/main/assets/scripts/source.js @@ -326,6 +326,8 @@ class VideoUrlSource { this.bitrate = obj.bitrate ?? 0; this.duration = obj.duration ?? 0; this.url = obj.url; + if(obj.requestModifier) + this.requestModifier = obj.requestModifier; } } class VideoUrlRangeSource extends VideoUrlSource { @@ -351,6 +353,8 @@ class AudioUrlSource { this.duration = obj.duration ?? 0; this.url = obj.url; this.language = obj.language ?? Language.UNKNOWN; + if(obj.requestModifier) + this.requestModifier = obj.requestModifier; } } class AudioUrlRangeSource extends AudioUrlSource { @@ -376,6 +380,8 @@ class HLSSource { this.priority = obj.priority ?? false; if(obj.language) this.language = obj.language; + if(obj.requestModifier) + this.requestModifier = obj.requestModifier; } } class DashSource { @@ -387,6 +393,8 @@ class DashSource { this.url = obj.url; if(obj.language) this.language = obj.language; + if(obj.requestModifier) + this.requestModifier = obj.requestModifier; } } diff --git a/app/src/main/java/com/futo/platformplayer/api/media/models/modifier/IModifierOptions.kt b/app/src/main/java/com/futo/platformplayer/api/media/models/modifier/IModifierOptions.kt index 1a7e4ce6..232c8687 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/models/modifier/IModifierOptions.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/models/modifier/IModifierOptions.kt @@ -3,4 +3,5 @@ package com.futo.platformplayer.api.media.models.modifier interface IModifierOptions { val applyAuthClient: String?; val applyCookieClient: String?; + val applyOtherHeaders: Boolean; } \ No newline at end of file diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequest.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequest.kt index 1a9ef32b..bc3b6bfc 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequest.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequest.kt @@ -23,21 +23,31 @@ class JSRequest : IRequest { _v8Options = options; initialize(plugin, originalUrl, originalHeaders); } - constructor(plugin: JSClient, obj: V8ValueObject, originalUrl: String?, originalHeaders: Map?) { + constructor(plugin: JSClient, obj: V8ValueObject, originalUrl: String?, originalHeaders: Map?, applyOtherHeadersByDefault: Boolean = false) { val contextName = "ModifyRequestResponse"; val config = plugin.config; _v8Url = obj.getOrDefault(config, "url", contextName, null); _v8Headers = obj.getOrDefault>(config, "headers", contextName, null); _v8Options = obj.getOrDefault(config, "options", "JSRequestModifier.options", null)?.let { - Options(config, it); - } + Options(config, it, applyOtherHeadersByDefault); + } ?: Options(null, null, applyOtherHeadersByDefault); initialize(plugin, originalUrl, originalHeaders); } private fun initialize(plugin: JSClient, originalUrl: String?, originalHeaders: Map?) { val config = plugin.config; url = _v8Url ?: originalUrl; - headers = _v8Headers ?: originalHeaders ?: mapOf(); + + if(_v8Options?.applyOtherHeaders ?: false) { + val headersToSet = _v8Headers?.toMutableMap() ?: mutableMapOf(); + if (originalHeaders != null) + for (head in originalHeaders) + if (!headersToSet.containsKey(head.key)) + headersToSet[head.key] = head.value; + headers = headersToSet; + } + else + headers = _v8Headers ?: originalHeaders ?: mapOf(); if(_v8Options != null) { if(_v8Options.applyCookieClient != null && url != null) { @@ -68,10 +78,18 @@ class JSRequest : IRequest { class Options: IModifierOptions { override val applyAuthClient: String?; override val applyCookieClient: String?; + override val applyOtherHeaders: Boolean; - constructor(config: IV8PluginConfig, obj: V8ValueObject) { + + constructor(config: IV8PluginConfig, obj: V8ValueObject, applyOtherHeadersByDefault: Boolean = false) { applyAuthClient = obj.getOrDefault(config, "applyAuthClient", "JSRequestModifier.options.applyAuthClient", null); applyCookieClient = obj.getOrDefault(config, "applyCookieClient", "JSRequestModifier.options.applyCookieClient", null); + applyOtherHeaders = obj.getOrDefault(config, "applyOtherHeaders", "JSRequestModifier.options.applyOtherHeaders", applyOtherHeadersByDefault) ?: applyOtherHeadersByDefault; + } + constructor(applyAuthClient: String? = null, applyCookieClient: String? = null, applyOtherHeaders: Boolean = false) { + this.applyAuthClient = applyAuthClient; + this.applyCookieClient = applyCookieClient; + this.applyOtherHeaders = applyOtherHeaders; } } diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSSource.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSSource.kt index ccd9c223..9074e28e 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSSource.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSSource.kt @@ -33,7 +33,7 @@ abstract class JSSource { this.type = type; _requestModifier = obj.getOrDefault(_config, "requestModifier", "JSSource.requestModifier", null)?.let { - JSRequest(plugin, it, null, null); + JSRequest(plugin, it, null, null, true); } hasRequestModifier = _requestModifier != null || obj.has("getRequestModifier"); }