From 682af16d516f28ae73839d19c4b4e8971914bf29 Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 6 Oct 2021 17:24:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=97=E8=AF=BB=E5=BC=95=E6=93=8E=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=99=BB=E5=BD=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/data/entities/BaseSource.kt | 15 +++++++++---- .../io/legado/app/data/entities/BookSource.kt | 6 ----- .../app/ui/book/audio/AudioPlayActivity.kt | 3 ++- .../app/ui/book/info/BookInfoActivity.kt | 3 ++- .../app/ui/book/read/ReadBookActivity.kt | 3 ++- .../book/read/config/SpeakEngineEditDialog.kt | 20 ++++++++++++++--- .../read/config/SpeakEngineEditViewModel.kt | 4 +++- .../source/edit/BookSourceEditActivity.kt | 18 +++++++++------ .../book/source/manage/BookSourceAdapter.kt | 3 ++- .../app/ui/login/SourceLoginActivity.kt | 6 ++--- .../app/ui/login/SourceLoginViewModel.kt | 13 +++++++---- .../app/ui/main/explore/ExploreAdapter.kt | 3 ++- .../app/ui/rss/article/RssSortActivity.kt | 3 ++- .../legado/app/ui/rss/read/ReadRssActivity.kt | 3 ++- .../rss/source/edit/RssSourceEditActivity.kt | 22 +++++++++++++++++++ 15 files changed, 89 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/io/legado/app/data/entities/BaseSource.kt b/app/src/main/java/io/legado/app/data/entities/BaseSource.kt index bec81f084..4f04ea068 100644 --- a/app/src/main/java/io/legado/app/data/entities/BaseSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/BaseSource.kt @@ -7,10 +7,7 @@ import io.legado.app.help.AppConfig import io.legado.app.help.CacheManager import io.legado.app.help.JsExtensions import io.legado.app.help.http.CookieStore -import io.legado.app.utils.EncoderUtils -import io.legado.app.utils.GSON -import io.legado.app.utils.fromJsonObject -import io.legado.app.utils.printOnDebug +import io.legado.app.utils.* import javax.script.SimpleBindings /** @@ -28,6 +25,16 @@ interface BaseSource : JsExtensions { fun getKey(): String + fun getLoginUiStr(): String? { + return loginUi?.let { + GSON.toJson(it) + } + } + + fun setLoginUi(uiJson: String?) { + loginUi = GSON.fromJsonArray(uiJson) + } + fun getLoginJs(): String? { val loginJs = loginUrl return when { diff --git a/app/src/main/java/io/legado/app/data/entities/BookSource.kt b/app/src/main/java/io/legado/app/data/entities/BookSource.kt index 8016ff5f0..b63810063 100644 --- a/app/src/main/java/io/legado/app/data/entities/BookSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/BookSource.kt @@ -105,12 +105,6 @@ data class BookSource( override fun equals(other: Any?) = if (other is BookSource) other.bookSourceUrl == bookSourceUrl else false - fun getLoginUiStr(): String? { - return loginUi?.let { - GSON.toJson(it) - } - } - fun getSearchRule() = ruleSearch ?: SearchRule() fun getExploreRule() = ruleExplore ?: ExploreRule() diff --git a/app/src/main/java/io/legado/app/ui/book/audio/AudioPlayActivity.kt b/app/src/main/java/io/legado/app/ui/book/audio/AudioPlayActivity.kt index 6f0e7d3b6..6f4edd3d5 100644 --- a/app/src/main/java/io/legado/app/ui/book/audio/AudioPlayActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/audio/AudioPlayActivity.kt @@ -98,7 +98,8 @@ class AudioPlayActivity : } R.id.menu_login -> AudioPlay.bookSource?.let { startActivity { - putExtra("sourceUrl", it.bookSourceUrl) + putExtra("type", "bookSource") + putExtra("key", it.bookSourceUrl) } } R.id.menu_copy_audio_url -> sendToClip(AudioPlayService.url) diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt index 55d785788..60f39936e 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt @@ -158,7 +158,8 @@ class BookInfoActivity : } R.id.menu_login -> viewModel.bookSource?.let { startActivity { - putExtra("sourceUrl", it.bookSourceUrl) + putExtra("type", "bookSource") + putExtra("key", it.bookSourceUrl) } } R.id.menu_top -> viewModel.topBook() diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 69ebc76db..c90f6b7bf 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -791,7 +791,8 @@ class ReadBookActivity : ReadBookBaseActivity(), override fun showLogin() { ReadBook.bookSource?.let { startActivity { - putExtra("sourceUrl", it.bookSourceUrl) + putExtra("type", "bookSource") + putExtra("key", it.bookSourceUrl) } } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineEditDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineEditDialog.kt index 7a3967cdf..2e69d495e 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineEditDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineEditDialog.kt @@ -11,6 +11,7 @@ import io.legado.app.base.BaseDialogFragment import io.legado.app.data.entities.HttpTTS import io.legado.app.databinding.DialogHttpTtsEditBinding import io.legado.app.lib.theme.primaryColor +import io.legado.app.ui.login.SourceLoginActivity import io.legado.app.ui.widget.dialog.TextDialog import io.legado.app.utils.* import io.legado.app.utils.viewbindingdelegate.viewBinding @@ -50,7 +51,7 @@ class SpeakEngineEditDialog() : BaseDialogFragment(R.layout.dialog_http_tts_edit binding.tvName.setText(httpTTS.name) binding.tvUrl.setText(httpTTS.url) binding.tvLoginUrl.setText(httpTTS.loginUrl) - binding.tvLoginUi.setText(GSON.toJson(httpTTS.loginUi)) + binding.tvLoginUi.setText(httpTTS.getLoginUiStr()) binding.tvLoginCheckJs.setText(httpTTS.loginCheckJs) binding.tvHeaders.setText(httpTTS.header) } @@ -58,6 +59,18 @@ class SpeakEngineEditDialog() : BaseDialogFragment(R.layout.dialog_http_tts_edit override fun onMenuItemClick(item: MenuItem?): Boolean { when (item?.itemId) { R.id.menu_save -> viewModel.save(dataFromView()) + R.id.menu_login -> dataFromView().let { httpTts -> + if (httpTts.loginUrl.isNullOrBlank()) { + toastOnUi("登录url不能为空") + } else { + viewModel.save(httpTts) { + startActivity { + putExtra("type", "httpTts") + putExtra("key", httpTts.id.toString()) + } + } + } + } R.id.menu_help -> help() } return true @@ -69,10 +82,11 @@ class SpeakEngineEditDialog() : BaseDialogFragment(R.layout.dialog_http_tts_edit name = binding.tvName.text.toString(), url = binding.tvUrl.text.toString(), loginUrl = binding.tvLoginUrl.text?.toString(), - loginUi = GSON.fromJsonArray(binding.tvLoginUi.text?.toString()), loginCheckJs = binding.tvLoginCheckJs.text?.toString(), header = binding.tvHeaders.text?.toString() - ) + ).apply { + setLoginUi(binding.tvLoginUi.text?.toString()) + } } private fun help() { diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineEditViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineEditViewModel.kt index dfc60286e..651bfdea5 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineEditViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineEditViewModel.kt @@ -28,10 +28,12 @@ class SpeakEngineEditViewModel(app: Application) : BaseViewModel(app) { } } - fun save(httpTTS: HttpTTS) { + fun save(httpTTS: HttpTTS, success: (() -> Unit)? = null) { execute { appDb.httpTTSDao.insert(httpTTS) ReadAloud.upReadAloudClass() + }.onSuccess { + success?.invoke() } } 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 604167373..00497dc8d 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 @@ -85,6 +85,11 @@ class BookSourceEditActivity : return super.onCompatCreateOptionsMenu(menu) } + override fun onMenuOpened(featureId: Int, menu: Menu): Boolean { + menu.findItem(R.id.menu_login)?.isVisible = !viewModel.bookSource?.loginUrl.isNullOrBlank() + return super.onMenuOpened(featureId, menu) + } + override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.menu_save -> getSource().let { source -> @@ -114,13 +119,12 @@ class BookSourceEditActivity : ErrorCorrectionLevel.L ) R.id.menu_help -> showRuleHelp() - R.id.menu_login -> getSource().let { - if (checkSource(it)) { - if (it.loginUrl.isNullOrEmpty()) { - toastOnUi(R.string.source_no_login) - } else { + R.id.menu_login -> getSource().let { source -> + if (checkSource(source)) { + viewModel.save(source) { startActivity { - putExtra("sourceUrl", it.bookSourceUrl) + putExtra("type", "bookSource") + putExtra("key", source.bookSourceUrl) } } } @@ -296,7 +300,7 @@ class BookSourceEditActivity : "bookSourceName" -> source.bookSourceName = it.value ?: "" "bookSourceGroup" -> source.bookSourceGroup = it.value "loginUrl" -> source.loginUrl = it.value - "loginUi" -> source.loginUi = GSON.fromJsonArray(it.value) + "loginUi" -> source.setLoginUi(it.value) "loginCheckJs" -> source.loginCheckJs = it.value "bookUrlPattern" -> source.bookUrlPattern = it.value "header" -> source.header = it.value diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt index 3a10541b9..bedde1b8f 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt @@ -169,7 +169,8 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) : R.id.menu_top -> callBack.toTop(source) R.id.menu_bottom -> callBack.toBottom(source) R.id.menu_login -> context.startActivity { - putExtra("sourceUrl", source.bookSourceUrl) + putExtra("type", "bookSource") + putExtra("key", source.bookSourceUrl) } R.id.menu_debug_source -> callBack.debug(source) R.id.menu_del -> callBack.del(source) diff --git a/app/src/main/java/io/legado/app/ui/login/SourceLoginActivity.kt b/app/src/main/java/io/legado/app/ui/login/SourceLoginActivity.kt index 41cf64240..857cf3ed1 100644 --- a/app/src/main/java/io/legado/app/ui/login/SourceLoginActivity.kt +++ b/app/src/main/java/io/legado/app/ui/login/SourceLoginActivity.kt @@ -16,10 +16,8 @@ class SourceLoginActivity : VMBaseActivity() override fun onActivityCreated(savedInstanceState: Bundle?) { - intent.getStringExtra("sourceUrl")?.let { - viewModel.initData(it) { source -> - initView(source) - } + viewModel.initData(intent) { source -> + initView(source) } } diff --git a/app/src/main/java/io/legado/app/ui/login/SourceLoginViewModel.kt b/app/src/main/java/io/legado/app/ui/login/SourceLoginViewModel.kt index 217ce8722..0c03c95cd 100644 --- a/app/src/main/java/io/legado/app/ui/login/SourceLoginViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/login/SourceLoginViewModel.kt @@ -1,20 +1,25 @@ package io.legado.app.ui.login import android.app.Application +import android.content.Intent import io.legado.app.base.BaseViewModel import io.legado.app.data.appDb import io.legado.app.data.entities.BaseSource +import io.legado.app.model.NoStackTraceException import io.legado.app.utils.toastOnUi class SourceLoginViewModel(application: Application) : BaseViewModel(application) { var source: BaseSource? = null - fun initData(sourceUrl: String, success: (bookSource: BaseSource) -> Unit) { + fun initData(intent: Intent, success: (bookSource: BaseSource) -> Unit) { execute { - source = appDb.bookSourceDao.getBookSource(sourceUrl) - if (source == null) { - source = appDb.rssSourceDao.getByKey(sourceUrl) + val sourceKey = intent.getStringExtra("key") + ?: throw NoStackTraceException("没有参数") + when (intent.getStringExtra("type")) { + "bookSource" -> source = appDb.bookSourceDao.getBookSource(sourceKey) + "rssSource" -> source = appDb.rssSourceDao.getByKey(sourceKey) + "httpTts" -> source = appDb.httpTTSDao.get(sourceKey.toLong()) } source }.onSuccess { diff --git a/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt b/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt index f5876a195..5f7f9cb3b 100644 --- a/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt @@ -164,7 +164,8 @@ class ExploreAdapter(context: Context, private val scope: CoroutineScope, val ca R.id.menu_edit -> callBack.editSource(source.bookSourceUrl) R.id.menu_top -> callBack.toTop(source) R.id.menu_login -> context.startActivity { - putExtra("sourceUrl", source.bookSourceUrl) + putExtra("type", "bookSource") + putExtra("key", source.bookSourceUrl) } R.id.menu_refresh -> Coroutine.async(scope) { ACache.get(context, "explore").remove(source.bookSourceUrl) diff --git a/app/src/main/java/io/legado/app/ui/rss/article/RssSortActivity.kt b/app/src/main/java/io/legado/app/ui/rss/article/RssSortActivity.kt index 366c39e70..81289c08c 100644 --- a/app/src/main/java/io/legado/app/ui/rss/article/RssSortActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/article/RssSortActivity.kt @@ -67,7 +67,8 @@ class RssSortActivity : VMBaseActivity startActivity { - putExtra("sourceUrl", viewModel.rssSource?.sourceUrl) + putExtra("type", "rssSource") + putExtra("key", viewModel.rssSource?.sourceUrl) } R.id.menu_set_source_variable -> setSourceVariable() R.id.menu_edit_source -> viewModel.rssSource?.sourceUrl?.let { diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt index 4a9ec12a9..cdb7bb269 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt @@ -98,7 +98,8 @@ class ReadRssActivity : VMBaseActivity } ?: toastOnUi(R.string.null_url) R.id.menu_aloud -> readAloud() R.id.menu_login -> startActivity { - putExtra("sourceUrl", viewModel.rssSource?.loginUrl) + putExtra("type", "rssSource") + putExtra("key", viewModel.rssSource?.loginUrl) } } return super.onCompatOptionsItemSelected(item) 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 08a3be173..c1d3bda07 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 @@ -20,6 +20,7 @@ import io.legado.app.help.LocalConfig import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.selector import io.legado.app.lib.theme.primaryColor +import io.legado.app.ui.login.SourceLoginActivity import io.legado.app.ui.qrcode.QrCodeResult import io.legado.app.ui.rss.source.debug.RssSourceDebugActivity import io.legado.app.ui.widget.KeyboardToolPop @@ -87,6 +88,11 @@ class RssSourceEditActivity : return super.onCompatCreateOptionsMenu(menu) } + override fun onMenuOpened(featureId: Int, menu: Menu): Boolean { + menu.findItem(R.id.menu_login)?.isVisible = !viewModel.rssSource.loginUrl.isNullOrBlank() + return super.onMenuOpened(featureId, menu) + } + override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.menu_save -> { @@ -108,6 +114,16 @@ class RssSourceEditActivity : } } } + R.id.menu_login -> getRssSource().let { + if (checkSource(it)) { + viewModel.save(it) { + startActivity { + putExtra("type", "rssSource") + putExtra("key", it.sourceUrl) + } + } + } + } R.id.menu_copy_source -> sendToClip(GSON.toJson(getRssSource())) R.id.menu_qr_code_camera -> qrCodeResult.launch(null) R.id.menu_paste_source -> viewModel.pasteSource { upRecyclerView(it) } @@ -143,6 +159,9 @@ class RssSourceEditActivity : add(EditEntity("sourceIcon", source?.sourceIcon, R.string.source_icon)) add(EditEntity("sourceGroup", source?.sourceGroup, R.string.source_group)) add(EditEntity("sourceComment", source?.sourceComment, R.string.comment)) + add(EditEntity("loginUrl", source?.loginUrl, R.string.login_url)) + add(EditEntity("loginUi", source?.getLoginUiStr(), R.string.login_ui)) + add(EditEntity("loginCheckJs", source?.loginCheckJs, R.string.login_check_js)) add(EditEntity("header", source?.header, R.string.source_http_header)) add( EditEntity( @@ -176,6 +195,9 @@ class RssSourceEditActivity : "sourceIcon" -> source.sourceIcon = it.value ?: "" "sourceGroup" -> source.sourceGroup = it.value "sourceComment" -> source.sourceComment = it.value + "loginUrl" -> source.loginUrl = it.value + "loginUi" -> source.setLoginUi(it.value) + "loginCheckJs" -> source.loginCheckJs = it.value "header" -> source.header = it.value "concurrentRate" -> source.concurrentRate = it.value "sortUrl" -> source.sortUrl = it.value