mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	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:
		@@ -28,11 +28,19 @@ class SyncChaptersWithSource(
 | 
			
		||||
    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(
 | 
			
		||||
        rawSourceChapters: List<SChapter>,
 | 
			
		||||
        manga: Manga,
 | 
			
		||||
        source: Source,
 | 
			
		||||
    ): Pair<List<Chapter>, List<Chapter>> {
 | 
			
		||||
    ): List<Chapter> {
 | 
			
		||||
        if (rawSourceChapters.isEmpty() && source.id != LocalSource.ID) {
 | 
			
		||||
            throw NoChaptersException()
 | 
			
		||||
        }
 | 
			
		||||
@@ -114,7 +122,7 @@ class SyncChaptersWithSource(
 | 
			
		||||
 | 
			
		||||
        // Return if there's nothing to add, delete or change, avoiding unnecessary db transactions.
 | 
			
		||||
        if (toAdd.isEmpty() && toDelete.isEmpty() && toChange.isEmpty()) {
 | 
			
		||||
            return Pair(emptyList(), emptyList())
 | 
			
		||||
            return emptyList()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val reAdded = mutableListOf<Chapter>()
 | 
			
		||||
@@ -174,7 +182,8 @@ class SyncChaptersWithSource(
 | 
			
		||||
        // Note that last_update actually represents last time the chapter list changed at all
 | 
			
		||||
        updateManga.awaitUpdateLastUpdate(manga.id)
 | 
			
		||||
 | 
			
		||||
        @Suppress("ConvertArgumentToSet") // See tachiyomiorg/tachiyomi#6372.
 | 
			
		||||
        return Pair(updatedToAdd.subtract(reAdded).toList(), toDelete.subtract(reAdded).toList())
 | 
			
		||||
        val reAddedUrls = reAdded.map { it.url }.toHashSet()
 | 
			
		||||
 | 
			
		||||
        return updatedToAdd.filterNot { it.url in reAddedUrls }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -350,7 +350,7 @@ class LibraryUpdateService(
 | 
			
		||||
                                            else -> {
 | 
			
		||||
                                                // Convert to the manga that contains new chapters
 | 
			
		||||
                                                mangaWithNotif.toDomainManga()?.let { domainManga ->
 | 
			
		||||
                                                    val (newChapters, _) = updateManga(domainManga)
 | 
			
		||||
                                                    val newChapters = updateManga(domainManga)
 | 
			
		||||
                                                    val newDbChapters = newChapters.map { it.toDbChapter() }
 | 
			
		||||
 | 
			
		||||
                                                    if (newChapters.isNotEmpty()) {
 | 
			
		||||
@@ -428,7 +428,7 @@ class LibraryUpdateService(
 | 
			
		||||
     * @param manga the manga to update.
 | 
			
		||||
     * @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 mangaInfo: MangaInfo = manga.toMangaInfo()
 | 
			
		||||
@@ -444,7 +444,7 @@ class LibraryUpdateService(
 | 
			
		||||
 | 
			
		||||
        // Get manga from database to account for if it was removed during the update
 | 
			
		||||
        val dbManga = getManga.await(manga.id)
 | 
			
		||||
            ?: return Pair(emptyList(), emptyList())
 | 
			
		||||
            ?: return emptyList()
 | 
			
		||||
 | 
			
		||||
        // [dbmanga] was used so that manga data doesn't get overwritten
 | 
			
		||||
        // in case manga gets new chapter
 | 
			
		||||
 
 | 
			
		||||
@@ -521,7 +521,7 @@ class MangaPresenter(
 | 
			
		||||
                    val chapters = successState.source.getChapterList(successState.manga.toMangaInfo())
 | 
			
		||||
                        .map { it.toSChapter() }
 | 
			
		||||
 | 
			
		||||
                    val (newChapters, _) = syncChaptersWithSource.await(
 | 
			
		||||
                    val newChapters = syncChaptersWithSource.await(
 | 
			
		||||
                        chapters,
 | 
			
		||||
                        successState.manga,
 | 
			
		||||
                        successState.source,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user