diff --git a/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt b/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt index 470f95273..044644a91 100644 --- a/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt +++ b/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt @@ -280,6 +280,12 @@ interface BookSourceDao { @get:Query("select max(customOrder) from book_sources") val maxOrder: Int + @get:Query( + """select exists (select 1 + from book_sources group by customOrder having count(customOrder) > 1)""" + ) + val hasDuplicateOrder: Boolean + @Query("update book_sources set enabled = :enable where bookSourceUrl = :bookSourceUrl") fun enable(bookSourceUrl: String, enable: Boolean) diff --git a/app/src/main/java/io/legado/app/help/source/SourceHelp.kt b/app/src/main/java/io/legado/app/help/source/SourceHelp.kt index 7d755651f..8a5b630b7 100644 --- a/app/src/main/java/io/legado/app/help/source/SourceHelp.kt +++ b/app/src/main/java/io/legado/app/help/source/SourceHelp.kt @@ -1,7 +1,5 @@ package io.legado.app.help.source -import android.os.Handler -import android.os.Looper import io.legado.app.data.appDb import io.legado.app.data.entities.BaseSource import io.legado.app.data.entities.BookSource @@ -14,15 +12,14 @@ import splitties.init.appCtx object SourceHelp { - private val handler = Handler(Looper.getMainLooper()) private val list18Plus by lazy { try { return@lazy String(appCtx.assets.open("18PlusList.txt").readBytes()) .splitNotBlank("\n").map { EncoderUtils.base64Decode(it) }.toHashSet() - } catch (e: Exception) { - return@lazy hashSetOf() + } catch (_: Exception) { + return@lazy emptySet() } } @@ -37,9 +34,7 @@ object SourceHelp { is18Plus(it.sourceUrl) } rssSourcesGroup[true]?.forEach { - handler.post { - appCtx.toastOnUi("${it.sourceName}是18+网址,禁止导入.") - } + appCtx.toastOnUi("${it.sourceName}是18+网址,禁止导入.") } rssSourcesGroup[false]?.let { appDb.rssSourceDao.insert(*it.toTypedArray()) @@ -51,16 +46,18 @@ object SourceHelp { is18Plus(it.bookSourceUrl) } bookSourcesGroup[true]?.forEach { - handler.post { - appCtx.toastOnUi("${it.bookSourceName}是18+网址,禁止导入.") - } + appCtx.toastOnUi("${it.bookSourceName}是18+网址,禁止导入.") } bookSourcesGroup[false]?.let { appDb.bookSourceDao.insert(*it.toTypedArray()) } + adjustSortNumber() } private fun is18Plus(url: String?): Boolean { + if (list18Plus.isEmpty()) { + return false + } url ?: return false val baseUrl = NetworkUtils.getBaseUrl(url) ?: return false kotlin.runCatching { @@ -79,6 +76,7 @@ object SourceHelp { if ( appDb.bookSourceDao.maxOrder > 99999 || appDb.bookSourceDao.minOrder < -99999 + || appDb.bookSourceDao.hasDuplicateOrder ) { val sources = appDb.bookSourceDao.allPart sources.forEachIndexed { index, bookSource -> diff --git a/app/src/main/java/io/legado/app/ui/association/ImportBookSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/association/ImportBookSourceViewModel.kt index e419826ee..9eaa513cc 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportBookSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportBookSourceViewModel.kt @@ -11,6 +11,7 @@ import io.legado.app.constant.AppLog import io.legado.app.constant.AppPattern import io.legado.app.data.appDb import io.legado.app.data.entities.BookSource +import io.legado.app.data.entities.BookSourcePart import io.legado.app.exception.NoStackTraceException import io.legado.app.help.book.ContentProcessor import io.legado.app.help.config.AppConfig @@ -36,7 +37,7 @@ class ImportBookSourceViewModel(app: Application) : BaseViewModel(app) { val successLiveData = MutableLiveData() val allSources = arrayListOf() - val checkSources = arrayListOf() + val checkSources = arrayListOf() val selectStatus = arrayListOf() val newSourceStatus = arrayListOf() val updateSourceStatus = arrayListOf() @@ -207,7 +208,7 @@ class ImportBookSourceViewModel(app: Application) : BaseViewModel(app) { private fun comparisonSource() { execute { allSources.forEach { - val source = appDb.bookSourceDao.getBookSource(it.bookSourceUrl) + val source = appDb.bookSourceDao.getBookSourcePart(it.bookSourceUrl) checkSources.add(source) selectStatus.add(source == null || source.lastUpdateTime < it.lastUpdateTime) newSourceStatus.add(source == null)