feat: 新增tvcat.cc视频来源, 设置页面支持多来源切换

This commit is contained in:
xiaji
2026-06-08 21:01:00 +08:00
parent 1f363e74fa
commit cb238a6f36
6 changed files with 146 additions and 4 deletions

View File

@@ -1,16 +1,22 @@
package com.videoapp.tv
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.EditText
import android.widget.Spinner
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.videoapp.tv.data.ConfigRepository
import com.videoapp.tv.data.SiteConfig
import com.videoapp.tv.data.SitePreset
class SettingsActivity : AppCompatActivity() {
private lateinit var configRepo: ConfigRepository
private lateinit var spinnerPreset: Spinner
private lateinit var editBaseUrl: EditText
private lateinit var editSearchPath: EditText
private lateinit var editSearchMethod: EditText
@@ -24,6 +30,7 @@ class SettingsActivity : AppCompatActivity() {
private lateinit var editSourceEpisodeGroupSelector: EditText
private lateinit var btnSave: Button
private lateinit var btnRestore: Button
private var ignoringSpinner = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -31,6 +38,7 @@ class SettingsActivity : AppCompatActivity() {
configRepo = ConfigRepository(this)
spinnerPreset = findViewById(R.id.spinner_preset)
editBaseUrl = findViewById(R.id.edit_base_url)
editSearchPath = findViewById(R.id.edit_search_path)
editSearchMethod = findViewById(R.id.edit_search_method)
@@ -45,18 +53,49 @@ class SettingsActivity : AppCompatActivity() {
btnSave = findViewById(R.id.btn_save)
btnRestore = findViewById(R.id.btn_restore)
setupPresetSpinner()
loadConfig()
btnSave.setOnClickListener { saveConfig() }
btnRestore.setOnClickListener {
configRepo.restoreDefault()
ignoringSpinner = true
spinnerPreset.setSelection(0)
ignoringSpinner = false
loadConfig()
Toast.makeText(this, R.string.config_restored, Toast.LENGTH_SHORT).show()
}
}
private fun loadConfig() {
val config = configRepo.getConfig()
private fun setupPresetSpinner() {
val presets = configRepo.getPresets()
val presetNames = presets.map { it.name }
val adapter = ArrayAdapter(
this,
android.R.layout.simple_spinner_item,
presetNames
)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinnerPreset.adapter = adapter
spinnerPreset.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
if (ignoringSpinner) return
val preset = presets.getOrNull(position) ?: return
configRepo.applyPreset(preset)
loadConfigFromPreset(preset.config)
Toast.makeText(
this@SettingsActivity,
"已切换到 ${preset.name}",
Toast.LENGTH_SHORT
).show()
}
override fun onNothingSelected(parent: AdapterView<*>?) {}
}
}
private fun loadConfigFromPreset(config: SiteConfig) {
editBaseUrl.setText(config.baseUrl)
editSearchPath.setText(config.searchPath)
editSearchMethod.setText(config.searchMethod)
@@ -72,6 +111,21 @@ class SettingsActivity : AppCompatActivity() {
editSourceEpisodeGroupSelector.setText(config.sourceEpisodeGroupSelector)
}
private fun loadConfig() {
val config = configRepo.getConfig()
loadConfigFromPreset(config)
val presets = configRepo.getPresets()
val matchedIndex = presets.indexOfFirst {
it.config.baseUrl == config.baseUrl
}
if (matchedIndex >= 0) {
ignoringSpinner = true
spinnerPreset.setSelection(matchedIndex)
ignoringSpinner = false
}
}
private fun saveConfig() {
val extraParams = parseExtraParams(editExtraParams.text.toString())