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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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