mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
优化
This commit is contained in:
@@ -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
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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>> {
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user