Change return value of SyncChaptersWithSource.await() (#7715)

* Change return value of `SyncChaptersWithSource.await()`

`updatedToAdd.subtract(reAdded).toList()` never worked as at this point `updatedToAdd` contained ids from db where `reAdded` had default one. Was the same case before the rewrite.

Removed `toDelete` from return value as it was not being used anywhere

* Add doc string

* Use HashSet

Co-authored-by: stevenyomi <95685115+stevenyomi@users.noreply.github.com>

Co-authored-by: stevenyomi <95685115+stevenyomi@users.noreply.github.com>
This commit is contained in:
AntsyLich 2022-08-11 19:06:46 +06:00 committed by GitHub
parent 1cbe225a94
commit 11f640cfee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 8 deletions

View File

@ -28,11 +28,19 @@ class SyncChaptersWithSource(
private val getChapterByMangaId: GetChapterByMangaId = Injekt.get(), private val getChapterByMangaId: GetChapterByMangaId = Injekt.get(),
) { ) {
/**
* Method to synchronize db chapters with source ones
*
* @param rawSourceChapters the chapters from the source.
* @param manga the manga the chapters belong to.
* @param source the source the manga belongs to.
* @return Newly added chapters
*/
suspend fun await( suspend fun await(
rawSourceChapters: List<SChapter>, rawSourceChapters: List<SChapter>,
manga: Manga, manga: Manga,
source: Source, source: Source,
): Pair<List<Chapter>, List<Chapter>> { ): List<Chapter> {
if (rawSourceChapters.isEmpty() && source.id != LocalSource.ID) { if (rawSourceChapters.isEmpty() && source.id != LocalSource.ID) {
throw NoChaptersException() throw NoChaptersException()
} }
@ -114,7 +122,7 @@ class SyncChaptersWithSource(
// Return if there's nothing to add, delete or change, avoiding unnecessary db transactions. // Return if there's nothing to add, delete or change, avoiding unnecessary db transactions.
if (toAdd.isEmpty() && toDelete.isEmpty() && toChange.isEmpty()) { if (toAdd.isEmpty() && toDelete.isEmpty() && toChange.isEmpty()) {
return Pair(emptyList(), emptyList()) return emptyList()
} }
val reAdded = mutableListOf<Chapter>() val reAdded = mutableListOf<Chapter>()
@ -174,7 +182,8 @@ class SyncChaptersWithSource(
// Note that last_update actually represents last time the chapter list changed at all // Note that last_update actually represents last time the chapter list changed at all
updateManga.awaitUpdateLastUpdate(manga.id) updateManga.awaitUpdateLastUpdate(manga.id)
@Suppress("ConvertArgumentToSet") // See tachiyomiorg/tachiyomi#6372. val reAddedUrls = reAdded.map { it.url }.toHashSet()
return Pair(updatedToAdd.subtract(reAdded).toList(), toDelete.subtract(reAdded).toList())
return updatedToAdd.filterNot { it.url in reAddedUrls }
} }
} }

View File

@ -350,7 +350,7 @@ class LibraryUpdateService(
else -> { else -> {
// Convert to the manga that contains new chapters // Convert to the manga that contains new chapters
mangaWithNotif.toDomainManga()?.let { domainManga -> mangaWithNotif.toDomainManga()?.let { domainManga ->
val (newChapters, _) = updateManga(domainManga) val newChapters = updateManga(domainManga)
val newDbChapters = newChapters.map { it.toDbChapter() } val newDbChapters = newChapters.map { it.toDbChapter() }
if (newChapters.isNotEmpty()) { if (newChapters.isNotEmpty()) {
@ -428,7 +428,7 @@ class LibraryUpdateService(
* @param manga the manga to update. * @param manga the manga to update.
* @return a pair of the inserted and removed chapters. * @return a pair of the inserted and removed chapters.
*/ */
private suspend fun updateManga(manga: DomainManga): Pair<List<DomainChapter>, List<DomainChapter>> { private suspend fun updateManga(manga: DomainManga): List<DomainChapter> {
val source = sourceManager.getOrStub(manga.source) val source = sourceManager.getOrStub(manga.source)
val mangaInfo: MangaInfo = manga.toMangaInfo() val mangaInfo: MangaInfo = manga.toMangaInfo()
@ -444,7 +444,7 @@ class LibraryUpdateService(
// Get manga from database to account for if it was removed during the update // Get manga from database to account for if it was removed during the update
val dbManga = getManga.await(manga.id) val dbManga = getManga.await(manga.id)
?: return Pair(emptyList(), emptyList()) ?: return emptyList()
// [dbmanga] was used so that manga data doesn't get overwritten // [dbmanga] was used so that manga data doesn't get overwritten
// in case manga gets new chapter // in case manga gets new chapter

View File

@ -521,7 +521,7 @@ class MangaPresenter(
val chapters = successState.source.getChapterList(successState.manga.toMangaInfo()) val chapters = successState.source.getChapterList(successState.manga.toMangaInfo())
.map { it.toSChapter() } .map { it.toSChapter() }
val (newChapters, _) = syncChaptersWithSource.await( val newChapters = syncChaptersWithSource.await(
chapters, chapters,
successState.manga, successState.manga,
successState.source, successState.source,