Fix saving override for non-library manga

This commit is contained in:
Koitharu
2025-07-10 08:48:10 +03:00
parent b528b7b3c1
commit 621cb19c5b
9 changed files with 34 additions and 32 deletions

View File

@@ -30,21 +30,19 @@ constructor(
oldManga: Manga,
newManga: Manga,
) {
val oldDetails =
if (oldManga.chapters.isNullOrEmpty()) {
runCatchingCancellable {
mangaRepositoryFactory.create(oldManga.source).getDetails(oldManga)
}.getOrDefault(oldManga)
} else {
oldManga
}
val newDetails =
if (newManga.chapters.isNullOrEmpty()) {
mangaRepositoryFactory.create(newManga.source).getDetails(newManga)
} else {
newManga
}
mangaDataRepository.storeManga(newDetails)
val oldDetails = if (oldManga.chapters.isNullOrEmpty()) {
runCatchingCancellable {
mangaRepositoryFactory.create(oldManga.source).getDetails(oldManga)
}.getOrDefault(oldManga)
} else {
oldManga
}
val newDetails = if (newManga.chapters.isNullOrEmpty()) {
mangaRepositoryFactory.create(newManga.source).getDetails(newManga)
} else {
newManga
}
mangaDataRepository.storeManga(newDetails, replaceExisting = true)
database.withTransaction {
// replace favorites
val favoritesDao = database.getFavouritesDao()
@@ -101,11 +99,11 @@ constructor(
mangaId = newDetails.id,
rating = prevInfo.rating,
status =
prevInfo.status ?: when {
newHistory == null -> ScrobblingStatus.PLANNED
newHistory.percent == 1f -> ScrobblingStatus.COMPLETED
else -> ScrobblingStatus.READING
},
prevInfo.status ?: when {
newHistory == null -> ScrobblingStatus.PLANNED
newHistory.percent == 1f -> ScrobblingStatus.COMPLETED
else -> ScrobblingStatus.READING
},
comment = prevInfo.comment,
)
if (newHistory != null) {

View File

@@ -149,7 +149,7 @@ class AppShortcutManager @Inject constructor(
onSuccess = { IconCompat.createWithAdaptiveBitmap(it) },
onFailure = { IconCompat.createWithResource(context, R.drawable.ic_shortcut_default) },
)
mangaRepository.storeManga(manga)
mangaRepository.storeManga(manga, replaceExisting = true)
val title = manga.title.ifEmpty {
manga.altTitles.firstOrNull()
}.ifNullOrEmpty {

View File

@@ -41,7 +41,7 @@ class MangaDataRepository @Inject constructor(
suspend fun saveReaderMode(manga: Manga, mode: ReaderMode) {
db.withTransaction {
storeManga(manga)
storeManga(manga, replaceExisting = false)
val entity = db.getPreferencesDao().find(manga.id) ?: newEntity(manga.id)
db.getPreferencesDao().upsert(entity.copy(mode = mode.id))
}
@@ -49,7 +49,7 @@ class MangaDataRepository @Inject constructor(
suspend fun saveColorFilter(manga: Manga, colorFilter: ReaderColorFilter?) {
db.withTransaction {
storeManga(manga)
storeManga(manga, replaceExisting = false)
val entity = db.getPreferencesDao().find(manga.id) ?: newEntity(manga.id)
db.getPreferencesDao().upsert(
entity.copy(
@@ -87,10 +87,11 @@ class MangaDataRepository @Inject constructor(
return map
}
suspend fun setOverride(mangaId: Long, override: MangaOverride?) {
suspend fun setOverride(manga: Manga, override: MangaOverride?) {
db.withTransaction {
storeManga(manga, replaceExisting = false)
val dao = db.getPreferencesDao()
val entity = dao.find(mangaId) ?: newEntity(mangaId)
val entity = dao.find(manga.id) ?: newEntity(manga.id)
dao.upsert(
entity.copy(
titleOverride = override?.title?.nullIfEmpty(),
@@ -127,7 +128,10 @@ class MangaDataRepository @Inject constructor(
else -> null
}
suspend fun storeManga(manga: Manga) {
suspend fun storeManga(manga: Manga, replaceExisting: Boolean) {
if (!replaceExisting && db.getMangaDao().find(manga.id) != null) {
return
}
db.withTransaction {
// avoid storing local manga if remote one is already stored
val existing = if (manga.isLocal) {

View File

@@ -537,7 +537,7 @@ class DownloadWorker @AssistedInject constructor(
return
}
val requests = tasks.map { (manga, task) ->
mangaDataRepository.storeManga(manga)
mangaDataRepository.storeManga(manga, replaceExisting = true)
OneTimeWorkRequestBuilder<DownloadWorker>()
.setConstraints(createConstraints(task.allowMeteredNetwork))
.addTag(TAG)

View File

@@ -24,7 +24,7 @@ class RecoverMangaUseCase @Inject constructor(
repository.getDetails(it)
} ?: return@runCatchingCancellable null
val merged = merge(manga, newManga)
mangaDataRepository.storeManga(merged)
mangaDataRepository.storeManga(merged, replaceExisting = true)
merged
}.onFailure {
it.printStackTraceDebug()

View File

@@ -118,7 +118,7 @@ class HistoryRepository @Inject constructor(
}
assert(manga.chapters != null)
db.withTransaction {
mangaRepository.storeManga(manga)
mangaRepository.storeManga(manga, replaceExisting = true)
val branch = manga.chapters?.findById(chapterId)?.branch
db.getHistoryDao().upsert(
HistoryEntity(

View File

@@ -97,7 +97,7 @@ class LocalMangaIndex @Inject constructor(
}
private suspend fun upsert(manga: LocalManga) {
mangaDataRepository.storeManga(manga.manga)
mangaDataRepository.storeManga(manga.manga, replaceExisting = true)
db.getLocalMangaIndexDao().upsert(manga.toEntity())
}

View File

@@ -72,7 +72,7 @@ class CoverRestoreInterceptor @Inject constructor(
val repo = repositoryFactory.create(manga.source)
val fixed = repo.find(manga) ?: return false
return if (fixed != manga) {
dataRepository.storeManga(fixed)
dataRepository.storeManga(fixed, replaceExisting = true)
fixed.coverUrl != manga.coverUrl
} else {
false

View File

@@ -37,7 +37,7 @@ class OverrideConfigViewModel @Inject constructor(
val override = checkNotNull(data.value).second.copy(
title = title,
)
dataRepository.setOverride(manga.id, override)
dataRepository.setOverride(manga, override)
onSaved.call(Unit)
}
}