diff --git a/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt b/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt index eda0978df..889197060 100644 --- a/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt +++ b/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt @@ -1,5 +1,6 @@ package io.legado.app.help.source +import com.script.rhino.runScriptWithContext import io.legado.app.constant.BookSourceType import io.legado.app.constant.BookType import io.legado.app.data.entities.BookSource @@ -11,7 +12,6 @@ import io.legado.app.utils.MD5Utils import io.legado.app.utils.fromJsonArray import io.legado.app.utils.isJsonArray import io.legado.app.utils.printOnDebug -import com.script.rhino.runScriptWithContext import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock @@ -96,6 +96,14 @@ suspend fun BookSourcePart.clearExploreKindsCache() { } } +suspend fun BookSource.clearExploreKindsCache() { + withContext(Dispatchers.IO) { + val exploreKindsKey = getExploreKindsKey() + aCache.remove(exploreKindsKey) + exploreKindsMap.remove(exploreKindsKey) + } +} + fun BookSource.getBookType(): Int { return when (bookSourceType) { BookSourceType.file -> BookType.text or BookType.webFile diff --git a/app/src/main/java/io/legado/app/model/SharedJsScope.kt b/app/src/main/java/io/legado/app/model/SharedJsScope.kt index 3ddee85ce..36b6388a1 100644 --- a/app/src/main/java/io/legado/app/model/SharedJsScope.kt +++ b/app/src/main/java/io/legado/app/model/SharedJsScope.kt @@ -1,5 +1,6 @@ package io.legado.app.model +import androidx.collection.LruCache import com.google.gson.reflect.TypeToken import com.script.ScriptBindings import com.script.rhino.RhinoScriptEngine @@ -24,7 +25,7 @@ object SharedJsScope { private val cacheFolder = File(appCtx.cacheDir, "shareJs") private val aCache = ACache.get(cacheFolder) - private val scopeMap = hashMapOf>() + private val scopeMap = LruCache>(16) fun getScope(jsLib: String?, coroutineContext: CoroutineContext?): Scriptable? { if (jsLib.isNullOrBlank()) { @@ -70,7 +71,7 @@ object SharedJsScope { if (scope is ScriptableObject) { scope.sealObject() } - scopeMap[key] = WeakReference(scope) + scopeMap.put(key, WeakReference(scope)) } return scope } diff --git a/app/src/main/java/io/legado/app/ui/book/source/debug/BookSourceDebugActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/debug/BookSourceDebugActivity.kt index 137227563..6b8ec5928 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/debug/BookSourceDebugActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/debug/BookSourceDebugActivity.kt @@ -11,6 +11,7 @@ import androidx.lifecycle.lifecycleScope import io.legado.app.R import io.legado.app.base.VMBaseActivity import io.legado.app.databinding.ActivitySourceDebugBinding +import io.legado.app.help.source.clearExploreKindsCache import io.legado.app.help.source.exploreKinds import io.legado.app.lib.dialogs.selector import io.legado.app.lib.theme.accentColor @@ -117,6 +118,10 @@ class BookSourceDebugActivity : VMBaseActivity showDialogFragment(TextDialog("html", viewModel.bookSrc)) R.id.menu_toc_src -> showDialogFragment(TextDialog("html", viewModel.tocSrc)) R.id.menu_content_src -> showDialogFragment(TextDialog("html", viewModel.contentSrc)) + R.id.menu_refresh_explore -> lifecycleScope.launch { + viewModel.bookSource?.clearExploreKindsCache() + initExploreKinds() + } R.id.menu_help -> showHelp("debugHelp") } return super.onCompatOptionsItemSelected(item) diff --git a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt index 2eeec34eb..0f9760e1d 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt @@ -123,7 +123,7 @@ class BookSourceEditActivity : override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.menu_save -> viewModel.save(getSource()) { - setResult(Activity.RESULT_OK, Intent().putExtra("origin", it.bookSourceUrl)) + setResult(RESULT_OK, Intent().putExtra("origin", it.bookSourceUrl)) finish() } diff --git a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditViewModel.kt b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditViewModel.kt index 4def14d01..80c043064 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditViewModel.kt @@ -12,8 +12,18 @@ import io.legado.app.help.config.SourceConfig import io.legado.app.help.http.CookieStore import io.legado.app.help.http.newCallStrResponse import io.legado.app.help.http.okHttpClient +import io.legado.app.help.source.clearExploreKindsCache import io.legado.app.help.storage.ImportOldData -import io.legado.app.utils.* +import io.legado.app.utils.GSON +import io.legado.app.utils.fromJsonArray +import io.legado.app.utils.fromJsonObject +import io.legado.app.utils.getClipText +import io.legado.app.utils.isAbsUrl +import io.legado.app.utils.isJsonArray +import io.legado.app.utils.isJsonObject +import io.legado.app.utils.jsonPath +import io.legado.app.utils.printOnDebug +import io.legado.app.utils.toastOnUi import kotlinx.coroutines.Dispatchers @@ -41,8 +51,12 @@ class BookSourceEditViewModel(application: Application) : BaseViewModel(applicat if (source.bookSourceUrl.isBlank() || source.bookSourceName.isBlank()) { throw NoStackTraceException(context.getString(R.string.non_null_name_url)) } - if (!source.equal(bookSource ?: BookSource())) { + val oldSource = bookSource ?: BookSource() + if (!source.equal(oldSource)) { source.lastUpdateTime = System.currentTimeMillis() + if (oldSource.exploreUrl != source.exploreUrl) { + oldSource.clearExploreKindsCache() + } } bookSource?.let { appDb.bookSourceDao.delete(it) diff --git a/app/src/main/res/menu/book_source_debug.xml b/app/src/main/res/menu/book_source_debug.xml index ec7878377..61d06c578 100644 --- a/app/src/main/res/menu/book_source_debug.xml +++ b/app/src/main/res/menu/book_source_debug.xml @@ -30,6 +30,11 @@ android:title="@string/content_src" app:showAsAction="never" /> + + 水平滚动 滤镜 隐藏漫画列表标题 + 刷新发现 diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 7034b8357..c3651790c 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -1212,4 +1212,5 @@ 水平滚动 滤镜 隐藏漫画列表标题 + 刷新发现 diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 41e8b0332..b3bd0b2ae 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1212,4 +1212,5 @@ 水平滚动 滤镜 隐藏漫画列表标题 + 刷新发现 diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 107051a80..329ec0d70 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1208,4 +1208,5 @@ Còn 水平滚动 滤镜 隐藏漫画列表标题 + 刷新发现 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index fbdaf3635..ecec94f69 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -1209,4 +1209,5 @@ 水平滚动 滤镜 隐藏漫画列表标题 + 刷新发现 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 9f35179ce..261653317 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1211,4 +1211,5 @@ 水平滚动 滤镜 隐藏漫画列表标题 + 刷新发现 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index c8fce01b0..c4ca202ec 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1211,4 +1211,5 @@ 水平滚动 滤镜 隐藏漫画列表标题 + 刷新发现 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 107fd8481..1f23e8e14 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1212,4 +1212,5 @@ 水平滚动 滤镜 隐藏漫画列表标题 + 刷新发现