Horis 1 год назад
Родитель
Сommit
70363c652e

+ 22 - 0
app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt

@@ -7,6 +7,7 @@ import android.view.MenuItem
 import android.view.View
 import android.view.ViewGroup
 import androidx.appcompat.widget.Toolbar
+import androidx.fragment.app.viewModels
 import com.bumptech.glide.load.DataSource
 import com.bumptech.glide.load.engine.DiskCacheStrategy
 import com.bumptech.glide.load.engine.GlideException
@@ -19,6 +20,7 @@ import io.legado.app.databinding.DialogVerificationCodeViewBinding
 import io.legado.app.help.glide.ImageLoader
 import io.legado.app.help.glide.OkHttpModelLoader
 import io.legado.app.help.source.SourceVerificationHelp
+import io.legado.app.lib.dialogs.alert
 import io.legado.app.lib.theme.primaryColor
 import io.legado.app.model.ImageProvider
 import io.legado.app.ui.widget.dialog.PhotoDialog
@@ -49,6 +51,7 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification
     }
 
     val binding by viewBinding(DialogVerificationCodeViewBinding::bind)
+    val viewModel by viewModels<VerificationCodeViewModel>()
 
     override fun onStart() {
         super.onStart()
@@ -60,6 +63,7 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification
     override fun onFragmentCreated(view: View, savedInstanceState: Bundle?): Unit = binding.run {
         initMenu()
         val arguments = arguments ?: return@run
+        viewModel.initData(arguments)
         toolBar.setBackgroundColor(primaryColor)
         toolBar.subtitle = arguments.getString("sourceName")
         sourceOrigin = arguments.getString("sourceOrigin")
@@ -119,6 +123,24 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification
                 SourceVerificationHelp.setResult(sourceOrigin!!, verificationCode)
                 dismiss()
             }
+
+            R.id.menu_disable_source -> {
+                viewModel.disableSource {
+                    dismiss()
+                }
+            }
+
+            R.id.menu_delete_source -> {
+                alert(R.string.draw) {
+                    setMessage(getString(R.string.sure_del) + "\n" + viewModel.sourceName)
+                    noButton()
+                    yesButton {
+                        viewModel.deleteSource {
+                            dismiss()
+                        }
+                    }
+                }
+            }
         }
         return false
     }

+ 34 - 0
app/src/main/java/io/legado/app/ui/association/VerificationCodeViewModel.kt

@@ -0,0 +1,34 @@
+package io.legado.app.ui.association
+
+import android.app.Application
+import android.os.Bundle
+import io.legado.app.base.BaseViewModel
+import io.legado.app.data.appDb
+
+class VerificationCodeViewModel(app: Application): BaseViewModel(app) {
+
+    var sourceOrigin = ""
+    var sourceName = ""
+
+    fun initData(arguments: Bundle) {
+        sourceName = arguments.getString("sourceName") ?: ""
+        sourceOrigin = arguments.getString("sourceOrigin") ?: ""
+    }
+
+    fun disableSource(block: () -> Unit) {
+        execute {
+            appDb.bookSourceDao.enable(sourceOrigin, false)
+        }.onSuccess {
+            block.invoke()
+        }
+    }
+
+    fun deleteSource(block: () -> Unit) {
+        execute {
+            appDb.bookSourceDao.delete(sourceOrigin)
+        }.onSuccess {
+            block.invoke()
+        }
+    }
+
+}

+ 26 - 0
app/src/main/java/io/legado/app/ui/browser/WebViewActivity.kt

@@ -30,6 +30,7 @@ import io.legado.app.help.config.AppConfig
 import io.legado.app.help.http.CookieStore
 import io.legado.app.help.source.SourceVerificationHelp
 import io.legado.app.lib.dialogs.SelectItem
+import io.legado.app.lib.dialogs.alert
 import io.legado.app.lib.theme.accentColor
 import io.legado.app.model.Download
 import io.legado.app.ui.association.OnLineImportActivity
