Jelajahi Sumber

feat: 换源保留选项增加作者

HapeLee 1 bulan lalu
induk
melakukan
b9b4e5110d

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

@@ -37,6 +37,7 @@ class ChangeSourceSettingsRepository : ChangeSourceSettingsGateway {
                 KEY_MIGRATE_COVER to options.migrateCover,
                 KEY_MIGRATE_CATEGORY to options.migrateCategory,
                 KEY_MIGRATE_REMARK to options.migrateRemark,
+                KEY_MIGRATE_AUTHOR to options.migrateAuthor,
                 KEY_MIGRATE_READ_CONFIG to options.migrateReadConfig,
                 KEY_DELETE_DOWNLOADED_CHAPTERS to options.deleteDownloadedChapters,
             )
@@ -56,6 +57,7 @@ internal fun Preferences.toChangeSourceSettings() = ChangeSourceSettings(
     migrateCover = compatDsBoolean(KEY_MIGRATE_COVER) ?: true,
     migrateCategory = compatDsBoolean(KEY_MIGRATE_CATEGORY) ?: true,
     migrateRemark = compatDsBoolean(KEY_MIGRATE_REMARK) ?: true,
+    migrateAuthor = compatDsBoolean(KEY_MIGRATE_AUTHOR) ?: true,
     migrateReadConfig = compatDsBoolean(KEY_MIGRATE_READ_CONFIG) ?: true,
     deleteDownloadedChapters = compatDsBoolean(KEY_DELETE_DOWNLOADED_CHAPTERS) ?: false,
 )
@@ -72,6 +74,7 @@ internal fun ChangeSourceSettings.toPrefMap(): Map<String, Any?> = mapOf(
     KEY_MIGRATE_COVER to migrateCover,
     KEY_MIGRATE_CATEGORY to migrateCategory,
     KEY_MIGRATE_REMARK to migrateRemark,
+    KEY_MIGRATE_AUTHOR to migrateAuthor,
     KEY_MIGRATE_READ_CONFIG to migrateReadConfig,
     KEY_DELETE_DOWNLOADED_CHAPTERS to deleteDownloadedChapters,
 )
@@ -82,5 +85,6 @@ private const val KEY_MIGRATE_GROUP = "migrateGroup"
 private const val KEY_MIGRATE_COVER = "migrateCover"
 private const val KEY_MIGRATE_CATEGORY = "migrateCategory"
 private const val KEY_MIGRATE_REMARK = "migrateRemark"
+private const val KEY_MIGRATE_AUTHOR = "migrateAuthor"
 private const val KEY_MIGRATE_READ_CONFIG = "migrateReadConfig"
 private const val KEY_DELETE_DOWNLOADED_CHAPTERS = "deleteDownloadedChapters"

+ 2 - 0
app/src/main/java/io/legado/app/domain/model/settings/ChangeSourceSettings.kt

