From b6a86a6538378d83960ad2157f913e2bbfa7bf20 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sat, 23 Apr 2022 10:39:33 +0300 Subject: [PATCH] Cache and reuse RemoteMangaRepository instances --- .../kotatsu/core/parser/MangaRepository.kt | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/MangaRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/MangaRepository.kt index 87c5a3d6b..ca4cc495b 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/MangaRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/MangaRepository.kt @@ -1,5 +1,7 @@ package org.koitharu.kotatsu.core.parser +import java.lang.ref.WeakReference +import java.util.* import org.koin.core.component.KoinComponent import org.koin.core.component.get import org.koitharu.kotatsu.local.domain.LocalMangaRepository @@ -28,11 +30,18 @@ interface MangaRepository { companion object : KoinComponent { + private val cache = EnumMap>(MangaSource::class.java) + operator fun invoke(source: MangaSource): MangaRepository { - return if (source == MangaSource.LOCAL) { - get() - } else { - RemoteMangaRepository(MangaParser(source, get())) + if (source == MangaSource.LOCAL) { + return get() + } + cache[source]?.get()?.let { return it } + return synchronized(cache) { + cache[source]?.get()?.let { return it } + val repository = RemoteMangaRepository(MangaParser(source, get())) + cache[source] = WeakReference(repository) + repository } } }