@@ -102,6 +103,14 @@ class WebViewActivity : VMBaseActivity<ActivityWebViewBinding, WebViewModel>() {
         return super.onCompatCreateOptionsMenu(menu)
     }
 
+    override fun onPrepareOptionsMenu(menu: Menu): Boolean {
+        if (viewModel.sourceOrigin.isNotEmpty()) {
+            menu.findItem(R.id.menu_disable_source)?.isVisible = true
+            menu.findItem(R.id.menu_delete_source)?.isVisible = true
+        }
+        return super.onPrepareOptionsMenu(menu)
+    }
+
     override fun onCompatOptionsItemSelected(item: MenuItem): Boolean {
         when (item.itemId) {
             R.id.menu_open_in_browser -> openUrl(viewModel.baseUrl)
@@ -117,6 +126,23 @@ class WebViewActivity : VMBaseActivity<ActivityWebViewBinding, WebViewModel>() {
             }
 
             R.id.menu_full_screen -> toggleFullScreen()
+            R.id.menu_disable_source -> {
+                viewModel.disableSource {
+                    finish()
+                }
+            }
+
+            R.id.menu_delete_source -> {
+                alert(R.string.draw) {
+                    setMessage(getString(R.string.sure_del) + "\n" + viewModel.sourceName)
+                    noButton()
+                    yesButton {
+                        viewModel.deleteSource {
+                            finish()
+                        }
+                    }
+                }
+            }
         }
         return super.onCompatOptionsItemSelected(item)
     }

+ 18 - 0
app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt

@@ -33,6 +33,7 @@ class WebViewModel(application: Application) : BaseViewModel(application) {
     val headerMap: HashMap<String, String> = hashMapOf()
     var sourceVerificationEnable: Boolean = false
     var refetchAfterSuccess: Boolean = true
+    var sourceName: String = ""
     var sourceOrigin: String = ""
 
     fun initData(
@@ -43,6 +44,7 @@ class WebViewModel(application: Application) : BaseViewModel(application) {
             this@WebViewModel.intent = intent
             val url = intent.getStringExtra("url")
                 ?: throw NoStackTraceException("url不能为空")
+            sourceName = intent.getStringExtra("sourceName") ?: ""
             sourceOrigin = intent.getStringExtra("sourceOrigin") ?: ""
             sourceVerificationEnable = intent.getBooleanExtra("sourceVerificationEnable", false)
             refetchAfterSuccess = intent.getBooleanExtra("refetchAfterSuccess", true)
@@ -123,4 +125,20 @@ class WebViewModel(application: Application) : BaseViewModel(application) {
         }
     }
 
+    fun disableSource(block: () -> Unit) {
+        execute {
+            appDb.bookSourceDao.enable(sourceOrigin, false)
+        }.onSuccess {
+            block.invoke()
+        }
+    }
+
+    fun deleteSource(block: () -> Unit) {
+        execute {
+            appDb.bookSourceDao.delete(sourceOrigin)
+        }.onSuccess {
+            block.invoke()
+        }
+    }
+
 }

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

@@ -10,4 +10,14 @@
         android:title="@string/ok"
         app:showAsAction="always" />
 
+    <item
+        android:id="@+id/menu_disable_source"
+        android:title="@string/disable_source"
+        app:showAsAction="never" />
+
+    <item
+        android:id="@+id/menu_delete_source"
+        android:title="@string/delete_source"
+        app:showAsAction="never" />
+
 </menu>

+ 12 - 0
app/src/main/res/menu/web_view.xml

@@ -23,4 +23,16 @@
         android:title="@string/full_screen"
         app:showAsAction="never" />
 
+    <item
+        android:id="@+id/menu_disable_source"
+        android:title="@string/disable_source"
+        android:visible="false"
+        app:showAsAction="never" />
+
+    <item
+        android:id="@+id/menu_delete_source"
+        android:title="@string/delete_source"
+        android:visible="false"
+        app:showAsAction="never" />
+
 </menu>