From 1710380fbed7d36edeb7a6fef63a11c687365a84 Mon Sep 17 00:00:00 2001 From: yaoxieyoulei <1622968661@qq.com> Date: Sun, 23 Jun 2024 11:15:41 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E8=87=AA=E5=AE=9A=E4=B9=89ua?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../top/yogiczy/mytv/data/utils/Constants.kt | 10 ++-- .../leanback/settings/SettingsCategories.kt | 2 + .../leanback/settings/SettingsViewModel.kt | 8 ++++ .../components/SettingsCategoryContent.kt | 1 + .../components/SettingsCategoryHttp.kt | 46 +++++++++++++++++++ .../video/player/Media3VideoPlayer.kt | 3 +- .../top/yogiczy/mytv/ui/utils/HttpServer.kt | 5 ++ .../main/java/top/yogiczy/mytv/ui/utils/SP.kt | 12 +++++ app/src/main/res/raw/index.html | 26 +++++++++-- 9 files changed, 103 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/components/SettingsCategoryHttp.kt diff --git a/app/src/main/java/top/yogiczy/mytv/data/utils/Constants.kt b/app/src/main/java/top/yogiczy/mytv/data/utils/Constants.kt index 74effa76..78e187ca 100644 --- a/app/src/main/java/top/yogiczy/mytv/data/utils/Constants.kt +++ b/app/src/main/java/top/yogiczy/mytv/data/utils/Constants.kt @@ -18,7 +18,7 @@ object Constants { * IPTV源地址 */ const val IPTV_SOURCE_URL = - "https://mirror.ghproxy.com/https://raw.githubusercontent.com/zhumeng11/IPTV/main/IPTV.m3u" + "https://mirror.ghproxy.com/https://fanmingming.com/txt?url=https://raw.githubusercontent.com/fanmingming/live/main/tv/m3u/ipv6.m3u" /** * IPTV源缓存时间(毫秒) @@ -57,14 +57,14 @@ object Constants { const val HTTP_RETRY_INTERVAL = 3000L /** - * 日志历史最大保留条数 + * HTTP userAgent */ - const val LOG_HISTORY_MAX_SIZE = 50 + const val HTTP_USER_AGENT = "ExoPlayer" /** - * 播放器 http userAgent + * 日志历史最大保留条数 */ - const val VIDEO_PLAYER_HTTP_USER_AGENT = "ExoPlayer" + const val LOG_HISTORY_MAX_SIZE = 50 /** * 播放器加载超时 diff --git a/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/SettingsCategories.kt b/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/SettingsCategories.kt index 1ffb653e..224bb0cd 100644 --- a/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/SettingsCategories.kt +++ b/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/SettingsCategories.kt @@ -3,6 +3,7 @@ package top.yogiczy.mytv.ui.screens.leanback.settings import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.BugReport import androidx.compose.material.icons.filled.DisplaySettings +import androidx.compose.material.icons.filled.Http import androidx.compose.material.icons.filled.Info import androidx.compose.material.icons.filled.LiveTv import androidx.compose.material.icons.filled.Menu @@ -23,6 +24,7 @@ enum class LeanbackSettingsCategories( UI(Icons.Default.DisplaySettings, "界面"), FAVORITE(Icons.Default.Star, "收藏"), UPDATE(Icons.Default.Update, "更新"), + HTTP(Icons.Default.Http, "网络"), DEBUG(Icons.Default.BugReport, "调试"), MORE(Icons.Default.MoreHoriz, "更多设置"), } \ No newline at end of file diff --git a/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/SettingsViewModel.kt b/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/SettingsViewModel.kt index 4d17cbbe..3fc737c3 100644 --- a/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/SettingsViewModel.kt +++ b/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/SettingsViewModel.kt @@ -217,4 +217,12 @@ class LeanbackSettingsViewModel : ViewModel() { _updateForceRemind = value SP.updateForceRemind = value } + + private var _httpUserAgent by mutableStateOf(SP.httpUserAgent) + var httpUserAgent: String + get() = _httpUserAgent + set(value) { + _httpUserAgent = value + SP.httpUserAgent = value + } } \ No newline at end of file diff --git a/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/components/SettingsCategoryContent.kt b/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/components/SettingsCategoryContent.kt index 75bb79b1..3785ad08 100644 --- a/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/components/SettingsCategoryContent.kt +++ b/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/components/SettingsCategoryContent.kt @@ -30,6 +30,7 @@ fun LeanbackSettingsCategoryContent( LeanbackSettingsCategories.UI -> LeanbackSettingsCategoryUI() LeanbackSettingsCategories.FAVORITE -> LeanbackSettingsCategoryFavorite() LeanbackSettingsCategories.UPDATE -> LeanbackSettingsCategoryUpdate() + LeanbackSettingsCategories.HTTP -> LeanbackSettingsCategoryHttp() LeanbackSettingsCategories.DEBUG -> LeanbackSettingsCategoryDebug() LeanbackSettingsCategories.MORE -> LeanbackSettingsCategoryMore() } diff --git a/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/components/SettingsCategoryHttp.kt b/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/components/SettingsCategoryHttp.kt new file mode 100644 index 00000000..969b941d --- /dev/null +++ b/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/settings/components/SettingsCategoryHttp.kt @@ -0,0 +1,46 @@ +package top.yogiczy.mytv.ui.screens.leanback.settings.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Switch +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.tv.foundation.lazy.list.TvLazyColumn +import top.yogiczy.mytv.ui.screens.leanback.settings.LeanbackSettingsViewModel +import top.yogiczy.mytv.ui.theme.LeanbackTheme +import top.yogiczy.mytv.ui.utils.SP + +@Composable +fun LeanbackSettingsCategoryHttp( + modifier: Modifier = Modifier, + settingsViewModel: LeanbackSettingsViewModel = viewModel(), +) { + TvLazyColumn( + modifier = modifier, + verticalArrangement = Arrangement.spacedBy(10.dp), + contentPadding = PaddingValues(vertical = 10.dp), + ) { + item { + LeanbackSettingsCategoryListItem( + headlineContent = "自定义UA", + supportingContent = settingsViewModel.httpUserAgent, + ) + } + } +} + +@Preview +@Composable +private fun LeanbackSettingsCategoryHttpPreview() { + SP.init(LocalContext.current) + LeanbackTheme { + LeanbackSettingsCategoryHttp( + modifier = Modifier.padding(20.dp), + ) + } +} diff --git a/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/video/player/Media3VideoPlayer.kt b/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/video/player/Media3VideoPlayer.kt index 1edda61d..d75137f4 100644 --- a/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/video/player/Media3VideoPlayer.kt +++ b/app/src/main/java/top/yogiczy/mytv/ui/screens/leanback/video/player/Media3VideoPlayer.kt @@ -22,6 +22,7 @@ import androidx.media3.exoplayer.hls.HlsMediaSource import androidx.media3.exoplayer.source.ProgressiveMediaSource import androidx.media3.exoplayer.util.EventLogger import top.yogiczy.mytv.data.utils.Constants +import top.yogiczy.mytv.ui.utils.SP import androidx.media3.common.PlaybackException as Media3PlaybackException @OptIn(UnstableApi::class) @@ -41,7 +42,7 @@ class LeanbackMedia3VideoPlayer( private fun prepare(uri: Uri, contentType: Int? = null) { val dataSourceFactory = DefaultDataSource.Factory(context, DefaultHttpDataSource.Factory().apply { - setUserAgent(Constants.VIDEO_PLAYER_HTTP_USER_AGENT) + setUserAgent(SP.httpUserAgent) setConnectTimeoutMs(Constants.VIDEO_PLAYER_LOAD_TIMEOUT.toInt()) setReadTimeoutMs(Constants.VIDEO_PLAYER_LOAD_TIMEOUT.toInt()) setKeepPostFor302Redirects(true) diff --git a/app/src/main/java/top/yogiczy/mytv/ui/utils/HttpServer.kt b/app/src/main/java/top/yogiczy/mytv/ui/utils/HttpServer.kt index 70847827..e082bf51 100644 --- a/app/src/main/java/top/yogiczy/mytv/ui/utils/HttpServer.kt +++ b/app/src/main/java/top/yogiczy/mytv/ui/utils/HttpServer.kt @@ -95,6 +95,7 @@ object HttpServer : Loggable() { appRepo = Constants.APP_REPO, iptvSourceUrl = SP.iptvSourceUrl, epgXmlUrl = SP.epgXmlUrl, + httpUserAgent = SP.httpUserAgent, logHistory = Logger.history, ) ) @@ -109,6 +110,7 @@ object HttpServer : Loggable() { val body = request.getBody().get() val iptvSourceUrl = body.get("iptvSourceUrl").toString() val epgXmlUrl = body.get("epgXmlUrl").toString() + val httpUserAgent = body.get("httpUserAgent").toString() if (SP.iptvSourceUrl != iptvSourceUrl) { SP.iptvSourceUrl = iptvSourceUrl @@ -120,6 +122,8 @@ object HttpServer : Loggable() { EpgRepository().clearCache() } + SP.httpUserAgent = httpUserAgent + wrapResponse(response).send("success") } @@ -185,6 +189,7 @@ private data class AllSettings( val appRepo: String, val iptvSourceUrl: String, val epgXmlUrl: String, + val httpUserAgent: String, val logHistory: List, ) \ No newline at end of file diff --git a/app/src/main/java/top/yogiczy/mytv/ui/utils/SP.kt b/app/src/main/java/top/yogiczy/mytv/ui/utils/SP.kt index 0762e73a..4f6a4b48 100644 --- a/app/src/main/java/top/yogiczy/mytv/ui/utils/SP.kt +++ b/app/src/main/java/top/yogiczy/mytv/ui/utils/SP.kt @@ -103,6 +103,10 @@ object SP { /** ==================== 更新 ==================== */ /** 更新强提醒(弹窗形式) */ UPDATE_FORCE_REMIND, + + /** ==================== 网络 ==================== */ + /** 自定义ua */ + HTTP_USER_AGENT, } /** ==================== 应用 ==================== */ @@ -243,6 +247,14 @@ object SP { get() = sp.getBoolean(KEY.UPDATE_FORCE_REMIND.name, false) set(value) = sp.edit().putBoolean(KEY.UPDATE_FORCE_REMIND.name, value).apply() + /** ==================== 网络 ==================== */ + /** 自定义ua */ + var httpUserAgent: String + get() = (sp.getString(KEY.HTTP_USER_AGENT.name, "") ?: "").ifBlank { + Constants.HTTP_USER_AGENT + } + set(value) = sp.edit().putString(KEY.HTTP_USER_AGENT.name, value).apply() + enum class UiTimeShowMode(val value: Int) { /** 隐藏 */ HIDDEN(0), diff --git a/app/src/main/res/raw/index.html b/app/src/main/res/raw/index.html index 3277e937..c9e740bc 100644 --- a/app/src/main/res/raw/index.html +++ b/app/src/main/res/raw/index.html @@ -50,7 +50,7 @@ 支持m3u链接与tvbox链接 + v-model="settings.iptvSourceUrl" type="textarea" rows="2"> @@ -68,7 +68,7 @@ 支持xml、xml.gz格式 + v-model="settings.epgXmlUrl" type="textarea" rows="2"> @@ -81,6 +81,24 @@ + + + + + + + +