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

refactor: 清零 AudioPlayViewModel DAO 直连

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

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

@@ -148,6 +148,12 @@ class BookRepository(
         }
     }
 
+    suspend fun delete(vararg book: Book) {
+        withContext(Dispatchers.IO) {
+            bookDao.delete(*book)
+        }
+    }
+
     suspend fun deleteChaptersByBook(bookUrl: String) {
         withContext(Dispatchers.IO) {
             bookChapterDao.delByBook(bookUrl)

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

@@ -214,6 +214,7 @@ import io.legado.app.ui.book.import.local.ImportBookViewModel
 import io.legado.app.ui.book.import.remote.RemoteBookViewModel
 import io.legado.app.ui.book.import.remote.ServerConfigViewModel
 import io.legado.app.ui.book.import.remote.ServersViewModel
+import io.legado.app.ui.book.audio.AudioPlayViewModel
 import io.legado.app.ui.book.info.BookInfoViewModel
 import io.legado.app.ui.book.info.edit.BookInfoEditViewModel
 import io.legado.app.ui.login.SourceLoginViewModel
@@ -570,6 +571,12 @@ val appModule = module {
             bookRepository = get(),
         )
     }
+    viewModel {
+        AudioPlayViewModel(
+            application = get(),
+            bookRepository = get(),
+        )
+    }
     viewModel {
         SourceLoginViewModel(
             application = get(),

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/audio/AudioPlayActivity.kt

@@ -16,7 +16,6 @@ import android.os.Bundle
 import android.view.Menu
 import android.view.MenuItem
 import androidx.activity.addCallback
-import androidx.activity.viewModels
 import androidx.appcompat.content.res.AppCompatResources
 import androidx.core.graphics.scale
 import androidx.core.view.HapticFeedbackConstantsCompat
@@ -52,6 +51,7 @@ import io.legado.app.help.config.AppConfig
 import io.legado.app.ui.config.themeConfig.ThemeConfig
 import io.legado.app.model.AudioPlay
 import org.koin.android.ext.android.inject
+import org.koin.androidx.viewmodel.ext.android.viewModel
 import io.legado.app.model.BookCover
 import io.legado.app.model.SourceCallBack
 import io.legado.app.service.AudioPlayService
@@ -97,7 +97,7 @@ class AudioPlayActivity :
     private val readAloudSettingsGateway by inject<ReadAloudSettingsGateway>()
 
     override val binding by viewBinding(ActivityAudioPlayBinding::inflate)
-    override val viewModel by viewModels<AudioPlayViewModel>()
+    override val viewModel by viewModel<AudioPlayViewModel>()
     private var adjustProgress = false
     private var playMode = AudioPlay.PlayMode.LIST_END_STOP
     private var playSpeed = 1f

+ 16 - 13
app/src/main/java/io/legado/app/ui/book/audio/AudioPlayViewModel.kt

@@ -11,10 +11,10 @@ import org.koin.core.context.GlobalContext
 import io.legado.app.constant.AppLog
 import io.legado.app.constant.BookType
 import io.legado.app.constant.EventBus
-import io.legado.app.data.appDb
 import io.legado.app.data.entities.Book
 import io.legado.app.data.entities.BookChapter
 import io.legado.app.data.entities.BookSource
+import io.legado.app.data.repository.BookRepository
 import io.legado.app.help.book.getBookSource
 import io.legado.app.help.book.removeType
 import io.legado.app.help.book.simulatedTotalChapterNum
@@ -23,7 +23,10 @@ import io.legado.app.model.webBook.WebBook
 import io.legado.app.utils.postEvent
 import io.legado.app.utils.toastOnUi
 
-class AudioPlayViewModel(application: Application) : BaseViewModel(application) {
+class AudioPlayViewModel(
+    application: Application,
+    private val bookRepository: BookRepository,
+) : BaseViewModel(application) {
     private val otherSettingsGateway get() = GlobalContext.get().get<OtherSettingsGateway>()
     private val readSettingsGateway get() = GlobalContext.get().get<ReadSettingsGateway>()
     val titleData = MutableLiveData<String>()
@@ -32,7 +35,7 @@ class AudioPlayViewModel(application: Application) : BaseViewModel(application)
     fun initData(intent: Intent) = AudioPlay.apply {
         execute {
             val bookUrl = intent.getStringExtra("bookUrl") ?: book?.bookUrl ?: return@execute
-            val book = appDb.bookDao.getBook(bookUrl) ?: return@execute
+            val book = bookRepository.getBook(bookUrl) ?: return@execute
             inBookshelf = intent.getBooleanExtra("inBookshelf", true)
             initBook(book)
         }.onFinally {
@@ -74,12 +77,12 @@ class AudioPlayViewModel(application: Application) : BaseViewModel(application)
             val oldBook = book.copy()
             val cList = WebBook.getChapterListAwait(bookSource, book).getOrThrow()
             if (oldBook.bookUrl == book.bookUrl) {
-                appDb.bookDao.update(book)
+                bookRepository.update(book)
             } else {
-                appDb.bookDao.replace(oldBook, book)
+                bookRepository.replace(oldBook, book)
             }
-            appDb.bookChapterDao.delByBook(book.bookUrl)
-            appDb.bookChapterDao.insert(*cList.toTypedArray())
+            bookRepository.deleteChaptersByBook(book.bookUrl)
+            bookRepository.insertChapters(*cList.toTypedArray())
             AudioPlay.chapterSize = cList.size
             AudioPlay.simulatedChapterSize = book.simulatedTotalChapterNum()
             AudioPlay.upDurChapter()
@@ -107,10 +110,10 @@ class AudioPlayViewModel(application: Application) : BaseViewModel(application)
             )
             book.removeType(BookType.updateError)
             AudioPlay.book?.delete()
-            appDb.bookDao.insert(book)
+            bookRepository.insert(book)
             AudioPlay.book = book
             AudioPlay.bookSource = source
-            appDb.bookChapterDao.insert(*toc.toTypedArray())
+            bookRepository.insertChapters(*toc.toTypedArray())
             AudioPlay.upDurChapter()
         }.onFinally {
             postEvent(EventBus.SOURCE_CHANGED, book.bookUrl)
@@ -120,7 +123,7 @@ class AudioPlayViewModel(application: Application) : BaseViewModel(application)
     fun removeFromBookshelf(success: (() -> Unit)?) {
         execute {
             AudioPlay.book?.let {
-                appDb.bookDao.delete(it)
+                bookRepository.delete(it)
             }
         }.onSuccess {
             success?.invoke()
@@ -131,11 +134,11 @@ class AudioPlayViewModel(application: Application) : BaseViewModel(application)
         execute {
             book.removeType(BookType.notShelf)
             if (book.order == 0) {
-                book.order = appDb.bookDao.minOrder - 1
+                book.order = bookRepository.getMinOrder() - 1
             }
 
-            appDb.bookDao.insert(book)
-            appDb.bookChapterDao.insert(*toc.toTypedArray())
+            bookRepository.insert(book)
+            bookRepository.insertChapters(*toc.toTypedArray())
         }.onSuccess {
             success?.invoke()
         }.onError {

+ 0 - 1
build.gradle.kts

@@ -219,7 +219,6 @@ val verifyConfigArchitecture = tasks.register<VerifyConfigArchitectureTask>(
     )
     legacyDaoInjectionBaseline.set(
         mapOf(
-            "io/legado/app/ui/book/audio/AudioPlayViewModel.kt" to 11,
             "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,