@@ -14,6 +14,7 @@ data class ChangeSourceSettings(
     val migrateCover: Boolean = true,
     val migrateCategory: Boolean = true,
     val migrateRemark: Boolean = true,
+    val migrateAuthor: Boolean = true,
     val migrateReadConfig: Boolean = true,
     val deleteDownloadedChapters: Boolean = false,
 ) {
@@ -24,6 +25,7 @@ data class ChangeSourceSettings(
         migrateCover = migrateCover,
         migrateCategory = migrateCategory,
         migrateRemark = migrateRemark,
+        migrateAuthor = migrateAuthor,
         migrateReadConfig = migrateReadConfig,
         deleteDownloadedChapters = deleteDownloadedChapters,
     )

+ 6 - 0
app/src/main/java/io/legado/app/domain/usecase/BookMigration.kt

@@ -59,6 +59,9 @@ internal fun Book.migrateInto(
         target.customIntro = customIntro
         target.remark = remark
     }
+    if (options.migrateAuthor) {
+        target.author = author
+    }
     target.canUpdate = canUpdate
     if (config.fixedType) {
         target.type = type
@@ -95,6 +98,9 @@ internal fun Book.copyMigratableFieldsTo(
         target.customIntro = customIntro
         target.remark = remark
     }
+    if (options.migrateAuthor) {
+        target.author = author
+    }
     if (options.migrateReadConfig) {
         target.readConfig = readConfig
     }

+ 1 - 0
app/src/main/java/io/legado/app/domain/usecase/ChangeBookSourceUseCase.kt

@@ -27,6 +27,7 @@ data class ChangeSourceMigrationOptions(
     val migrateCover: Boolean = true,
     val migrateCategory: Boolean = true,
     val migrateRemark: Boolean = true,
+    val migrateAuthor: Boolean = true,
     val migrateReadConfig: Boolean = true,
     val deleteDownloadedChapters: Boolean = false,
 )

+ 5 - 0
app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceMigrationOptionsSheet.kt

@@ -48,6 +48,9 @@ fun ChangeSourceMigrationOptionsSheet(
     var migrateRemark by rememberSaveable(show) {
         mutableStateOf(initialOptions.migrateRemark)
     }
+    var migrateAuthor by rememberSaveable(show) {
+        mutableStateOf(initialOptions.migrateAuthor)
+    }
     var migrateReadConfig by rememberSaveable(show) {
         mutableStateOf(initialOptions.migrateReadConfig)
     }
@@ -87,6 +90,7 @@ fun ChangeSourceMigrationOptionsSheet(
             CheckboxItem("自定义封面", checked = migrateCover) { migrateCover = it }
             CheckboxItem("分类与标签", checked = migrateCategory) { migrateCategory = it }
             CheckboxItem("备注和自定义简介", checked = migrateRemark) { migrateRemark = it }
+            CheckboxItem("作者", checked = migrateAuthor) { migrateAuthor = it }
             CheckboxItem("阅读设置", checked = migrateReadConfig) { migrateReadConfig = it }
             if (showDeleteDownloaded) {
                 CheckboxItem("删除已下载章节", checked = deleteDownloadedChapters) {
@@ -105,6 +109,7 @@ fun ChangeSourceMigrationOptionsSheet(
                             migrateCover = migrateCover,
                             migrateCategory = migrateCategory,
                             migrateRemark = migrateRemark,
+                            migrateAuthor = migrateAuthor,
                             migrateReadConfig = migrateReadConfig,
                             deleteDownloadedChapters = deleteDownloadedChapters,
                         )

+ 10 - 8
app/src/main/java/io/legado/app/ui/widget/components/conflict/BookshelfConflictSheet.kt

@@ -56,20 +56,22 @@ private val ChangeSourceMigrationOptionsSaver = listSaver<ChangeSourceMigrationO
             it.migrateCover,
             it.migrateCategory,
             it.migrateRemark,
+            it.migrateAuthor,
             it.migrateReadConfig,
             it.deleteDownloadedChapters,
         )
     },
     restore = {
         ChangeSourceMigrationOptions(
-            migrateChapters = it[0],
-            migrateReadingProgress = it[1],
-            migrateGroup = it[2],
-            migrateCover = it[3],
-            migrateCategory = it[4],
-            migrateRemark = it[5],
-            migrateReadConfig = it[6],
-            deleteDownloadedChapters = it[7],
+            migrateChapters = it.getOrElse(0) { true },
+            migrateReadingProgress = it.getOrElse(1) { true },
+            migrateGroup = it.getOrElse(2) { true },
+            migrateCover = it.getOrElse(3) { true },
+            migrateCategory = it.getOrElse(4) { true },
+            migrateRemark = it.getOrElse(5) { true },
+            migrateAuthor = if (it.size > 8) it[6] else true,
+            migrateReadConfig = if (it.size > 8) it[7] else it.getOrElse(6) { true },
+            deleteDownloadedChapters = if (it.size > 8) it[8] else it.getOrElse(7) { false },
         )
     },
 )

+ 1 - 0
app/src/test/java/io/legado/app/data/repository/Phase2SettingsMappingTest.kt

@@ -47,6 +47,7 @@ class Phase2SettingsMappingTest {
                 base.copy(migrateCover = false),
                 base.copy(migrateCategory = false),
                 base.copy(migrateRemark = false),
+                base.copy(migrateAuthor = false),
                 base.copy(migrateReadConfig = false),
                 base.copy(deleteDownloadedChapters = true),
             ),