diff --git a/app/src/main/java/eu/kanade/domain/SYDomainModule.kt b/app/src/main/java/eu/kanade/domain/SYDomainModule.kt index 023ab3139..feccf4cf1 100644 --- a/app/src/main/java/eu/kanade/domain/SYDomainModule.kt +++ b/app/src/main/java/eu/kanade/domain/SYDomainModule.kt @@ -45,7 +45,7 @@ import tachiyomi.domain.manga.interactor.GetMergedManga import tachiyomi.domain.manga.interactor.GetMergedMangaById import tachiyomi.domain.manga.interactor.GetMergedMangaForDownloading import tachiyomi.domain.manga.interactor.GetMergedReferencesById -import tachiyomi.domain.manga.interactor.GetReadMangaNotInLibrary +import tachiyomi.domain.manga.interactor.GetReadMangaNotInLibraryView import tachiyomi.domain.manga.interactor.GetSearchMetadata import tachiyomi.domain.manga.interactor.GetSearchTags import tachiyomi.domain.manga.interactor.GetSearchTitles @@ -101,7 +101,7 @@ class SYDomainModule : InjektModule { addFactory { GetPagePreviews(get(), get()) } addFactory { SearchEngine() } addFactory { IsTrackUnfollowed() } - addFactory { GetReadMangaNotInLibrary(get()) } + addFactory { GetReadMangaNotInLibraryView(get()) } // Required for [MetadataSource] addFactory { GetManga(get()) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt index ca9eabe1b..420c9244f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt @@ -32,6 +32,7 @@ import tachiyomi.domain.backup.service.BackupPreferences import tachiyomi.domain.manga.interactor.GetFavorites import tachiyomi.domain.manga.interactor.GetMergedManga import tachiyomi.domain.manga.model.Manga +import tachiyomi.domain.manga.repository.MangaRepository import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -48,6 +49,7 @@ class BackupCreator( private val parser: ProtoBuf = Injekt.get(), private val getFavorites: GetFavorites = Injekt.get(), private val backupPreferences: BackupPreferences = Injekt.get(), + private val mangaRepository: MangaRepository = Injekt.get(), private val categoriesBackupCreator: CategoriesBackupCreator = CategoriesBackupCreator(), private val mangaBackupCreator: MangaBackupCreator = MangaBackupCreator(), @@ -85,15 +87,12 @@ class BackupCreator( throw IllegalStateException(context.stringResource(MR.strings.create_backup_file_error)) } - val backupManga = backupMangas( - getFavorites.await() /* SY --> */ + - if (options.readEntries) { - handler.awaitList { mangasQueries.getReadMangaNotInLibrary(MangaMapper::mapManga) } - } else { - emptyList() - } + getMergedManga.await(), // SY <-- - options, - ) + val nonFavoriteManga = if (options.readEntries) mangaRepository.getReadMangaNotInLibrary() else emptyList() + // SY --> + val mergedManga = getMergedManga.await() + // SY <-- + val backupManga = backupMangas(getFavorites.await() + nonFavoriteManga /* SY --> */ + mergedManga /* SY <-- */, options) + val backup = Backup( backupManga = backupManga, backupCategories = backupCategories(options), diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupOptions.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupOptions.kt index 4915048e5..6b2dc5e8a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupOptions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupOptions.kt @@ -11,13 +11,13 @@ data class BackupOptions( val chapters: Boolean = true, val tracking: Boolean = true, val history: Boolean = true, + val readEntries: Boolean = true, val appSettings: Boolean = true, val extensionRepoSettings: Boolean = true, val sourceSettings: Boolean = true, val privateSettings: Boolean = false, // SY --> val customInfo: Boolean = true, - val readEntries: Boolean = true, val savedSearches: Boolean = true, // SY <-- ) { @@ -28,13 +28,13 @@ data class BackupOptions( chapters, tracking, history, + readEntries, appSettings, extensionRepoSettings, sourceSettings, privateSettings, // SY --> customInfo, - readEntries, savedSearches, // SY <-- ) @@ -72,6 +72,12 @@ data class BackupOptions( getter = BackupOptions::categories, setter = { options, enabled -> options.copy(categories = enabled) }, ), + Entry( + label = MR.strings.non_library_settings, + getter = BackupOptions::readEntries, + setter = { options, enabled -> options.copy(readEntries = enabled) }, + enabled = { it.libraryEntries }, + ), // SY --> Entry( label = SYMR.strings.custom_entry_info, @@ -79,12 +85,6 @@ data class BackupOptions( setter = { options, enabled -> options.copy(customInfo = enabled) }, enabled = { it.libraryEntries }, ), - Entry( - label = SYMR.strings.all_read_entries, - getter = BackupOptions::readEntries, - setter = { options, enabled -> options.copy(readEntries = enabled) }, - enabled = { it.libraryEntries }, - ), Entry( label = SYMR.strings.saved_searches, getter = BackupOptions::savedSearches, @@ -123,13 +123,13 @@ data class BackupOptions( chapters = array[2], tracking = array[3], history = array[4], - appSettings = array[5], - extensionRepoSettings = array[6], - sourceSettings = array[7], - privateSettings = array[8], + readEntries = array[5], + appSettings = array[6], + extensionRepoSettings = array[7], + sourceSettings = array[8], + privateSettings = array[9], // SY --> - customInfo = array[9], - readEntries = array[10], + customInfo = array[10], savedSearches = array[11], // SY <-- ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreenModel.kt index db44cd672..5889ea0ab 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreenModel.kt @@ -24,7 +24,7 @@ import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_HAS_U import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_NON_COMPLETED import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_NON_READ import tachiyomi.domain.manga.interactor.GetLibraryManga -import tachiyomi.domain.manga.interactor.GetReadMangaNotInLibrary +import tachiyomi.domain.manga.interactor.GetReadMangaNotInLibraryView import tachiyomi.domain.track.interactor.GetTracks import tachiyomi.domain.track.model.Track import tachiyomi.source.local.isLocal @@ -39,7 +39,7 @@ class StatsScreenModel( private val preferences: LibraryPreferences = Injekt.get(), private val trackerManager: TrackerManager = Injekt.get(), // SY --> - private val getReadMangaNotInLibrary: GetReadMangaNotInLibrary = Injekt.get(), + private val getReadMangaNotInLibraryView: GetReadMangaNotInLibraryView = Injekt.get(), // SY <-- ) : StateScreenModel(StatsScreenState.Loading) { @@ -55,7 +55,7 @@ class StatsScreenModel( _allRead.onEach { allRead -> mutableState.update { StatsScreenState.Loading } val libraryManga = getLibraryManga.await() + if (allRead) { - getReadMangaNotInLibrary.await() + getReadMangaNotInLibraryView.await() } else { emptyList() } diff --git a/data/src/main/java/tachiyomi/data/manga/MangaRepositoryImpl.kt b/data/src/main/java/tachiyomi/data/manga/MangaRepositoryImpl.kt index 5687a0a15..3aea14393 100644 --- a/data/src/main/java/tachiyomi/data/manga/MangaRepositoryImpl.kt +++ b/data/src/main/java/tachiyomi/data/manga/MangaRepositoryImpl.kt @@ -51,6 +51,10 @@ class MangaRepositoryImpl( return handler.awaitList { mangasQueries.getFavorites(MangaMapper::mapManga) } } + override suspend fun getReadMangaNotInLibrary(): List { + return handler.awaitList { mangasQueries.getReadMangaNotInLibrary(MangaMapper::mapManga) } + } + override suspend fun getLibraryManga(): List { return handler.awaitListExecutable { (handler as AndroidDatabaseHandler).getLibraryQuery() @@ -198,7 +202,7 @@ class MangaRepositoryImpl( handler.await { mangasQueries.deleteById(mangaId) } } - override suspend fun getReadMangaNotInLibrary(): List { + override suspend fun getReadMangaNotInLibraryView(): List { return handler.awaitListExecutable { (handler as AndroidDatabaseHandler).getLibraryQuery("M.favorite = 0 AND C.readCount != 0") }.map(MangaMapper::mapLibraryView) diff --git a/data/src/main/sqldelight/tachiyomi/data/mangas.sq b/data/src/main/sqldelight/tachiyomi/data/mangas.sq index bfdacfbb7..00c56e75e 100644 --- a/data/src/main/sqldelight/tachiyomi/data/mangas.sq +++ b/data/src/main/sqldelight/tachiyomi/data/mangas.sq @@ -80,10 +80,12 @@ FROM mangas WHERE favorite = 1; getReadMangaNotInLibrary: -SELECT mangas.* +SELECT * FROM mangas -WHERE favorite = 0 AND _id IN( - SELECT chapters.manga_id FROM chapters WHERE read = 1 OR last_page_read != 0 +WHERE favorite = 0 AND _id IN ( + SELECT DISTINCT chapters.manga_id + FROM chapters + WHERE read = 1 OR last_page_read != 0 ); getAllManga: diff --git a/domain/src/main/java/tachiyomi/domain/manga/interactor/GetReadMangaNotInLibrary.kt b/domain/src/main/java/tachiyomi/domain/manga/interactor/GetReadMangaNotInLibraryView.kt similarity index 72% rename from domain/src/main/java/tachiyomi/domain/manga/interactor/GetReadMangaNotInLibrary.kt rename to domain/src/main/java/tachiyomi/domain/manga/interactor/GetReadMangaNotInLibraryView.kt index 57cc6c5cb..61a53633b 100644 --- a/domain/src/main/java/tachiyomi/domain/manga/interactor/GetReadMangaNotInLibrary.kt +++ b/domain/src/main/java/tachiyomi/domain/manga/interactor/GetReadMangaNotInLibraryView.kt @@ -3,11 +3,11 @@ package tachiyomi.domain.manga.interactor import tachiyomi.domain.library.model.LibraryManga import tachiyomi.domain.manga.repository.MangaRepository -class GetReadMangaNotInLibrary( +class GetReadMangaNotInLibraryView( private val mangaRepository: MangaRepository, ) { suspend fun await(): List { - return mangaRepository.getReadMangaNotInLibrary() + return mangaRepository.getReadMangaNotInLibraryView() } } diff --git a/domain/src/main/java/tachiyomi/domain/manga/repository/MangaRepository.kt b/domain/src/main/java/tachiyomi/domain/manga/repository/MangaRepository.kt index b0d7048a5..0b58a8ece 100644 --- a/domain/src/main/java/tachiyomi/domain/manga/repository/MangaRepository.kt +++ b/domain/src/main/java/tachiyomi/domain/manga/repository/MangaRepository.kt @@ -17,6 +17,8 @@ interface MangaRepository { suspend fun getFavorites(): List + suspend fun getReadMangaNotInLibrary(): List + suspend fun getLibraryManga(): List fun getLibraryMangaAsFlow(): Flow> @@ -44,6 +46,6 @@ interface MangaRepository { suspend fun deleteManga(mangaId: Long) - suspend fun getReadMangaNotInLibrary(): List + suspend fun getReadMangaNotInLibraryView(): List // SY <-- } diff --git a/i18n/src/commonMain/moko-resources/base/strings.xml b/i18n/src/commonMain/moko-resources/base/strings.xml index 8a85c446f..41a5de8b7 100755 --- a/i18n/src/commonMain/moko-resources/base/strings.xml +++ b/i18n/src/commonMain/moko-resources/base/strings.xml @@ -546,6 +546,7 @@ Source settings Extension repos Include sensitive settings (e.g., tracker login tokens) + All read entries Creating backup Backup failed Storage permissions not granted