diff --git a/app/src/main/java/io/legado/app/data/dao/CacheDao.kt b/app/src/main/java/io/legado/app/data/dao/CacheDao.kt index 863199b75..7ebd9bbd9 100644 --- a/app/src/main/java/io/legado/app/data/dao/CacheDao.kt +++ b/app/src/main/java/io/legado/app/data/dao/CacheDao.kt @@ -9,6 +9,9 @@ import io.legado.app.data.entities.Cache @Dao interface CacheDao { + @Query("select * from caches where `key` = :key") + fun get(key: String): Cache? + @Query("select value from caches where `key` = :key and (deadline = 0 or deadline > :now)") fun get(key: String, now: Long): String? diff --git a/app/src/main/java/io/legado/app/help/CacheManager.kt b/app/src/main/java/io/legado/app/help/CacheManager.kt index 3a4bf6ea1..e9e597648 100644 --- a/app/src/main/java/io/legado/app/help/CacheManager.kt +++ b/app/src/main/java/io/legado/app/help/CacheManager.kt @@ -41,15 +41,23 @@ object CacheManager { } fun get(key: String): String? { - return getFromMemory(key) ?: appDb.cacheDao.get(key, System.currentTimeMillis()) + getFromMemory(key)?.let { + return it + } + val cache = appDb.cacheDao.get(key) + if (cache != null && (cache.deadline == 0L || cache.deadline > System.currentTimeMillis())) { + memoryLruCache.put(key, cache) + return cache.value + } + return null } - //从内存中获取数据 使用lrucache 支持过期功能 + //从内存中获取数据 使用lruCache 支持过期功能 private fun getFromMemory(key: String): String? { val cache = memoryLruCache.get(key) ?: return null - val deadline = cache!!.deadline + val deadline = cache.deadline return if (deadline == 0L || deadline > System.currentTimeMillis()) { - cache!!.value + cache.value } else { memoryLruCache.remove(key) null diff --git a/app/src/main/java/io/legado/app/help/SourceVerificationHelp.kt b/app/src/main/java/io/legado/app/help/SourceVerificationHelp.kt index 3f3a302dc..8efbf914b 100644 --- a/app/src/main/java/io/legado/app/help/SourceVerificationHelp.kt +++ b/app/src/main/java/io/legado/app/help/SourceVerificationHelp.kt @@ -1,13 +1,13 @@ package io.legado.app.help -import io.legado.app.utils.startActivity import io.legado.app.constant.AppLog -import io.legado.app.exception.NoStackTraceException import io.legado.app.data.entities.BaseSource -import io.legado.app.ui.browser.WebViewActivity +import io.legado.app.exception.NoStackTraceException import io.legado.app.ui.association.VerificationCodeActivity -import splitties.init.appCtx +import io.legado.app.ui.browser.WebViewActivity +import io.legado.app.utils.startActivity import kotlinx.coroutines.runBlocking +import splitties.init.appCtx object SourceVerificationHelp { @@ -19,13 +19,13 @@ object SourceVerificationHelp { fun getVerificationResult(source: BaseSource?, url: String, title: String, useBrowser: Boolean): String { source ?: throw NoStackTraceException("getVerificationResult parameter source cannot be null") return runBlocking { - val key = "${source?.getKey() ?: ""}_verificationResult" + val key = "${source.getKey()}_verificationResult" CacheManager.delete(key) if (!useBrowser) { appCtx.startActivity { putExtra("imageUrl", url) - putExtra("sourceOrigin", source?.getKey()) + putExtra("sourceOrigin", source.getKey()) } } else { startBrowser(source, url, title, true) @@ -39,10 +39,8 @@ object SourceVerificationHelp { } } CacheManager.get(key)!!.let { - if (it.isBlank()) { + it.ifBlank { throw NoStackTraceException("验证结果为空") - } else { - it } } } @@ -57,9 +55,9 @@ object SourceVerificationHelp { appCtx.startActivity { putExtra("title", title) putExtra("url", url) - putExtra("sourceOrigin", source?.getKey()) + putExtra("sourceOrigin", source.getKey()) putExtra("sourceVerificationEnable", saveResult) - IntentData.put(url, source?.getHeaderMap(true)) + IntentData.put(url, source.getHeaderMap(true)) } } diff --git a/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt b/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt index 918747a46..a38f17cfc 100644 --- a/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt @@ -1,9 +1,9 @@ package io.legado.app.ui.association +import android.annotation.SuppressLint import android.os.Bundle import android.view.View import android.view.ViewGroup -import android.net.Uri import com.bumptech.glide.request.RequestOptions import io.legado.app.R import io.legado.app.base.BaseDialogFragment @@ -39,11 +39,12 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification setLayout(1f, ViewGroup.LayoutParams.WRAP_CONTENT) } + @SuppressLint("CheckResult") override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { binding.run { toolBar.setBackgroundColor(primaryColor) val sourceOrigin = arguments?.getString("sourceOrigin") - val key = "${sourceOrigin ?: ""}_verificationResult" + val key = "${sourceOrigin}_verificationResult" arguments?.getString("imageUrl")?.let { imageUrl -> ImageLoader.load(requireContext(), imageUrl).apply { sourceOrigin?.let {