Przeglądaj źródła

修复删除分组后匹配规则残留

5151561 3 miesięcy temu
rodzic
commit
1e0f4b264a

+ 11 - 0
app/src/main/java/io/legado/app/data/repository/BookGroupMutationRepository.kt

@@ -82,6 +82,17 @@ class BookGroupMutationRepository(
         }
     }
 
+    override suspend fun deleteGroup(groupId: Long) {
+        database.withTransaction {
+            val group = database.bookGroupDao.getByID(groupId) ?: return@withTransaction
+            database.tagGroupRuleDao.getByGroupName(group.groupName)?.let {
+                database.tagGroupRuleDao.delete(it)
+            }
+            database.bookDao.removeGroup(groupId)
+            database.bookGroupDao.delete(group)
+        }
+    }
+
     private suspend fun upsertTagGroupRule(rule: TagGroupRuleUpdate) {
         val ruleDao = database.tagGroupRuleDao
         val existing = ruleDao.getByGroupName(rule.groupName)

+ 2 - 0
app/src/main/java/io/legado/app/domain/gateway/BookGroupMutationGateway.kt

@@ -17,4 +17,6 @@ interface BookGroupMutationGateway {
     suspend fun saveTagGroupRule(rule: TagGroupRuleUpdate)
 
     suspend fun deleteTagGroupRule(ruleId: Long)
+
+    suspend fun deleteGroup(groupId: Long)
 }

+ 1 - 4
app/src/main/java/io/legado/app/ui/book/group/GroupViewModel.kt

@@ -11,7 +11,6 @@ import io.legado.app.domain.gateway.BookGroupMutationGateway
 import io.legado.app.domain.model.BookGroupUpdate
 import io.legado.app.domain.model.NewBookGroup
 import io.legado.app.domain.model.TagGroupRuleUpdate
-import io.legado.app.domain.usecase.RemoveBookGroupAssignmentUseCase
 import kotlinx.coroutines.currentCoroutineContext
 import kotlinx.coroutines.ensureActive
 import kotlinx.coroutines.launch
@@ -19,7 +18,6 @@ import kotlinx.coroutines.launch
 class GroupViewModel(
     application: Application,
     private val bookGroupRepository: BookGroupRepository,
-    private val removeBookGroupAssignmentUseCase: RemoveBookGroupAssignmentUseCase,
     private val bookGroupMutationGateway: BookGroupMutationGateway,
 ) : BaseViewModel(application) {
 
@@ -87,8 +85,7 @@ class GroupViewModel(
 
     fun delGroup(bookGroup: BookGroup, finally: () -> Unit) {
         execute {
-            bookGroupRepository.delete(bookGroup)
-            removeBookGroupAssignmentUseCase.execute(bookGroup.groupId)
+            bookGroupMutationGateway.deleteGroup(bookGroup.groupId)
         }.onFinally {
             finally()
         }

+ 22 - 0
app/src/test/java/io/legado/app/data/repository/BookGroupMutationRepositoryTest.kt

@@ -101,6 +101,28 @@ class BookGroupMutationRepositoryTest {
         assertEquals(group.groupId, database.bookDao.getBook(book.bookUrl)?.group)
     }
 
+    @Test
+    fun `删除分组时同时删除匹配规则和书籍分组位`() = runBlocking {
+        val group = BookGroup(groupId = 1L, groupName = "Fantasy")
+        val rule = TagGroupRule(id = 1L, groupName = group.groupName, pattern = "fantasy")
+        val book = Book(
+            bookUrl = "book-1",
+            name = "Book",
+            author = "Author",
+            kind = "fantasy",
+            group = group.groupId,
+        )
+        database.bookGroupDao.insert(group)
+        database.tagGroupRuleDao.insert(rule)
+        database.bookDao.insert(book)
+
+        repository.deleteGroup(group.groupId)
+
+        assertTrue(database.bookGroupDao.all.isEmpty())
+        assertTrue(database.tagGroupRuleDao.getAll().isEmpty())
+        assertEquals(0L, database.bookDao.getBook(book.bookUrl)?.group)
+    }
+
     @Test
     fun `新增带规则分组后立即更新匹配书籍`() = runBlocking {
         val book = Book(