Просмотр исходного кода

refactor: 清零关联导入 DAO 直连

5151561 3 месяцев назад
Родитель
Сommit
9b2cd9a7f9
21 измененных файлов с 123 добавлено и 61 удалено
  1. 6 0
      app/src/main/java/io/legado/app/data/repository/BookSourceRepository.kt
  2. 4 4
      app/src/main/java/io/legado/app/data/repository/DictRuleRepository.kt
  3. 19 0
      app/src/main/java/io/legado/app/data/repository/HttpTtsRepository.kt
  4. 6 0
      app/src/main/java/io/legado/app/data/repository/RssRepository.kt
  5. 9 4
      app/src/main/java/io/legado/app/data/repository/TxtTocRuleRepository.kt
  6. 14 0
      app/src/main/java/io/legado/app/di/appModule.kt
  7. 2 2
      app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt
  8. 7 4
      app/src/main/java/io/legado/app/ui/association/ImportBookSourceViewModel.kt
  9. 3 3
      app/src/main/java/io/legado/app/ui/association/ImportDictRuleDialog.kt
  10. 8 5
      app/src/main/java/io/legado/app/ui/association/ImportDictRuleViewModel.kt
  11. 3 3
      app/src/main/java/io/legado/app/ui/association/ImportHttpTtsDialog.kt
  12. 7 4
      app/src/main/java/io/legado/app/ui/association/ImportHttpTtsViewModel.kt
  13. 3 3
      app/src/main/java/io/legado/app/ui/association/ImportReplaceRuleDialog.kt
  14. 8 5
      app/src/main/java/io/legado/app/ui/association/ImportReplaceRuleViewModel.kt
  15. 2 2
      app/src/main/java/io/legado/app/ui/association/ImportRssSourceDialog.kt
  16. 7 4
      app/src/main/java/io/legado/app/ui/association/ImportRssSourceViewModel.kt
  17. 3 3
      app/src/main/java/io/legado/app/ui/association/ImportTxtTocRuleDialog.kt
  18. 8 5
      app/src/main/java/io/legado/app/ui/association/ImportTxtTocRuleViewModel.kt
  19. 2 2
      app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleViewModel.kt
  20. 2 2
      app/src/main/java/io/legado/app/ui/dict/rule/DictRuleViewModel.kt
  21. 0 6
      build.gradle.kts

+ 6 - 0
app/src/main/java/io/legado/app/data/repository/BookSourceRepository.kt

@@ -35,6 +35,12 @@ class BookSourceRepository(private val bookSourceDao: BookSourceDao) {
         }
     }
 
+    suspend fun getBookSourcePart(sourceUrl: String): BookSourcePart? {
+        return withContext(Dispatchers.IO) {
+            bookSourceDao.getBookSourcePart(sourceUrl)
+        }
+    }
+
     fun getBookSourceSync(sourceUrl: String): BookSource? {
         return bookSourceDao.getBookSource(sourceUrl)
     }

+ 4 - 4
app/src/main/java/io/legado/app/data/repository/DictRuleRepository.kt

@@ -1,14 +1,14 @@
 package io.legado.app.data.repository
 
-import io.legado.app.data.appDb
+import io.legado.app.data.dao.DictRuleDao
 import io.legado.app.data.entities.DictRule
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.withContext
 
