This commit is contained in:
kunfei
2023-03-18 22:18:44 +08:00
parent f0d5198eb7
commit d0ae59490b
4 changed files with 77 additions and 79 deletions

View File

@@ -103,20 +103,14 @@ class BookSourceEditActivity :
override fun onCompatOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.menu_save -> getSource().let { source ->
if (!source.equal(viewModel.bookSource ?: BookSource())) {
source.lastUpdateTime = System.currentTimeMillis()
}
if (checkSource(source)) {
viewModel.save(source) { setResult(Activity.RESULT_OK); finish() }
}
R.id.menu_save -> viewModel.save(getSource()) {
setResult(Activity.RESULT_OK)
finish()
}
R.id.menu_debug_source -> getSource().let { source ->
if (checkSource(source)) {
viewModel.save(source) {
startActivity<BookSourceDebugActivity> {
putExtra("key", source.bookSourceUrl)
}
R.id.menu_debug_source -> viewModel.save(getSource()) { source ->
viewModel.save(source) {
startActivity<BookSourceDebugActivity> {
putExtra("key", source.bookSourceUrl)
}
}
}
@@ -132,14 +126,10 @@ class BookSourceEditActivity :
ErrorCorrectionLevel.L
)
R.id.menu_help -> showHelp("ruleHelp")
R.id.menu_login -> getSource().let { source ->
if (checkSource(source)) {
viewModel.save(source) {
startActivity<SourceLoginActivity> {
putExtra("type", "bookSource")
putExtra("key", source.bookSourceUrl)
}
}
R.id.menu_login -> viewModel.save(getSource()) { source ->
startActivity<SourceLoginActivity> {
putExtra("type", "bookSource")
putExtra("key", source.bookSourceUrl)
}
}
R.id.menu_set_source_variable -> setSourceVariable()
@@ -515,14 +505,6 @@ class BookSourceEditActivity :
return source
}
private fun checkSource(source: BookSource): Boolean {
if (source.bookSourceUrl.isBlank() || source.bookSourceName.isBlank()) {
toastOnUi(R.string.non_null_name_url)
return false
}
return true
}
private fun alertGroups() {
launch {
val groups = withContext(IO) {
@@ -594,22 +576,19 @@ class BookSourceEditActivity :
}
private fun setSourceVariable() {
launch {
val source = viewModel.bookSource
if (source == null) {
toastOnUi("先保存书源")
return@launch
}
val comment = source.getDisplayVariableComment("源变量可在js中通过source.getVariable()获取")
val variable = withContext(IO) { source.getVariable() }
showDialogFragment(
VariableDialog(
getString(R.string.set_source_variable),
source.getKey(),
variable,
comment
viewModel.save(getSource()) { source ->
launch {
val comment = source.getDisplayVariableComment("源变量可在js中通过source.getVariable()获取")
val variable = withContext(IO) { source.getVariable() }
showDialogFragment(
VariableDialog(
getString(R.string.set_source_variable),
source.getKey(),
variable,
comment
)
)
)
}
}
}

View File

@@ -2,6 +2,7 @@ package io.legado.app.ui.book.source.edit
import android.app.Application
import android.content.Intent
import io.legado.app.R
import io.legado.app.base.BaseViewModel
import io.legado.app.data.appDb
import io.legado.app.data.entities.BookSource
@@ -34,8 +35,14 @@ class BookSourceEditViewModel(application: Application) : BaseViewModel(applicat
}
}
fun save(source: BookSource, success: (() -> Unit)? = null) {
fun save(source: BookSource, success: ((BookSource) -> Unit)? = null) {
execute {
if (source.bookSourceUrl.isBlank() || source.bookSourceName.isBlank()) {
throw NoStackTraceException(context.getString(R.string.non_null_name_url))
}
if (!source.equal(bookSource ?: BookSource())) {
source.lastUpdateTime = System.currentTimeMillis()
}
bookSource?.let {
appDb.bookSourceDao.delete(it)
SourceConfig.removeSource(it.bookSourceUrl)
@@ -43,8 +50,9 @@ class BookSourceEditViewModel(application: Application) : BaseViewModel(applicat
source.lastUpdateTime = System.currentTimeMillis()
appDb.bookSourceDao.insert(source)
bookSource = source
source
}.onSuccess {
success?.invoke()
success?.invoke(it)
}.onError {
context.toastOnUi(it.localizedMessage)
it.printOnDebug()

View File

@@ -24,14 +24,19 @@ import io.legado.app.ui.qrcode.QrCodeResult
import io.legado.app.ui.rss.source.debug.RssSourceDebugActivity
import io.legado.app.ui.widget.dialog.TextDialog
import io.legado.app.ui.widget.dialog.UrlOptionDialog
import io.legado.app.ui.widget.dialog.VariableDialog
import io.legado.app.ui.widget.keyboard.KeyboardToolPop
import io.legado.app.ui.widget.text.EditEntity
import io.legado.app.utils.*
import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class RssSourceEditActivity :
VMBaseActivity<ActivityRssSourceEditBinding, RssSourceEditViewModel>(false),
KeyboardToolPop.CallBack {
KeyboardToolPop.CallBack,
VariableDialog.Callback {
override val binding by viewBinding(ActivityRssSourceEditBinding::inflate)
override val viewModel by viewModels<RssSourceEditViewModel>()
@@ -107,35 +112,22 @@ class RssSourceEditActivity :
override fun onCompatOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.menu_save -> {
val source = getRssSource()
if (checkSource(source)) {
viewModel.save(source) {
setResult(Activity.RESULT_OK)
finish()
}
R.id.menu_save -> viewModel.save(getRssSource()) {
setResult(Activity.RESULT_OK)
finish()
}
R.id.menu_debug_source -> viewModel.save(getRssSource()) { source ->
startActivity<RssSourceDebugActivity> {
putExtra("key", source.sourceUrl)
}
}
R.id.menu_debug_source -> {
val source = getRssSource()
if (checkSource(source)) {
viewModel.save(source) {
startActivity<RssSourceDebugActivity> {
putExtra("key", source.sourceUrl)
}
}
}
}
R.id.menu_login -> getRssSource().let {
if (checkSource(it)) {
viewModel.save(it) {
startActivity<SourceLoginActivity> {
putExtra("type", "rssSource")
putExtra("key", it.sourceUrl)
}
}
R.id.menu_login -> viewModel.save(getRssSource()) {
startActivity<SourceLoginActivity> {
putExtra("type", "rssSource")
putExtra("key", it.sourceUrl)
}
}
R.id.menu_set_source_variable -> setSourceVariable()
R.id.menu_clear_cookie -> viewModel.clearCookie(getRssSource().sourceUrl)
R.id.menu_auto_complete -> viewModel.autoComplete = !viewModel.autoComplete
R.id.menu_copy_source -> sendToClip(GSON.toJson(getRssSource()))
@@ -305,12 +297,25 @@ class RssSourceEditActivity :
return source
}
private fun checkSource(source: RssSource): Boolean {
if (source.sourceName.isBlank() || source.sourceName.isBlank()) {
toastOnUi("名称或url不能为空")
return false
private fun setSourceVariable() {
viewModel.save(getRssSource()) { source ->
launch {
val comment = source.getDisplayVariableComment("源变量可在js中通过source.getVariable()获取")
val variable = withContext(Dispatchers.IO) { source.getVariable() }
showDialogFragment(
VariableDialog(
getString(R.string.set_source_variable),
source.getKey(),
variable,
comment
)
)
}
}
return true
}
override fun setVariable(key: String, variable: String?) {
viewModel.rssSource?.setVariable(variable)
}
override fun helpActions(): List<SelectItem<String>> {

View File

@@ -2,9 +2,11 @@ package io.legado.app.ui.rss.source.edit
import android.app.Application
import android.content.Intent
import io.legado.app.R
import io.legado.app.base.BaseViewModel
import io.legado.app.data.appDb
import io.legado.app.data.entities.RssSource
import io.legado.app.exception.NoStackTraceException
import io.legado.app.help.RuleComplete
import io.legado.app.help.http.CookieStore
import io.legado.app.utils.getClipText
@@ -32,15 +34,19 @@ class RssSourceEditViewModel(application: Application) : BaseViewModel(applicati
}
}
fun save(source: RssSource, success: (() -> Unit)) {
fun save(source: RssSource, success: ((RssSource) -> Unit)) {
execute {
if (source.sourceName.isBlank() || source.sourceName.isBlank()) {
throw NoStackTraceException(context.getString(R.string.non_null_name_url))
}
rssSource?.let {
appDb.rssSourceDao.delete(it)
}
appDb.rssSourceDao.insert(source)
rssSource = source
source
}.onSuccess {
success()
success(it)
}.onError {
context.toastOnUi(it.localizedMessage)
it.printOnDebug()