This commit is contained in:
kunfei
2023-03-17 09:32:44 +08:00
parent 186e31b5a0
commit 445ab4a1e9
10 changed files with 79 additions and 45 deletions
@@ -37,7 +37,7 @@ object DirectLinkUpload {
return downloadUrl return downloadUrl
} }
private val defaultRules: List<Rule> by lazy { val defaultRules: List<Rule> by lazy {
val json = String( val json = String(
appCtx.assets.open("defaultData${File.separator}directLinkUpload.json") appCtx.assets.open("defaultData${File.separator}directLinkUpload.json")
.readBytes() .readBytes()
@@ -54,8 +54,7 @@ object DirectLinkUpload {
return GSON.fromJsonObject<Rule>(json).getOrNull() return GSON.fromJsonObject<Rule>(json).getOrNull()
} }
fun putConfig(uploadUrl: String, downloadUrlRule: String, summary: String?) { fun putConfig(rule: Rule) {
val rule = Rule(uploadUrl, downloadUrlRule, summary)
ACache.get(cacheDir = false).put(ruleFileName, GSON.toJson(rule)) ACache.get(cacheDir = false).put(ruleFileName, GSON.toJson(rule))
} }
@@ -63,7 +62,7 @@ object DirectLinkUpload {
ACache.get(cacheDir = false).remove(ruleFileName) ACache.get(cacheDir = false).remove(ruleFileName)
} }
fun getSummary(): String? { fun getSummary(): String {
return getRule().summary return getRule().summary
} }
@@ -71,7 +70,13 @@ object DirectLinkUpload {
data class Rule( data class Rule(
var uploadUrl: String, var uploadUrl: String,
var downloadUrlRule: String, var downloadUrlRule: String,
var summary: String? var summary: String
) ) {
override fun toString(): String {
return summary
}
}
} }
@@ -54,9 +54,7 @@ class SpeakEngineDialog(val callBack: CallBack) : BaseDialogFragment(R.layout.di
it.uri?.let { uri -> it.uri?.let { uri ->
alert(R.string.export_success) { alert(R.string.export_success) {
if (uri.toString().isAbsUrl()) { if (uri.toString().isAbsUrl()) {
DirectLinkUpload.getSummary()?.let { summary -> setMessage(DirectLinkUpload.getSummary())
setMessage(summary)
}
} }
val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply { val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
editView.hint = getString(R.string.path) editView.hint = getString(R.string.path)
@@ -83,9 +83,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
it.uri?.let { uri -> it.uri?.let { uri ->
alert(R.string.export_success) { alert(R.string.export_success) {
if (uri.toString().isAbsUrl()) { if (uri.toString().isAbsUrl()) {
DirectLinkUpload.getSummary()?.let { summary -> setMessage(DirectLinkUpload.getSummary())
setMessage(summary)
}
} }
val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply { val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
editView.hint = getString(R.string.path) editView.hint = getString(R.string.path)
@@ -58,9 +58,7 @@ class TxtTocRuleActivity : VMBaseActivity<ActivityTxtTocRuleBinding, TxtTocRuleV
it.uri?.let { uri -> it.uri?.let { uri ->
alert(R.string.export_success) { alert(R.string.export_success) {
if (uri.toString().isAbsUrl()) { if (uri.toString().isAbsUrl()) {
DirectLinkUpload.getSummary()?.let { summary -> setMessage(DirectLinkUpload.getSummary())
setMessage(summary)
}
} }
val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply { val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
editView.hint = getString(R.string.path) editView.hint = getString(R.string.path)
@@ -1,19 +1,24 @@
package io.legado.app.ui.config package io.legado.app.ui.config
import android.os.Bundle import android.os.Bundle
import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.databinding.DialogDirectLinkUploadConfigBinding import io.legado.app.databinding.DialogDirectLinkUploadConfigBinding
import io.legado.app.help.DirectLinkUpload import io.legado.app.help.DirectLinkUpload
import io.legado.app.lib.dialogs.selector
import io.legado.app.lib.theme.primaryColor import io.legado.app.lib.theme.primaryColor
import io.legado.app.utils.applyTint
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
import io.legado.app.utils.toastOnUi import io.legado.app.utils.toastOnUi
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import splitties.views.onClick import splitties.views.onClick
class DirectLinkUploadConfig : BaseDialogFragment(R.layout.dialog_direct_link_upload_config) { class DirectLinkUploadConfig : BaseDialogFragment(R.layout.dialog_direct_link_upload_config),
Toolbar.OnMenuItemClickListener {
private val binding by viewBinding(DialogDirectLinkUploadConfigBinding::bind) private val binding by viewBinding(DialogDirectLinkUploadConfigBinding::bind)
@@ -24,11 +29,10 @@ class DirectLinkUploadConfig : BaseDialogFragment(R.layout.dialog_direct_link_up
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) binding.toolBar.setBackgroundColor(primaryColor)
DirectLinkUpload.getRule()?.let { binding.toolBar.inflateMenu(R.menu.direct_link_upload_config)
binding.editUploadUrl.setText(it.uploadUrl) binding.toolBar.menu.applyTint(requireContext())
binding.editDownloadUrlRule.setText(it.downloadUrlRule) binding.toolBar.setOnMenuItemClickListener(this)
binding.editSummary.setText(it.summary) upView(DirectLinkUpload.getRule())
}
binding.tvCancel.onClick { binding.tvCancel.onClick {
dismiss() dismiss()
} }
@@ -37,19 +41,48 @@ class DirectLinkUploadConfig : BaseDialogFragment(R.layout.dialog_direct_link_up
dismiss() dismiss()
} }
binding.tvOk.onClick { binding.tvOk.onClick {
val uploadUrl = binding.editUploadUrl.text?.toString() getRule()?.let { rule ->
val downloadUrlRule = binding.editDownloadUrlRule.text?.toString() DirectLinkUpload.putConfig(rule)
val summary = binding.editSummary.text?.toString() dismiss()
if (uploadUrl.isNullOrBlank()) {
toastOnUi("上传Url不能为空")
return@onClick
} }
if (downloadUrlRule.isNullOrBlank()) { }
toastOnUi("下载Url规则不能为空") }
return@onClick
} override fun onMenuItemClick(item: MenuItem?): Boolean {
DirectLinkUpload.putConfig(uploadUrl, downloadUrlRule, summary) when (item?.itemId) {
dismiss() R.id.menu_import_default -> importDefault()
}
return true
}
private fun upView(rule: DirectLinkUpload.Rule) {
binding.editUploadUrl.setText(rule.uploadUrl)
binding.editDownloadUrlRule.setText(rule.downloadUrlRule)
binding.editSummary.setText(rule.summary)
}
private fun getRule(): DirectLinkUpload.Rule? {
val uploadUrl = binding.editUploadUrl.text?.toString()
val downloadUrlRule = binding.editDownloadUrlRule.text?.toString()
val summary = binding.editSummary.text?.toString()
if (uploadUrl.isNullOrBlank()) {
toastOnUi("上传Url不能为空")
return null
}
if (downloadUrlRule.isNullOrBlank()) {
toastOnUi("下载Url规则不能为空")
return null
}
if (summary.isNullOrBlank()) {
toastOnUi("注释不能为空")
return null
}
return DirectLinkUpload.Rule(uploadUrl, downloadUrlRule, summary)
}
private fun importDefault() {
requireContext().selector(DirectLinkUpload.defaultRules) { _, rule, _ ->
upView(rule)
} }
} }
@@ -59,9 +59,7 @@ class DictRuleActivity : VMBaseActivity<ActivityDictRuleBinding, DictRuleViewMod
it.uri?.let { uri -> it.uri?.let { uri ->
alert(R.string.export_success) { alert(R.string.export_success) {
if (uri.toString().isAbsUrl()) { if (uri.toString().isAbsUrl()) {
DirectLinkUpload.getSummary()?.let { summary -> setMessage(DirectLinkUpload.getSummary())
setMessage(summary)
}
} }
val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply { val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
editView.hint = getString(R.string.path) editView.hint = getString(R.string.path)
@@ -47,9 +47,7 @@ abstract class BaseBookshelfFragment(layoutId: Int) : VMBaseFragment<BookshelfVi
it.uri?.let { uri -> it.uri?.let { uri ->
alert(R.string.export_success) { alert(R.string.export_success) {
if (uri.toString().isAbsUrl()) { if (uri.toString().isAbsUrl()) {
DirectLinkUpload.getSummary()?.let { summary -> setMessage(DirectLinkUpload.getSummary())
setMessage(summary)
}
} }
val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply { val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
editView.hint = getString(R.string.path) editView.hint = getString(R.string.path)
@@ -90,9 +90,7 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
it.uri?.let { uri -> it.uri?.let { uri ->
alert(R.string.export_success) { alert(R.string.export_success) {
if (uri.toString().isAbsUrl()) { if (uri.toString().isAbsUrl()) {
DirectLinkUpload.getSummary()?.let { summary -> setMessage(DirectLinkUpload.getSummary())
setMessage(summary)
}
} }
val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply { val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
editView.hint = getString(R.string.path) editView.hint = getString(R.string.path)
@@ -78,9 +78,7 @@ class RssSourceActivity : VMBaseActivity<ActivityRssSourceBinding, RssSourceView
it.uri?.let { uri -> it.uri?.let { uri ->
alert(R.string.export_success) { alert(R.string.export_success) {
if (uri.toString().isAbsUrl()) { if (uri.toString().isAbsUrl()) {
DirectLinkUpload.getSummary()?.let { summary -> setMessage(DirectLinkUpload.getSummary())
setMessage(summary)
}
} }
val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply { val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
editView.hint = getString(R.string.path) editView.hint = getString(R.string.path)
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_import_default"
android:title="@string/import_default_rule"
app:showAsAction="never" />
</menu>