-class DictRuleRepository {
-
-    private val dao = appDb.dictRuleDao
+class DictRuleRepository(
+    private val dao: DictRuleDao,
+) {
 
     fun flowAll(): Flow<List<DictRule>> {
         return dao.flowAll()

+ 19 - 0
app/src/main/java/io/legado/app/data/repository/HttpTtsRepository.kt

@@ -0,0 +1,19 @@
+package io.legado.app.data.repository
+
+import io.legado.app.data.dao.HttpTTSDao
+import io.legado.app.data.entities.HttpTTS
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+
+class HttpTtsRepository(
+    private val dao: HttpTTSDao,
+) {
+
+    suspend fun findById(id: Long): HttpTTS? = withContext(Dispatchers.IO) {
+        dao.get(id)
+    }
+
+    suspend fun insert(vararg sources: HttpTTS) = withContext(Dispatchers.IO) {
+        dao.insert(*sources)
+    }
+}

+ 6 - 0
app/src/main/java/io/legado/app/data/repository/RssRepository.kt

@@ -3,7 +3,9 @@ package io.legado.app.data.repository
 import io.legado.app.data.dao.RssSourceDao
 import io.legado.app.data.entities.RssSource
 import io.legado.app.help.source.SourceHelp
+import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.withContext
 
 class RssRepository(
     private val dao: RssSourceDao
@@ -26,6 +28,10 @@ class RssRepository(
 
     fun getEnabledGroups(): Flow<List<String>> = dao.flowEnabledGroups()
 
+    suspend fun getByKey(sourceUrl: String): RssSource? = withContext(Dispatchers.IO) {
+        dao.getByKey(sourceUrl)
+    }
+
     suspend fun updateSources(vararg sources: RssSource) {
         dao.update(*sources)
     }

+ 9 - 4
app/src/main/java/io/legado/app/data/repository/TxtTocRuleRepository.kt

@@ -1,13 +1,14 @@
 package io.legado.app.data.repository
 
-import io.legado.app.data.appDb
+import io.legado.app.data.dao.TxtTocRuleDao
 import io.legado.app.data.entities.TxtTocRule
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.withContext
 
-class TxtTocRuleRepository {
-    private val dao = appDb.txtTocRuleDao
+class TxtTocRuleRepository(
+    private val dao: TxtTocRuleDao,
+) {
 
     fun flowAll(): Flow<List<TxtTocRule>> = dao.observeAll()
 
@@ -25,6 +26,10 @@ class TxtTocRuleRepository {
         dao.delete(*rules)
     }
 
+    suspend fun findById(id: Long): TxtTocRule? = withContext(Dispatchers.IO) {
+        dao.get(id)
+    }
+
     suspend fun deleteByIds(ids: Collection<Long>) = withContext(Dispatchers.IO) {
         val rules = dao.getByIds(ids.toSet())
         dao.delete(*rules.toTypedArray())
@@ -48,4 +53,4 @@ class TxtTocRuleRepository {
     fun enabled(): List<TxtTocRule> = dao.enabled
 
     fun count(): Int = dao.count
-}
+}

+ 14 - 0
app/src/main/java/io/legado/app/di/appModule.kt

@@ -53,6 +53,7 @@ import io.legado.app.data.repository.HomeDashboardRepository
 import io.legado.app.data.repository.HomepageModulesRepository
 import io.legado.app.data.repository.HomepageSettingsRepository
 import io.legado.app.data.repository.HttpTtsEngineRepository
+import io.legado.app.data.repository.HttpTtsRepository
 import io.legado.app.data.repository.ImportBookSettingsRepository
 import io.legado.app.data.repository.LabSettingsRepository
 import io.legado.app.data.repository.LocalBookRepository
@@ -191,6 +192,12 @@ import io.legado.app.help.http.okHttpClientManga
 import io.legado.app.model.ReadAloudSessionStore
 import io.legado.app.ui.about.AboutViewModel
 import io.legado.app.ui.ai.chat.AiChatViewModel
+import io.legado.app.ui.association.ImportBookSourceViewModel
+import io.legado.app.ui.association.ImportDictRuleViewModel
+import io.legado.app.ui.association.ImportHttpTtsViewModel
+import io.legado.app.ui.association.ImportReplaceRuleViewModel
+import io.legado.app.ui.association.ImportRssSourceViewModel
+import io.legado.app.ui.association.ImportTxtTocRuleViewModel
 import io.legado.app.ui.book.bookmark.AllBookmarkViewModel
 import io.legado.app.ui.book.cache.manage.BookCacheManageViewModel
 import io.legado.app.ui.book.changecover.ChangeCoverViewModel
@@ -341,6 +348,7 @@ val appModule = module {
     singleOf(::ReadAloudSessionStore)
     single<HttpTtsEngineGateway> { HttpTtsEngineRepository(get()) }
     single<ReadAloudSettingsGateway> { get<ReadAloudSettingsRepository>() }
+    singleOf(::HttpTtsRepository)
     singleOf(::ApplyReadSettingUseCase)
     singleOf(::HighlightRuleRepository)
     singleOf(::ReadStyleRepository)
@@ -452,6 +460,12 @@ val appModule = module {
     }
 
     viewModelOf(::DictRuleViewModel)
+    viewModelOf(::ImportBookSourceViewModel)
+    viewModelOf(::ImportDictRuleViewModel)
+    viewModelOf(::ImportHttpTtsViewModel)
+    viewModelOf(::ImportReplaceRuleViewModel)
+    viewModelOf(::ImportRssSourceViewModel)
+    viewModelOf(::ImportTxtTocRuleViewModel)
     viewModelOf(::HighlightTagRuleViewModel)
     viewModelOf(::TagGroupRuleViewModel)
     viewModelOf(::DictViewModel)

+ 2 - 2
app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt

@@ -8,7 +8,6 @@ import android.view.MenuItem
 import android.view.View
 import android.view.ViewGroup
 import androidx.appcompat.widget.Toolbar
-import androidx.fragment.app.viewModels
 import androidx.lifecycle.lifecycleScope
 import androidx.recyclerview.widget.LinearLayoutManager
 import io.legado.app.R
@@ -32,6 +31,7 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
 import splitties.views.onClick
 import kotlinx.coroutines.launch
 import org.koin.android.ext.android.inject
+import org.koin.androidx.viewmodel.ext.android.viewModel
 
 
 /**
@@ -49,7 +49,7 @@ class ImportBookSourceDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_r
     }
 
     private val binding by viewBinding(DialogRecyclerViewBinding::bind)
-    private val viewModel by viewModels<ImportBookSourceViewModel>()
+    private val viewModel by viewModel<ImportBookSourceViewModel>()
     private val otherSettingsGateway by inject<OtherSettingsGateway>()
     private val adapter by lazy { SourcesAdapter(requireContext()) }
 

+ 7 - 4
app/src/main/java/io/legado/app/ui/association/ImportBookSourceViewModel.kt

@@ -9,9 +9,9 @@ import io.legado.app.base.BaseViewModel
 import io.legado.app.constant.AppConst
 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.data.repository.BookSourceRepository
 import io.legado.app.exception.NoStackTraceException
 import io.legado.app.help.book.ContentProcessor
 import io.legado.app.help.config.AppConfig
@@ -30,7 +30,10 @@ import io.legado.app.utils.isUri
 import io.legado.app.utils.splitNotBlank
 
 
-class ImportBookSourceViewModel(app: Application) : BaseViewModel(app) {
+class ImportBookSourceViewModel(
+    app: Application,
+    private val repository: BookSourceRepository,
+) : BaseViewModel(app) {
     var isAddGroup = false
     var groupName: String? = null
     val errorLiveData = MutableLiveData<String>()
@@ -208,7 +211,7 @@ class ImportBookSourceViewModel(app: Application) : BaseViewModel(app) {
     private fun comparisonSource() {
         execute {
             allSources.forEach {
-                val source = appDb.bookSourceDao.getBookSourcePart(it.bookSourceUrl)
+                val source = repository.getBookSourcePart(it.bookSourceUrl)
                 checkSources.add(source)
                 selectStatus.add(source == null || source.lastUpdateTime < it.lastUpdateTime)
                 newSourceStatus.add(source == null)
@@ -218,4 +221,4 @@ class ImportBookSourceViewModel(app: Application) : BaseViewModel(app) {
         }
     }
 
-}
+}

+ 3 - 3
app/src/main/java/io/legado/app/ui/association/ImportDictRuleDialog.kt

@@ -6,7 +6,6 @@ import android.content.DialogInterface
 import android.os.Bundle
 import android.view.View
 import android.view.ViewGroup
-import androidx.fragment.app.viewModels
 import androidx.recyclerview.widget.LinearLayoutManager
 import io.legado.app.R
 import io.legado.app.base.BaseDialogFragment
@@ -20,6 +19,7 @@ import io.legado.app.ui.widget.dialog.CodeDialog
 import io.legado.app.ui.widget.dialog.WaitDialog
 import io.legado.app.utils.*
 import io.legado.app.utils.viewbindingdelegate.viewBinding
+import org.koin.androidx.viewmodel.ext.android.viewModel
 import splitties.views.onClick
 
 class ImportDictRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_view),
@@ -33,7 +33,7 @@ class ImportDictRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_view)
     }
 
     private val binding by viewBinding(DialogRecyclerViewBinding::bind)
-    private val viewModel by viewModels<ImportDictRuleViewModel>()
+    private val viewModel by viewModel<ImportDictRuleViewModel>()
     private val adapter by lazy { SourcesAdapter(requireContext()) }
 
     override fun onStart() {
@@ -182,4 +182,4 @@ class ImportDictRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_view)
             }
         }
     }
-}
+}

+ 8 - 5
app/src/main/java/io/legado/app/ui/association/ImportDictRuleViewModel.kt

@@ -7,8 +7,8 @@ import io.legado.app.R
 import io.legado.app.base.BaseViewModel
 import io.legado.app.constant.AppConst
 import io.legado.app.constant.AppLog
-import io.legado.app.data.appDb
 import io.legado.app.data.entities.DictRule
+import io.legado.app.data.repository.DictRuleRepository
 import io.legado.app.exception.NoStackTraceException
 import io.legado.app.help.http.decompressed
 import io.legado.app.help.http.newCallResponseBody
@@ -24,7 +24,10 @@ import io.legado.app.utils.isUri
 import io.legado.app.utils.readText
 import splitties.init.appCtx
 
-class ImportDictRuleViewModel(app: Application) : BaseViewModel(app) {
+class ImportDictRuleViewModel(
+    app: Application,
+    private val repository: DictRuleRepository,
+) : BaseViewModel(app) {
 
     val errorLiveData = MutableLiveData<String>()
     val successLiveData = MutableLiveData<Int>()
@@ -62,7 +65,7 @@ class ImportDictRuleViewModel(app: Application) : BaseViewModel(app) {
                     selectSource.add(allSources[index])
                 }
             }
-            appDb.dictRuleDao.insert(*selectSource.toTypedArray())
+            repository.insert(*selectSource.toTypedArray())
         }.onFinally {
             finally.invoke()
         }
@@ -115,7 +118,7 @@ class ImportDictRuleViewModel(app: Application) : BaseViewModel(app) {
     private fun comparisonSource() {
         execute {
             allSources.forEach {
-                val source = appDb.dictRuleDao.getByName(it.name)
+                val source = repository.findById(it.name)
                 checkSources.add(source)
                 selectStatus.add(source == null)
             }
@@ -123,4 +126,4 @@ class ImportDictRuleViewModel(app: Application) : BaseViewModel(app) {
         }
     }
 
-}
+}

+ 3 - 3
app/src/main/java/io/legado/app/ui/association/ImportHttpTtsDialog.kt

@@ -6,7 +6,6 @@ import android.content.DialogInterface
 import android.os.Bundle
 import android.view.View
 import android.view.ViewGroup
-import androidx.fragment.app.viewModels
 import androidx.recyclerview.widget.LinearLayoutManager
 import io.legado.app.R
 import io.legado.app.base.BaseDialogFragment
@@ -23,6 +22,7 @@ import io.legado.app.utils.gone
 import io.legado.app.utils.setLayout
 import io.legado.app.utils.showDialogFragment
 import io.legado.app.utils.viewbindingdelegate.viewBinding
+import org.koin.androidx.viewmodel.ext.android.viewModel
 import io.legado.app.utils.visible
 import splitties.views.onClick
 
@@ -37,7 +37,7 @@ class ImportHttpTtsDialog() : BaseDialogFragment(R.layout.dialog_recycler_view),
     }
 
     private val binding by viewBinding(DialogRecyclerViewBinding::bind)
-    private val viewModel by viewModels<ImportHttpTtsViewModel>()
+    private val viewModel by viewModel<ImportHttpTtsViewModel>()
     private val adapter by lazy { SourcesAdapter(requireContext()) }
 
     override fun onStart() {
@@ -187,4 +187,4 @@ class ImportHttpTtsDialog() : BaseDialogFragment(R.layout.dialog_recycler_view),
             }
         }
     }
-}
+}

+ 7 - 4
app/src/main/java/io/legado/app/ui/association/ImportHttpTtsViewModel.kt

@@ -9,8 +9,8 @@ import io.legado.app.base.BaseViewModel
 import io.legado.app.constant.AppConst
 import io.legado.app.constant.AppLog
 import io.legado.app.constant.AppPattern
-import io.legado.app.data.appDb
 import io.legado.app.data.entities.HttpTTS
+import io.legado.app.data.repository.HttpTtsRepository
 import io.legado.app.exception.NoStackTraceException
 import io.legado.app.help.http.decompressed
 import io.legado.app.help.http.newCallResponseBody
@@ -24,7 +24,10 @@ import io.legado.app.utils.isUri
 import io.legado.app.utils.readText
 import splitties.init.appCtx
 
-class ImportHttpTtsViewModel(app: Application) : BaseViewModel(app) {
+class ImportHttpTtsViewModel(
+    app: Application,
+    private val repository: HttpTtsRepository,
+) : BaseViewModel(app) {
 
     val errorLiveData = MutableLiveData<String>()
     val successLiveData = MutableLiveData<Int>()
@@ -62,7 +65,7 @@ class ImportHttpTtsViewModel(app: Application) : BaseViewModel(app) {
                     selectSource.add(allSources[index])
                 }
             }
-            appDb.httpTTSDao.insert(*selectSource.toTypedArray())
+            repository.insert(*selectSource.toTypedArray())
         }.onFinally {
             finally.invoke()
         }
@@ -120,7 +123,7 @@ class ImportHttpTtsViewModel(app: Application) : BaseViewModel(app) {
     private fun comparisonSource() {
         execute {
             allSources.forEach {
-                val source = appDb.httpTTSDao.get(it.id)
+                val source = repository.findById(it.id)
                 checkSources.add(source)
                 selectStatus.add(source == null || source.lastUpdateTime < it.lastUpdateTime)
             }

+ 3 - 3
app/src/main/java/io/legado/app/ui/association/ImportReplaceRuleDialog.kt

@@ -8,7 +8,6 @@ import android.view.MenuItem
 import android.view.View
 import android.view.ViewGroup
 import androidx.appcompat.widget.Toolbar
-import androidx.fragment.app.viewModels
 import androidx.recyclerview.widget.LinearLayoutManager
 import io.legado.app.R
 import io.legado.app.base.BaseDialogFragment
@@ -26,6 +25,7 @@ import io.legado.app.ui.widget.dialog.CodeDialog
 import io.legado.app.ui.widget.dialog.WaitDialog
 import io.legado.app.utils.*
 import io.legado.app.utils.viewbindingdelegate.viewBinding
+import org.koin.androidx.viewmodel.ext.android.viewModel
 import splitties.views.onClick
 
 class ImportReplaceRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_view),
@@ -40,7 +40,7 @@ class ImportReplaceRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_vi
     }
 
     private val binding by viewBinding(DialogRecyclerViewBinding::bind)
-    private val viewModel by viewModels<ImportReplaceRuleViewModel>()
+    private val viewModel by viewModel<ImportReplaceRuleViewModel>()
     private val adapter by lazy { SourcesAdapter(requireContext()) }
 
     override fun onStart() {
@@ -245,4 +245,4 @@ class ImportReplaceRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_vi
 
     }
 
-}
+}

+ 8 - 5
app/src/main/java/io/legado/app/ui/association/ImportReplaceRuleViewModel.kt

@@ -7,8 +7,8 @@ import io.legado.app.base.BaseViewModel
 import io.legado.app.constant.AppConst
 import io.legado.app.constant.AppLog
 import io.legado.app.constant.AppPattern
-import io.legado.app.data.appDb
 import io.legado.app.data.entities.ReplaceRule
+import io.legado.app.data.repository.ReplaceRuleRepository
 import io.legado.app.exception.NoStackTraceException
 import io.legado.app.help.ReplaceAnalyzer
 import io.legado.app.help.http.decompressed
@@ -23,7 +23,10 @@ import io.legado.app.utils.readText
 import io.legado.app.utils.splitNotBlank
 import splitties.init.appCtx
 
-class ImportReplaceRuleViewModel(app: Application) : BaseViewModel(app) {
+class ImportReplaceRuleViewModel(
+    app: Application,
+    private val repository: ReplaceRuleRepository,
+) : BaseViewModel(app) {
     var isAddGroup = false
     var groupName: String? = null
     val errorLiveData = MutableLiveData<String>()
@@ -76,7 +79,7 @@ class ImportReplaceRuleViewModel(app: Application) : BaseViewModel(app) {
                     selectRules.add(rule)
                 }
             }
-            appDb.replaceRuleDao.insert(*selectRules.toTypedArray())
+            repository.insert(*selectRules.toTypedArray())
         }.onFinally {
             finally.invoke()
         }
@@ -130,7 +133,7 @@ class ImportReplaceRuleViewModel(app: Application) : BaseViewModel(app) {
     private fun comparisonSource() {
         execute {
             allRules.forEach {
-                val rule = appDb.replaceRuleDao.findById(it.id)
+                val rule = repository.findById(it.id)
                 checkRules.add(rule)
                 selectStatus.add(rule == null)
             }
@@ -138,4 +141,4 @@ class ImportReplaceRuleViewModel(app: Application) : BaseViewModel(app) {
             successLiveData.postValue(allRules.size)
         }
     }
-}
+}

+ 2 - 2
app/src/main/java/io/legado/app/ui/association/ImportRssSourceDialog.kt

@@ -8,7 +8,6 @@ import android.view.MenuItem
 import android.view.View
 import android.view.ViewGroup
 import androidx.appcompat.widget.Toolbar
-import androidx.fragment.app.viewModels
 import androidx.lifecycle.lifecycleScope
 import androidx.recyclerview.widget.LinearLayoutManager
 import io.legado.app.R
@@ -32,6 +31,7 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
 import splitties.views.onClick
 import kotlinx.coroutines.launch
 import org.koin.android.ext.android.inject
+import org.koin.androidx.viewmodel.ext.android.viewModel
 
 /**
  * 导入rss源弹出窗口
@@ -48,7 +48,7 @@ class ImportRssSourceDialog() : BaseDialogFragment(R.layout.dialog_recycler_view
     }
 
     private val binding by viewBinding(DialogRecyclerViewBinding::bind)
-    private val viewModel by viewModels<ImportRssSourceViewModel>()
+    private val viewModel by viewModel<ImportRssSourceViewModel>()
     private val otherSettingsGateway by inject<OtherSettingsGateway>()
     private val adapter by lazy { SourcesAdapter(requireContext()) }
 

+ 7 - 4
app/src/main/java/io/legado/app/ui/association/ImportRssSourceViewModel.kt

@@ -9,8 +9,8 @@ import io.legado.app.base.BaseViewModel
 import io.legado.app.constant.AppConst
 import io.legado.app.constant.AppLog
 import io.legado.app.constant.AppPattern
-import io.legado.app.data.appDb
 import io.legado.app.data.entities.RssSource
+import io.legado.app.data.repository.RssRepository
 import io.legado.app.exception.NoStackTraceException
 import io.legado.app.help.config.AppConfig
 import io.legado.app.help.http.decompressed
@@ -29,7 +29,10 @@ import io.legado.app.utils.readText
 import io.legado.app.utils.splitNotBlank
 import splitties.init.appCtx
 
-class ImportRssSourceViewModel(app: Application) : BaseViewModel(app) {
+class ImportRssSourceViewModel(
+    app: Application,
+    private val repository: RssRepository,
+) : BaseViewModel(app) {
     var isAddGroup = false
     var groupName: String? = null
     val errorLiveData = MutableLiveData<String>()
@@ -186,7 +189,7 @@ class ImportRssSourceViewModel(app: Application) : BaseViewModel(app) {
     private fun comparisonSource() {
         execute {
             allSources.forEach {
-                val has = appDb.rssSourceDao.getByKey(it.sourceUrl)
+                val has = repository.getByKey(it.sourceUrl)
                 checkSources.add(has)
                 selectStatus.add(has == null || has.lastUpdateTime < it.lastUpdateTime)
             }
@@ -194,4 +197,4 @@ class ImportRssSourceViewModel(app: Application) : BaseViewModel(app) {
         }
     }
 
-}
+}

+ 3 - 3
app/src/main/java/io/legado/app/ui/association/ImportTxtTocRuleDialog.kt

@@ -6,7 +6,6 @@ import android.content.DialogInterface
 import android.os.Bundle
 import android.view.View
 import android.view.ViewGroup
-import androidx.fragment.app.viewModels
 import androidx.recyclerview.widget.LinearLayoutManager
 import io.legado.app.R
 import io.legado.app.base.BaseDialogFragment
@@ -23,6 +22,7 @@ import io.legado.app.utils.gone
 import io.legado.app.utils.setLayout
 import io.legado.app.utils.showDialogFragment
 import io.legado.app.utils.viewbindingdelegate.viewBinding
+import org.koin.androidx.viewmodel.ext.android.viewModel
 import io.legado.app.utils.visible
 import splitties.views.onClick
 
@@ -36,7 +36,7 @@ class ImportTxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_vie
     }
 
     private val binding by viewBinding(DialogRecyclerViewBinding::bind)
-    private val viewModel by viewModels<ImportTxtTocRuleViewModel>()
+    private val viewModel by viewModel<ImportTxtTocRuleViewModel>()
     private val adapter by lazy { SourcesAdapter(requireContext()) }
 
     override fun onStart() {
@@ -177,4 +177,4 @@ class ImportTxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_vie
         }
 
     }
-}
+}

+ 8 - 5
app/src/main/java/io/legado/app/ui/association/ImportTxtTocRuleViewModel.kt

@@ -7,8 +7,8 @@ import io.legado.app.R
 import io.legado.app.base.BaseViewModel
 import io.legado.app.constant.AppConst
 import io.legado.app.constant.AppLog
-import io.legado.app.data.appDb
 import io.legado.app.data.entities.TxtTocRule
+import io.legado.app.data.repository.TxtTocRuleRepository
 import io.legado.app.exception.NoStackTraceException
 import io.legado.app.help.http.decompressed
 import io.legado.app.help.http.newCallResponseBody
@@ -24,7 +24,10 @@ import io.legado.app.utils.isUri
 import io.legado.app.utils.readText
 import splitties.init.appCtx
 
-class ImportTxtTocRuleViewModel(app: Application) : BaseViewModel(app) {
+class ImportTxtTocRuleViewModel(
+    app: Application,
+    private val repository: TxtTocRuleRepository,
+) : BaseViewModel(app) {
 
     val errorLiveData = MutableLiveData<String>()
     val successLiveData = MutableLiveData<Int>()
@@ -62,7 +65,7 @@ class ImportTxtTocRuleViewModel(app: Application) : BaseViewModel(app) {
                     selectSource.add(allSources[index])
                 }
             }
-            appDb.txtTocRuleDao.insert(*selectSource.toTypedArray())
+            repository.insert(*selectSource.toTypedArray())
         }.onFinally {
             finally.invoke()
         }
@@ -116,7 +119,7 @@ class ImportTxtTocRuleViewModel(app: Application) : BaseViewModel(app) {
     private fun comparisonSource() {
         execute {
             allSources.forEach {
-                val source = appDb.txtTocRuleDao.get(it.id)
+                val source = repository.findById(it.id)
                 checkSources.add(source)
                 selectStatus.add(source == null || it != source)
             }
@@ -124,4 +127,4 @@ class ImportTxtTocRuleViewModel(app: Application) : BaseViewModel(app) {
         }
     }
 
-}
+}

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleViewModel.kt

@@ -25,13 +25,13 @@ import kotlinx.coroutines.launch
 
 class TxtTocRuleViewModel(
     application: Application,
-    uploadRepository: UploadRepository
+    uploadRepository: UploadRepository,
+    private val repository: TxtTocRuleRepository,
 ) : BaseRuleViewModel<TxtTocRuleItemUi, TxtTocRule, Long, TxtTocRuleUiState>(
     application,
     TxtTocRuleUiState(interaction = InteractionState(isLoading = true)),
     uploadRepository
 ) {
-    private val repository = TxtTocRuleRepository()
     private val _effects = MutableSharedFlow<TxtTocRuleEffect>(extraBufferCapacity = 16)
     val effects = _effects.asSharedFlow()
 

+ 2 - 2
app/src/main/java/io/legado/app/ui/dict/rule/DictRuleViewModel.kt

@@ -27,13 +27,13 @@ import kotlinx.coroutines.withContext
 
 class DictRuleViewModel(
     application: Application,
-    uploadRepository: UploadRepository
+    uploadRepository: UploadRepository,
+    private val repository: DictRuleRepository,
 ) : BaseRuleViewModel<DictRuleItemUi, DictRule, String, DictRuleUiState>(
     application,
     DictRuleUiState(interaction = InteractionState(isLoading = true)),
     uploadRepository
 ) {
-    private val repository = DictRuleRepository()
     private val _effects = MutableSharedFlow<DictRuleEffect>(extraBufferCapacity = 16)
     val effects = _effects.asSharedFlow()
 

+ 0 - 6
build.gradle.kts

@@ -199,12 +199,6 @@ val verifyConfigArchitecture = tasks.register<VerifyConfigArchitectureTask>(
     )
     legacyDaoInjectionBaseline.set(
         mapOf(
-            "io/legado/app/ui/association/ImportBookSourceViewModel.kt" to 1,
-            "io/legado/app/ui/association/ImportDictRuleViewModel.kt" to 2,
-            "io/legado/app/ui/association/ImportHttpTtsViewModel.kt" to 2,
-            "io/legado/app/ui/association/ImportReplaceRuleViewModel.kt" to 2,
-            "io/legado/app/ui/association/ImportRssSourceViewModel.kt" to 1,
-            "io/legado/app/ui/association/ImportTxtTocRuleViewModel.kt" to 2,
             "io/legado/app/ui/book/audio/AudioPlayViewModel.kt" to 11,
             "io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt" to 3,
             "io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt" to 20,