Make MergedMangaReference immutable

This commit is contained in:
Jobobby04
2023-02-09 14:54:52 -05:00
parent eecf7fd1fb
commit ab0995ab9f
13 changed files with 68 additions and 71 deletions
@@ -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,
)
@@ -30,7 +30,7 @@ data class BackupMergedMangaReference(
mangaSourceId = mangaSourceId,
mergeId = null,
mangaId = null,
id = null,
id = -1,
)
}
}
@@ -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,
@@ -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() {
@@ -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)
}