Make MergedMangaReference immutable
This commit is contained in:
@@ -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,
|
||||
)
|
||||
|
||||
+1
-1
@@ -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() {
|
||||
|
||||
+26
-25
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user