From d0ae59490b330e8b4a4279bba97ee6598bbc44c3 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 18 Mar 2023 22:18:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../source/edit/BookSourceEditActivity.kt | 67 +++++++------------ .../source/edit/BookSourceEditViewModel.kt | 12 +++- .../rss/source/edit/RssSourceEditActivity.kt | 67 ++++++++++--------- .../rss/source/edit/RssSourceEditViewModel.kt | 10 ++- 4 files changed, 77 insertions(+), 79 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt index a75270e33..14688482e 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt @@ -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 { - putExtra("key", source.bookSourceUrl) - } + R.id.menu_debug_source -> viewModel.save(getSource()) { source -> + viewModel.save(source) { + startActivity { + 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 { - putExtra("type", "bookSource") - putExtra("key", source.bookSourceUrl) - } - } + R.id.menu_login -> viewModel.save(getSource()) { source -> + startActivity { + 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 + ) ) - ) + } } } diff --git a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditViewModel.kt b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditViewModel.kt index 9f9391c7e..9c355cd65 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditViewModel.kt @@ -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() diff --git a/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt b/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt index 75da2d388..c2756b0d5 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt @@ -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(false), - KeyboardToolPop.CallBack { + KeyboardToolPop.CallBack, + VariableDialog.Callback { override val binding by viewBinding(ActivityRssSourceEditBinding::inflate) override val viewModel by viewModels() @@ -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 { + putExtra("key", source.sourceUrl) } } - R.id.menu_debug_source -> { - val source = getRssSource() - if (checkSource(source)) { - viewModel.save(source) { - startActivity { - putExtra("key", source.sourceUrl) - } - } - } - } - R.id.menu_login -> getRssSource().let { - if (checkSource(it)) { - viewModel.save(it) { - startActivity { - putExtra("type", "rssSource") - putExtra("key", it.sourceUrl) - } - } + R.id.menu_login -> viewModel.save(getRssSource()) { + startActivity { + 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> { diff --git a/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditViewModel.kt b/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditViewModel.kt index 67177bf2d..74a3696fc 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditViewModel.kt @@ -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()