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

fix(backup): 划线笔记表 book_marks 纳入备份与恢复(随书签忽略项统一控制) (#2231)

Mupceet 1 месяц назад
Родитель
Сommit
48bec9ab82

+ 12 - 0
app/src/main/java/io/legado/app/data/dao/BookMarkingDao.kt

@@ -10,6 +10,18 @@ import kotlinx.coroutines.flow.Flow
 @Dao
 interface BookMarkingDao {
 
+    @get:Query(
+        """
+        select * from book_marks
+        order by bookName collate localized, bookAuthor collate localized, chapterIndex, createdAt
+    """
+    )
+    val all: List<BookMarking>
+
+    /** 恢复备份用:按主键整批写入(同 id 覆盖,重复导入幂等)。 */
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    suspend fun insert(vararg bookMarkings: BookMarking)
+
     /**
      * 按创建时的源(bookUrl)查:渲染只画当前源能对上正文的标记。
      * 与 bookmarks 不同,book_marks 认「书名+作者」跨源关联,列表见 [flowByBook]。

+ 3 - 0
app/src/main/java/io/legado/app/help/storage/Backup.kt

@@ -67,6 +67,7 @@ object Backup {
         arrayOf(
             "bookshelf.json",
             "bookmark.json",
+            "bookMarking.json",
             "bookGroup.json",
             "bookSource.json",
             "rssSources.json",
@@ -149,8 +150,10 @@ object Backup {
             "bookshelf.json",
             backupPath,
         )
+        // 书签与划线/想法笔记(book_marks)视为一体,统一受既有 bookmark 忽略项控制
         if (BackupConfig.dbIsNotIgnored("bookmark", true)) {
             writeListToJson(appDb.bookmarkDao.all, "bookmark.json", backupPath)
+            writeListToJson(appDb.bookMarkingDao.all, "bookMarking.json", backupPath)
         }
         if (BackupConfig.dbIsNotIgnored("bookGroup", true)) {
             writeListToJson(appDb.bookGroupDao.all, "bookGroup.json", backupPath)

+ 8 - 0
app/src/main/java/io/legado/app/help/storage/Restore.kt

@@ -16,6 +16,7 @@ import io.legado.app.data.entities.Book
 import io.legado.app.data.entities.BookGroup
 import io.legado.app.data.entities.BookSource
 import io.legado.app.data.entities.Bookmark
+import io.legado.app.data.entities.BookMarking
 import io.legado.app.data.entities.DictRule
 import io.legado.app.data.entities.HighlightRule
 import io.legado.app.data.entities.HighlightTagRule
@@ -148,6 +149,7 @@ object Restore : KoinComponent {
                 }
             }
         }
+        // 书签与划线/想法笔记(book_marks)视为一体,统一受既有 bookmark 忽略项控制
         if (BackupConfig.dbIsNotIgnored("bookmark")) {
             fileToListT<Bookmark>(path, "bookmark.json")?.let {
                 try {
@@ -155,6 +157,12 @@ object Restore : KoinComponent {
                 } catch (_: SQLiteConstraintException) {
                 }
             }
+            fileToListT<BookMarking>(path, "bookMarking.json")?.let {
+                try {
+                    appDb.bookMarkingDao.insert(*it.toTypedArray())
+                } catch (_: SQLiteConstraintException) {
+                }
+            }
         }
         if (BackupConfig.dbIsNotIgnored("bookGroup")) {
             fileToListT<BookGroup>(path, "bookGroup.json")?.let {