@ -528,8 +528,10 @@ class AnalyzeUrl(
val domain = NetworkUtils.getSubDomain(tag ?: url)
//书源启用保存cookie时 添加内存中的cookie到数据库
if (enabledCookieJar) {
CacheManager.getFromMemory("${domain}_cookieJar")?.let {
val key = "${domain}_cookieJar"
CacheManager.getFromMemory(key)?.let {
CookieStore.replaceCookie(domain, it)
CacheManager.deleteMemory(key)
}
val cookie = CookieStore.getCookie(domain)
@ -75,7 +75,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
upCoverByRule(book)
bookSource = if (book.isLocalBook()) null else
appDb.bookSourceDao.getBookSource(book.origin)
isImportBookOnLine = bookSource?.bookSourceType ?: BookType.local == BookType.file
isImportBookOnLine = (bookSource?.bookSourceType ?: BookType.local) == BookType.file
if (book.tocUrl.isEmpty()) {
loadBookInfo(book)
} else if (!isImportBookOnLine) {
@ -111,7 +111,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
execute(scope) {
if (book.isLocalBook()) {
loadChapter(book, scope)
} else {
bookSource?.let { bookSource ->
WebBook.getBookInfo(this, bookSource, book, canReName = canReName)
.onSuccess(IO) {
@ -32,6 +32,7 @@ import io.legado.app.utils.*
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.launch
import splitties.init.appCtx
import kotlin.collections.set
class BackupConfigFragment : PreferenceFragment(),
SharedPreferences.OnSharedPreferenceChangeListener {
@ -209,7 +210,9 @@ class BackupConfigFragment : PreferenceFragment(),
return super.onPreferenceTreeClick(preference)
/**
* 备份忽略设置
*/
private fun backupIgnore() {
val checkedItems = BooleanArray(BackupConfig.ignoreKeys.size) {
BackupConfig.ignoreConfig[BackupConfig.ignoreKeys[it]] ?: false
@ -6,6 +6,7 @@ import android.content.SharedPreferences
import android.content.pm.PackageManager
import android.os.Bundle
import android.view.View
import androidx.core.view.postDelayed
import androidx.fragment.app.activityViewModels
import androidx.preference.ListPreference
import androidx.preference.Preference
@ -131,9 +132,9 @@ class OtherConfigFragment : PreferenceFragment(),
setProcessTextEnable(it.getBoolean(key, true))
PreferKey.showDiscovery, PreferKey.showRss -> postEvent(EventBus.NOTIFY_MAIN, true)
PreferKey.language -> listView.postDelayed({
PreferKey.language -> listView.postDelayed(1000) {
appCtx.restart()
}, 1000)
PreferKey.userAgent -> listView.post {
upPreferenceSummary(PreferKey.userAgent, AppConfig.userAgent)
@ -8,6 +8,7 @@ import android.view.KeyEvent
import android.view.MenuItem
import android.view.ViewGroup
import androidx.activity.viewModels
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentStatePagerAdapter
@ -87,13 +88,13 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
upVersion()
//自动更新书籍
if (AppConfig.autoRefreshBook) {
binding.viewPagerMain.postDelayed({
binding.viewPagerMain.postDelayed(1000) {
viewModel.upAllBookToc()
binding.viewPagerMain.postDelayed(3000) {
viewModel.postLoad()
}, 3000)
launch {
val lastBackupFile = withContext(IO) { AppWebDav.lastBackUp().getOrNull() }
?: return@launch
@ -3,6 +3,7 @@ package io.legado.app.ui.welcome
import android.content.Intent
import android.graphics.drawable.BitmapDrawable
import io.legado.app.base.BaseActivity
import io.legado.app.constant.PreferKey
import io.legado.app.constant.Theme
@ -26,7 +27,7 @@ open class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
if (intent.flags and Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT != 0) {
finish()
binding.root.postDelayed({ startMainActivity() }, 600)
binding.root.postDelayed(600) { startMainActivity() }
@ -7,6 +7,7 @@ import android.util.AttributeSet
import android.view.animation.LinearInterpolator
import android.widget.Checkable
import io.legado.app.R
import io.legado.app.lib.theme.ThemeStore
import io.legado.app.utils.dpToPx
@ -244,7 +245,7 @@ class SmoothCheckBox @JvmOverloads constructor(
// invalidate
if (mDrewDistance < mLeftLineDistance + mRightLineDistance) {
postDelayed({ this.postInvalidate() }, 10)
postDelayed(10) { this.postInvalidate() }
@ -298,10 +299,10 @@ class SmoothCheckBox @JvmOverloads constructor(
private fun drawTickDelayed() {
postDelayed({
postDelayed(mAnimDuration.toLong()) {
mTickDrawing = true
postInvalidate()
}, mAnimDuration.toLong())
companion object {
@ -1,5 +1,6 @@
package io.legado.app.utils
import androidx.core.os.postDelayed
import io.legado.app.exception.RegexTimeoutException
import io.legado.app.help.CrashHandler
import kotlinx.coroutines.suspendCancellableCoroutine
@ -23,20 +24,20 @@ suspend fun CharSequence.replace(regex: Regex, replacement: String, timeout: Lon
block.resumeWithException(e)
mainHandler.postDelayed({
mainHandler.postDelayed(timeout) {
if (thread.isAlive) {
val timeoutMsg = "替换超时,3秒后还未结束将重启应用\n替换规则$regex\n替换内容:${this}"
val exception = RegexTimeoutException(timeoutMsg)
block.cancel(exception)
appCtx.longToastOnUi(timeoutMsg)
CrashHandler.saveCrashInfo2File(exception)
mainHandler.postDelayed(3000) {
}, timeout)