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

refactor: 清零 SourceLoginViewModel DAO 直连

5151561 3 месяцев назад
Родитель
Сommit
126713aa45

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

@@ -82,6 +82,12 @@ class BookRepository(
         return bookDao.flowGroupPreview(groupId)
     }
 
+    suspend fun getChapter(bookUrl: String, index: Int): BookChapter? {
+        return withContext(Dispatchers.IO) {
+            bookChapterDao.getChapter(bookUrl, index)
+        }
+    }
+
     suspend fun getChapterCount(bookUrl: String): Int {
         return withContext(Dispatchers.IO) {
             bookChapterDao.getChapterCount(bookUrl)

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

@@ -27,6 +27,7 @@ interface SearchRepository {
     suspend fun deleteSearchKeyword(item: SearchKeyword)
     suspend fun clearSearchKeywords()
     suspend fun getEnableHasCover(name: String, author: String): List<SearchBook>
+    suspend fun getSearchBook(bookUrl: String): SearchBook?
     suspend fun saveSearchBooks(books: List<SearchBook>)
     suspend fun saveSearchBook(book: SearchBook)
     suspend fun updateSearchBook(book: SearchBook)
@@ -122,6 +123,11 @@ class SearchRepositoryImpl(
             appDb.searchBookDao.getEnableHasCover(name, author)
         }
 
+    override suspend fun getSearchBook(bookUrl: String): SearchBook? =
+        withContext(Dispatchers.IO) {
+            appDb.searchBookDao.getSearchBook(bookUrl)
+        }
+
     override suspend fun saveSearchBooks(books: List<SearchBook>): Unit =
         withContext(Dispatchers.IO) {
         if (books.isNotEmpty()) {

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

@@ -216,6 +216,7 @@ import io.legado.app.ui.book.import.remote.ServerConfigViewModel
 import io.legado.app.ui.book.import.remote.ServersViewModel
 import io.legado.app.ui.book.info.BookInfoViewModel
 import io.legado.app.ui.book.info.edit.BookInfoEditViewModel
+import io.legado.app.ui.login.SourceLoginViewModel
 import io.legado.app.ui.browser.WebViewModel
 import io.legado.app.ui.book.knowledge.BookCharacterDetailViewModel
 import io.legado.app.ui.book.knowledge.BookCharacterListViewModel
@@ -569,6 +570,16 @@ val appModule = module {
             bookRepository = get(),
         )
     }
+    viewModel {
+        SourceLoginViewModel(
+            application = get(),
+            bookRepository = get(),
+            bookSourceRepository = get(),
+            rssRepository = get(),
+            httpTtsRepository = get(),
+            searchRepository = get(),
+        )
+    }
     viewModel { (bookUrl: String, characterId: String?) ->
         BookCharacterDetailViewModel(
             bookUrl = bookUrl,

+ 2 - 2
app/src/main/java/io/legado/app/ui/login/SourceLoginActivity.kt

@@ -1,7 +1,7 @@
 package io.legado.app.ui.login
 
 import android.os.Bundle
-import androidx.activity.viewModels
+import org.koin.androidx.viewmodel.ext.android.viewModel
 import io.legado.app.R
 import io.legado.app.base.VMBaseActivity
 import io.legado.app.data.entities.BaseSource
@@ -13,7 +13,7 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
 class SourceLoginActivity : VMBaseActivity<ActivitySourceLoginBinding, SourceLoginViewModel>() {
 
     override val binding by viewBinding(ActivitySourceLoginBinding::inflate)
-    override val viewModel by viewModels<SourceLoginViewModel>()
+    override val viewModel by viewModel<SourceLoginViewModel>()
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)

+ 18 - 7
app/src/main/java/io/legado/app/ui/login/SourceLoginViewModel.kt

@@ -6,17 +6,28 @@ import com.script.rhino.runScriptWithContext
 import io.legado.app.base.BaseViewModel
 import io.legado.app.constant.AppLog
 import io.legado.app.constant.BookType
-import io.legado.app.data.appDb
 import io.legado.app.data.entities.BaseSource
 import io.legado.app.data.entities.Book
 import io.legado.app.data.entities.BookChapter
+import io.legado.app.data.repository.BookRepository
+import io.legado.app.data.repository.BookSourceRepository
+import io.legado.app.data.repository.HttpTtsRepository
+import io.legado.app.data.repository.RssRepository
+import io.legado.app.data.repository.SearchRepository
 import io.legado.app.exception.NoStackTraceException
 import io.legado.app.help.config.AppConfig
 import io.legado.app.model.AudioPlay
 import io.legado.app.model.ReadBook
 import io.legado.app.utils.toastOnUi
 
-class SourceLoginViewModel(application: Application) : BaseViewModel(application) {
+class SourceLoginViewModel(
+    application: Application,
+    private val bookRepository: BookRepository,
+    private val bookSourceRepository: BookSourceRepository,
+    private val rssRepository: RssRepository,
+    private val httpTtsRepository: HttpTtsRepository,
+    private val searchRepository: SearchRepository,
+) : BaseViewModel(application) {
 
     var source: BaseSource? = null
     var headerMap: Map<String, String> = emptyMap()
@@ -33,7 +44,7 @@ class SourceLoginViewModel(application: Application) : BaseViewModel(application
                     source = ReadBook.bookSource
                     book = ReadBook.book?.also {
                         chapter =
-                            appDb.bookChapterDao.getChapter(it.bookUrl, ReadBook.durChapterIndex)
+                            bookRepository.getChapter(it.bookUrl, ReadBook.durChapterIndex)
                     }
                 }
 
@@ -48,14 +59,14 @@ class SourceLoginViewModel(application: Application) : BaseViewModel(application
                         ?: throw NoStackTraceException("没有参数")
                     val type = intent.getStringExtra("type")
                     source = when (type) {
-                        "bookSource" -> appDb.bookSourceDao.getBookSource(sourceKey)
-                        "rssSource" -> appDb.rssSourceDao.getByKey(sourceKey)
-                        "httpTts" -> appDb.httpTTSDao.get(sourceKey.toLong())
+                        "bookSource" -> bookSourceRepository.getBookSource(sourceKey)
+                        "rssSource" -> rssRepository.getByKey(sourceKey)
+                        "httpTts" -> httpTtsRepository.findById(sourceKey.toLong())
                         else -> null
                     }
                     val bookUrl = intent.getStringExtra("bookUrl")
                     book = bookUrl?.let {
-                        appDb.bookDao.getBook(it) ?: appDb.searchBookDao.getSearchBook(it)?.toBook()
+                        bookRepository.getBook(it) ?: searchRepository.getSearchBook(it)?.toBook()
                     }
                 }
             }

+ 0 - 1
build.gradle.kts

@@ -223,7 +223,6 @@ val verifyConfigArchitecture = tasks.register<VerifyConfigArchitectureTask>(
             "io/legado/app/ui/book/info/BookInfoViewModel.kt" to 34,
             "io/legado/app/ui/book/manga/ReadMangaViewModel.kt" to 17,
             "io/legado/app/ui/book/read/ReadBookViewModel.kt" to 52,
-            "io/legado/app/ui/login/SourceLoginViewModel.kt" to 6,
         )
     )
     // 非 ViewModel 的 UI 层文件直连 DAO 的历史债,只冻结不修复;