kunfei 3 år sedan
förälder
incheckning
3e1e74e736

+ 11 - 6
app/src/main/java/io/legado/app/help/DirectLinkUpload.kt

@@ -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?) {
-        val rule = Rule(uploadUrl, downloadUrlRule, summary)
+    fun putConfig(rule: Rule) {
         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
+        }
+
+    }
 
 
 }
 }

+ 1 - 3
app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt

@@ -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(summary)
-                    }
+                    setMessage(DirectLinkUpload.getSummary())
                 }
                 }
                 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 - 3
app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt

@@ -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(summary)
-                    }
+                    setMessage(DirectLinkUpload.getSummary())
                 }
                 }
                 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 - 3
app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleActivity.kt

@@ -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(summary)
-                    }
+                    setMessage(DirectLinkUpload.getSummary())
                 }
                 }
                 val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
                 val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
                     editView.hint = getString(R.string.path)
                     editView.hint = getString(R.string.path)

+ 51 - 18
app/src/main/java/io/legado/app/ui/config/DirectLinkUploadConfig.kt

@@ -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.editUploadUrl.setText(it.uploadUrl)
-            binding.editDownloadUrlRule.setText(it.downloadUrlRule)
-            binding.editSummary.setText(it.summary)
-        }
+        binding.toolBar.inflateMenu(R.menu.direct_link_upload_config)
+        binding.toolBar.menu.applyTint(requireContext())
+        binding.toolBar.setOnMenuItemClickListener(this)
+        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()
-            val downloadUrlRule = binding.editDownloadUrlRule.text?.toString()
-            val summary = binding.editSummary.text?.toString()
-            if (uploadUrl.isNullOrBlank()) {
-                toastOnUi("上传Url不能为空")
-                return@onClick
-            }
-            if (downloadUrlRule.isNullOrBlank()) {
-                toastOnUi("下载Url规则不能为空")
-                return@onClick
+            getRule()?.let { rule ->
+                DirectLinkUpload.putConfig(rule)
+                dismiss()
             }
             }
-            DirectLinkUpload.putConfig(uploadUrl, downloadUrlRule, summary)
-            dismiss()
+        }
+    }
+
+    override fun onMenuItemClick(item: MenuItem?): Boolean {
+        when (item?.itemId) {
+            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)
         }
         }
     }
     }
 
 

+ 1 - 3
app/src/main/java/io/legado/app/ui/dict/rule/DictRuleActivity.kt

@@ -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(summary)
-                    }
+                    setMessage(DirectLinkUpload.getSummary())
                 }
                 }
                 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 - 3
app/src/main/java/io/legado/app/ui/main/bookshelf/BaseBookshelfFragment.kt

@@ -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(summary)
-                    }
+                    setMessage(DirectLinkUpload.getSummary())
                 }
                 }
                 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 - 3
app/src/main/java/io/legado/app/ui/replace/ReplaceRuleActivity.kt

@@ -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(summary)
-                    }
+                    setMessage(DirectLinkUpload.getSummary())
                 }
                 }
                 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 - 3
app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt

@@ -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(summary)
-                    }
+                    setMessage(DirectLinkUpload.getSummary())
                 }
                 }
                 val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
                 val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
                     editView.hint = getString(R.string.path)
                     editView.hint = getString(R.string.path)

+ 10 - 0
app/src/main/res/menu/direct_link_upload_config.xml

@@ -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>