From ab0995ab9f8208f96e49fd4d262b51d1ae76890e Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Thu, 9 Feb 2023 14:54:52 -0500 Subject: [PATCH] Make MergedMangaReference immutable --- .../tachiyomi/data/backup/BackupManager.kt | 6 +-- .../models/BackupMergedMangaReference.kt | 2 +- .../tachiyomi/ui/manga/MangaScreenModel.kt | 10 ++-- .../manga/merged/EditMergedSettingsDialog.kt | 38 +++++++++----- .../merged/EditMergedSettingsHeaderAdapter.kt | 51 ++++++++++--------- app/src/main/java/exh/EXHMigrations.kt | 4 +- .../merged/sql/models/MergedMangaReference.kt | 16 +++--- i18n/src/main/res/values-fr/strings_sy.xml | 2 - i18n/src/main/res/values-in/strings_sy.xml | 2 - .../src/main/res/values-pt-rBR/strings_sy.xml | 2 - i18n/src/main/res/values-ru/strings_sy.xml | 2 - .../src/main/res/values-zh-rCN/strings_sy.xml | 2 - i18n/src/main/res/values/strings_sy.xml | 2 - 13 files changed, 68 insertions(+), 71 deletions(-) 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 ec75bc72a..67bc0254c 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 @@ -723,8 +723,6 @@ class BackupManager( // Let the db assign the id val mergedManga = handler.awaitOneOrNull { mangasQueries.getMangaByUrlAndSource(backupMergedMangaReference.mangaUrl, backupMergedMangaReference.mangaSourceId, mangaMapper) } ?: return@forEach backupMergedMangaReference.getMergedMangaReference().run { - mergeId = mergeMangaId - mangaId = mergedManga.id handler.await { mergedQueries.insert( infoManga = isInfoManga, @@ -732,9 +730,9 @@ class BackupManager( chapterSortMode = chapterSortMode.toLong(), chapterPriority = chapterPriority.toLong(), downloadChapters = downloadChapters, - mergeId = mergeId!!, + mergeId = mergeMangaId, mergeUrl = mergeUrl, - mangaId = mangaId, + mangaId = mergedManga.id, mangaUrl = mangaUrl, mangaSource = mangaSourceId, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupMergedMangaReference.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupMergedMangaReference.kt index e1eac6aec..7f25129df 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupMergedMangaReference.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupMergedMangaReference.kt @@ -30,7 +30,7 @@ data class BackupMergedMangaReference( mangaSourceId = mangaSourceId, mergeId = null, mangaId = null, - id = null, + id = -1, ) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt index 6ff335fce..fd91c6018 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt @@ -501,7 +501,7 @@ class MangaInfoScreenModel( val mangaReferences = mutableListOf( MergedMangaReference( - id = null, + id = -1, isInfoManga = false, getChapterUpdates = true, chapterSortMode = 0, @@ -517,7 +517,7 @@ class MangaInfoScreenModel( if (children.isEmpty() || children.all { it.mangaSourceId != MERGED_SOURCE_ID }) { mangaReferences += MergedMangaReference( - id = null, + id = -1, isInfoManga = false, getChapterUpdates = false, chapterSortMode = 0, @@ -574,7 +574,7 @@ class MangaInfoScreenModel( } val originalMangaReference = MergedMangaReference( - id = null, + id = -1, isInfoManga = true, getChapterUpdates = true, chapterSortMode = 0, @@ -588,7 +588,7 @@ class MangaInfoScreenModel( ) val newMangaReference = MergedMangaReference( - id = null, + id = -1, isInfoManga = false, getChapterUpdates = true, chapterSortMode = 0, @@ -602,7 +602,7 @@ class MangaInfoScreenModel( ) val mergedMangaReference = MergedMangaReference( - id = null, + id = -1, isInfoManga = false, getChapterUpdates = false, chapterSortMode = 0, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsDialog.kt index 38f203dc7..c58c124a4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsDialog.kt @@ -71,10 +71,12 @@ class EditMergedSettingsState( override fun onItemReleased(position: Int) { val mergedMangaAdapter = mergedMangaAdapter ?: return - mergedMangas.onEach { mergedManga -> - mergedManga.second.chapterPriority = mergedMangaAdapter.currentItems.indexOfFirst { - mergedManga.second.id == it.mergedMangaReference.id - } + mergedMangas = mergedMangas.map { (manga, reference) -> + manga to reference.copy( + chapterPriority = mergedMangaAdapter.currentItems.indexOfFirst { + reference.id == it.mergedMangaReference.id + }, + ) } } @@ -106,15 +108,19 @@ class EditMergedSettingsState( private fun toggleChapterUpdates(position: Int) { val adapterReference = mergedMangaAdapter?.currentItems?.getOrNull(position)?.mergedMangaReference - mergedMangas.firstOrNull { it.second.id != null && it.second.id == adapterReference?.id }?.apply { - second.getChapterUpdates = !second.getChapterUpdates + ?: return + mergedMangas = mergedMangas.map { pair -> + val (manga, reference) = pair + if (reference.id != adapterReference.id) return@map pair - mergedMangaAdapter?.allBoundViewHolders?.firstOrNull { it is EditMergedMangaHolder && it.reference.id == second.id }?.let { + mergedMangaAdapter?.allBoundViewHolders?.firstOrNull { it is EditMergedMangaHolder && it.reference.id == reference.id }?.let { if (it is EditMergedMangaHolder) { - it.updateChapterUpdatesIcon(second.getChapterUpdates) + it.updateChapterUpdatesIcon(!reference.getChapterUpdates) } } ?: context.toast(R.string.merged_chapter_updates_error) - } ?: context.toast(R.string.merged_toggle_chapter_updates_find_error) + + manga to reference.copy(getChapterUpdates = !reference.getChapterUpdates) + } } override fun onToggleChapterDownloadsClicked(position: Int) { @@ -130,15 +136,19 @@ class EditMergedSettingsState( private fun toggleChapterDownloads(position: Int) { val adapterReference = mergedMangaAdapter?.currentItems?.getOrNull(position)?.mergedMangaReference - mergedMangas.firstOrNull { it.second.id != null && it.second.id == adapterReference?.id }?.apply { - second.downloadChapters = !second.downloadChapters + ?: return + mergedMangas = mergedMangas.map { pair -> + val (manga, reference) = pair + if (reference.id != adapterReference.id) return@map pair - mergedMangaAdapter?.allBoundViewHolders?.firstOrNull { it is EditMergedMangaHolder && it.reference.id == second.id }?.let { + mergedMangaAdapter?.allBoundViewHolders?.firstOrNull { it is EditMergedMangaHolder && it.reference.id == reference.id }?.let { if (it is EditMergedMangaHolder) { - it.updateDownloadChaptersIcon(second.downloadChapters) + it.updateDownloadChaptersIcon(!reference.downloadChapters) } } ?: context.toast(R.string.merged_toggle_download_chapters_error) - } ?: context.toast(R.string.merged_toggle_download_chapters_find_error) + + manga to reference.copy(downloadChapters = !reference.downloadChapters) + } } fun onPositiveButtonClick() { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsHeaderAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsHeaderAdapter.kt index 7f1d8a22e..a75d57ab2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsHeaderAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsHeaderAdapter.kt @@ -68,19 +68,23 @@ class EditMergedSettingsHeaderAdapter(private val state: EditMergedSettingsState position: Int, id: Long, ) { - state.mergeReference?.chapterSortMode = when (position) { - 0 -> MergedMangaReference.CHAPTER_SORT_NO_DEDUPE - 1 -> MergedMangaReference.CHAPTER_SORT_PRIORITY - 2 -> MergedMangaReference.CHAPTER_SORT_MOST_CHAPTERS - 3 -> MergedMangaReference.CHAPTER_SORT_HIGHEST_CHAPTER_NUMBER - else -> MergedMangaReference.CHAPTER_SORT_NO_DEDUPE - } + state.mergeReference = state.mergeReference?.copy( + chapterSortMode = when (position) { + 0 -> MergedMangaReference.CHAPTER_SORT_NO_DEDUPE + 1 -> MergedMangaReference.CHAPTER_SORT_PRIORITY + 2 -> MergedMangaReference.CHAPTER_SORT_MOST_CHAPTERS + 3 -> MergedMangaReference.CHAPTER_SORT_HIGHEST_CHAPTER_NUMBER + else -> MergedMangaReference.CHAPTER_SORT_NO_DEDUPE + }, + ) xLogD(state.mergeReference?.chapterSortMode) editMergedMangaItemSortingListener.onSetPrioritySort(canMove()) } override fun onNothingSelected(parent: AdapterView<*>?) { - state.mergeReference?.chapterSortMode = MergedMangaReference.CHAPTER_SORT_NO_DEDUPE + state.mergeReference = state.mergeReference?.copy( + chapterSortMode = MergedMangaReference.CHAPTER_SORT_NO_DEDUPE, + ) } } @@ -111,25 +115,20 @@ class EditMergedSettingsHeaderAdapter(private val state: EditMergedSettingsState position: Int, id: Long, ) { - val mergedInfoManga = state.mergedMangas - .find { mergedManga -> - mergedManga.second.id == mergedMangas.getOrNull(position)?.second?.id - } - - if (mergedInfoManga != null) { - state.mergedMangas.onEach { - it.second.isInfoManga = false - } - mergedInfoManga.second.isInfoManga = true + state.mergedMangas = state.mergedMangas.map { (manga, reference) -> + manga to reference.copy( + isInfoManga = reference.id == mergedMangas.getOrNull(position)?.second?.id, + ) } } override fun onNothingSelected(parent: AdapterView<*>?) { mergedMangas.find { it.second.isInfoManga }?.second?.let { newInfoManga -> - state.mergedMangas.onEach { - it.second.isInfoManga = false + state.mergedMangas = state.mergedMangas.map { (manga, reference) -> + manga to reference.copy( + isInfoManga = reference.id == newInfoManga.id, + ) } - newInfoManga.isInfoManga = true } } } @@ -141,10 +140,12 @@ class EditMergedSettingsHeaderAdapter(private val state: EditMergedSettingsState true -> 1F false -> 0.5F } - state.mergeReference?.chapterSortMode = when (isChecked) { - true -> MergedMangaReference.CHAPTER_SORT_NO_DEDUPE - false -> MergedMangaReference.CHAPTER_SORT_NONE - } + state.mergeReference = state.mergeReference?.copy( + chapterSortMode = when (isChecked) { + true -> MergedMangaReference.CHAPTER_SORT_NO_DEDUPE + false -> MergedMangaReference.CHAPTER_SORT_NONE + }, + ) if (isChecked) binding.dedupeModeSpinner.setSelection(0) } diff --git a/app/src/main/java/exh/EXHMigrations.kt b/app/src/main/java/exh/EXHMigrations.kt index eaa81ee14..7d9f63054 100644 --- a/app/src/main/java/exh/EXHMigrations.kt +++ b/app/src/main/java/exh/EXHMigrations.kt @@ -153,7 +153,7 @@ object EXHMigrations { mergedManga.first.copy(url = it) } ?: mergedManga.first mergedMangaReferences += MergedMangaReference( - id = null, + id = -1, isInfoManga = false, getChapterUpdates = false, chapterSortMode = 0, @@ -168,7 +168,7 @@ object EXHMigrations { mergedManga.second.children.distinct().forEachIndexed { index, mangaSource -> val load = mangaSource.load() ?: return@forEachIndexed mergedMangaReferences += MergedMangaReference( - id = null, + id = -1, isInfoManga = index == 0, getChapterUpdates = true, chapterSortMode = 0, diff --git a/app/src/main/java/exh/merged/sql/models/MergedMangaReference.kt b/app/src/main/java/exh/merged/sql/models/MergedMangaReference.kt index 6526b6b9d..d1c4ca874 100644 --- a/app/src/main/java/exh/merged/sql/models/MergedMangaReference.kt +++ b/app/src/main/java/exh/merged/sql/models/MergedMangaReference.kt @@ -2,31 +2,31 @@ package exh.merged.sql.models data class MergedMangaReference( // Tag identifier, unique - var id: Long?, + val id: Long, // The manga where it grabs the updated manga info - var isInfoManga: Boolean, + val isInfoManga: Boolean, // If false the manga will not grab chapter updates - var getChapterUpdates: Boolean, + val getChapterUpdates: Boolean, // The mode in which the chapters are handeled, only set in the main merge reference - var chapterSortMode: Int, + val chapterSortMode: Int, // chapter priority the deduplication uses - var chapterPriority: Int, + val chapterPriority: Int, // Set if you want it to download new chapters - var downloadChapters: Boolean, + val downloadChapters: Boolean, // merged manga this reference is attached to - var mergeId: Long?, + val mergeId: Long?, // merged manga url this reference is attached to val mergeUrl: String, // manga id included in the merge this reference is attached to - var mangaId: Long?, + val mangaId: Long?, // manga url included in the merge this reference is attached to val mangaUrl: String, diff --git a/i18n/src/main/res/values-fr/strings_sy.xml b/i18n/src/main/res/values-fr/strings_sy.xml index eaa446401..bba0a9203 100644 --- a/i18n/src/main/res/values-fr/strings_sy.xml +++ b/i18n/src/main/res/values-fr/strings_sy.xml @@ -474,9 +474,7 @@ Activer ou désactiver cette option désactivera ou activera les téléchargements des chapitres pour ce manga Références de fusion non valides Erreur de basculement des mises à jour de chapitre - Impossible de trouver le manga pour basculer les mises à jour de chapitre Erreur de basculement des chapitres de téléchargement - Impossible de trouver le manga pour basculer le téléchargements des chapitres Autoriser la déduplication: Mode de déduplication: Info manga: diff --git a/i18n/src/main/res/values-in/strings_sy.xml b/i18n/src/main/res/values-in/strings_sy.xml index d0d019d01..b925b53ef 100644 --- a/i18n/src/main/res/values-in/strings_sy.xml +++ b/i18n/src/main/res/values-in/strings_sy.xml @@ -586,9 +586,7 @@ Mengalihkan ini akan menonaktifkan atau mengaktifkan unduhan bab untuk manga gabungan ini Referensi penggabungan tidak valid Tombol kesalahan pembaruan bab - Tidak dapat menemukan manga untuk pembaruan bab Tombol kesalahan unduhan bab - Tidak dapat menemukan manga untuk unduhan bab Izinkan deduplikasi: Mode deduplikasi: Info manga: diff --git a/i18n/src/main/res/values-pt-rBR/strings_sy.xml b/i18n/src/main/res/values-pt-rBR/strings_sy.xml index 48ebd6163..92d813ab1 100644 --- a/i18n/src/main/res/values-pt-rBR/strings_sy.xml +++ b/i18n/src/main/res/values-pt-rBR/strings_sy.xml @@ -556,9 +556,7 @@ Mudar isto (des)ativará downloads de capítulo a este mangá juntado Referências juntadas inválidas Alternar erro de atualizações de capítulo - Mangá não pôde ser encontrado para alternar atualizações de capítulo Erro ao alternar downloads de capítulo - Mangá não pôde ser encontrado para alternar downloads de capítulo Permitir desduplicação: Modo da desduplicação: Informações do mangá: diff --git a/i18n/src/main/res/values-ru/strings_sy.xml b/i18n/src/main/res/values-ru/strings_sy.xml index 6fba4e809..03b449b68 100644 --- a/i18n/src/main/res/values-ru/strings_sy.xml +++ b/i18n/src/main/res/values-ru/strings_sy.xml @@ -638,9 +638,7 @@ Переключение этого параметра отключит/включит загрузку глав для этой объеденённой серии Недействительные объеденённые ссылки Ошибка переключения обновлений глав - Не удалось найти серию для переключения обновлений глав Ошибка переключения загрузки глав - Не удалось найти серию для переключения загрузки глав Разрешить дедупликацию: Режим дедупликации: Сведенья серии: diff --git a/i18n/src/main/res/values-zh-rCN/strings_sy.xml b/i18n/src/main/res/values-zh-rCN/strings_sy.xml index 175c7a3ae..15fd68524 100644 --- a/i18n/src/main/res/values-zh-rCN/strings_sy.xml +++ b/i18n/src/main/res/values-zh-rCN/strings_sy.xml @@ -593,9 +593,7 @@ 更改此项将禁用或启用此合并漫画的章节下载 合并后的引用无效 切换章节更新错误 - 找不到漫画,无法切换章节更新 切换下载章节错误 - 找不到漫画来切换章节下载 允许删除重复数据: 去重模式: 漫画信息: diff --git a/i18n/src/main/res/values/strings_sy.xml b/i18n/src/main/res/values/strings_sy.xml index c27ee04ad..adbc336e4 100644 --- a/i18n/src/main/res/values/strings_sy.xml +++ b/i18n/src/main/res/values/strings_sy.xml @@ -630,9 +630,7 @@ Toggling this will disable or enable chapter downloads for this merged entry Merged references invalid Toggle chapter updates error - Could not find entry to toggle chapter updates Toggle download chapters error - Could not find entry to toggle chapter downloads Allow deduplication: Dedupe mode: Info entry: