From e897d5628f7408a31f7036deee9c1d7dcbd1c77a Mon Sep 17 00:00:00 2001 From: nzoba <55888232+nzoba@users.noreply.github.com> Date: Mon, 22 Aug 2022 20:12:56 +0200 Subject: [PATCH] Add option to backup read manga not in library (#1383) --- .../tachiyomi/data/backup/AbstractBackupManager.kt | 3 +++ .../eu/kanade/tachiyomi/data/backup/BackupConst.kt | 2 ++ .../eu/kanade/tachiyomi/data/backup/BackupManager.kt | 8 +++++++- .../tachiyomi/data/database/queries/MangaQueries.kt | 9 +++++++++ .../tachiyomi/data/database/queries/RawQueries.kt | 12 ++++++++++++ .../tachiyomi/ui/setting/SettingsBackupController.kt | 4 +++- app/src/main/res/values/strings.xml | 1 + 7 files changed, 37 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/AbstractBackupManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/AbstractBackupManager.kt index 62ef08a39a..fce4714cc8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/AbstractBackupManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/AbstractBackupManager.kt @@ -58,6 +58,9 @@ abstract class AbstractBackupManager(protected val context: Context) { protected fun getFavoriteManga(): List = db.getFavoriteMangas().executeAsBlocking() + protected fun getReadManga(): List = + db.getReadNotInLibraryMangas().executeAsBlocking() + /** * Inserts manga and returns id * diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupConst.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupConst.kt index 2a9b572520..af226f931a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupConst.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupConst.kt @@ -18,5 +18,7 @@ object BackupConst { internal const val BACKUP_TRACK_MASK = 0x8 internal const val BACKUP_CUSTOM_INFO = 0x10 internal const val BACKUP_CUSTOM_INFO_MASK = 0x10 + internal const val BACKUP_READ_MANGA = 0x20 + internal const val BACKUP_READ_MANGA_MASK = 0x20 internal const val BACKUP_ALL = 0x1F } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt index 374913649c..15d3b23151 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt @@ -12,6 +12,8 @@ import eu.kanade.tachiyomi.data.backup.BackupConst.BACKUP_CUSTOM_INFO import eu.kanade.tachiyomi.data.backup.BackupConst.BACKUP_CUSTOM_INFO_MASK import eu.kanade.tachiyomi.data.backup.BackupConst.BACKUP_HISTORY import eu.kanade.tachiyomi.data.backup.BackupConst.BACKUP_HISTORY_MASK +import eu.kanade.tachiyomi.data.backup.BackupConst.BACKUP_READ_MANGA +import eu.kanade.tachiyomi.data.backup.BackupConst.BACKUP_READ_MANGA_MASK import eu.kanade.tachiyomi.data.backup.BackupConst.BACKUP_TRACK import eu.kanade.tachiyomi.data.backup.BackupConst.BACKUP_TRACK_MASK import eu.kanade.tachiyomi.data.backup.models.Backup @@ -51,7 +53,11 @@ class BackupManager(context: Context) : AbstractBackupManager(context) { var backup: Backup? = null db.inTransaction { - val databaseManga = getFavoriteManga() + val databaseManga = getFavoriteManga() + if (flags and BACKUP_READ_MANGA_MASK == BACKUP_READ_MANGA) { + getReadManga() + } else { + emptyList() + } backup = Backup( backupMangas(databaseManga, flags), diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/MangaQueries.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/MangaQueries.kt index 5529a0a289..2ecb8149f8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/MangaQueries.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/MangaQueries.kt @@ -191,6 +191,15 @@ interface MangaQueries : DbProvider { ) .prepare() + fun getReadNotInLibraryMangas() = db.get() + .listOfObjects(Manga::class.java) + .withQuery( + RawQuery.builder() + .query(getReadMangaNotInLibraryQuery()) + .build(), + ) + .prepare() + fun getLastReadManga() = db.get() .listOfObjects(Manga::class.java) .withQuery( diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/RawQueries.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/RawQueries.kt index 2e84b1342e..1b64265a5e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/RawQueries.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/RawQueries.kt @@ -319,3 +319,15 @@ fun getSourceIdsWithNonLibraryMangaQuery() = WHERE ${Manga.COL_FAVORITE} = 0 GROUP BY ${Manga.COL_SOURCE} """ + +/** + * Query to get manga that are not in library, but have read chapters + */ +fun getReadMangaNotInLibraryQuery() = + """ + SELECT ${Manga.TABLE}.* + FROM ${Manga.TABLE} + WHERE ${Manga.COL_FAVORITE} = 0 AND ${Manga.COL_ID} IN( + SELECT ${Chapter.TABLE}.${Chapter.COL_MANGA_ID} FROM ${Chapter.TABLE} WHERE ${Chapter.COL_READ} = 1 OR ${Chapter.COL_LAST_PAGE_READ} != 0 + ) +""" \ No newline at end of file diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBackupController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBackupController.kt index f18c6c239b..a7e0102e00 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBackupController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBackupController.kt @@ -218,6 +218,7 @@ class SettingsBackupController : SettingsController() { R.string.tracking, R.string.history, R.string.custom_manga_info, + R.string.all_read_manga, ) .map { activity.getString(it) } @@ -225,7 +226,7 @@ class SettingsBackupController : SettingsController() { .setTitle(R.string.what_should_backup) .setMultiChoiceItems( options.toTypedArray(), - booleanArrayOf(true, true, true, true, true, true), + options.map { true }.toBooleanArray(), ) { dialog, position, _ -> if (position == 0) { val listView = (dialog as AlertDialog).listView @@ -243,6 +244,7 @@ class SettingsBackupController : SettingsController() { 3 -> flags = flags or BackupConst.BACKUP_TRACK 4 -> flags = flags or BackupConst.BACKUP_HISTORY 5 -> flags = flags or BackupConst.BACKUP_CUSTOM_INFO + 6 -> flags = flags or BackupConst.BACKUP_READ_MANGA } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d8083c7222..accf07baea 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -564,6 +564,7 @@ Error saving cover Error sharing cover Custom manga info + All read manga Set as default Filter scanlator groups