From 7d6c300f7e9e37d2184ff8f091ae286b76979691 Mon Sep 17 00:00:00 2001 From: Jannik Date: Sat, 16 Apr 2022 17:52:10 +0200 Subject: [PATCH] implement runtime cache for Crunchyroll.browse() --- .../teapod/parser/crunchyroll/Crunchyroll.kt | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt b/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt index 73ef269..e80a9ad 100644 --- a/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt +++ b/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt @@ -67,7 +67,7 @@ object Crunchyroll { private var signature = "" private var keyPairID = "" - private val browsingCache = arrayListOf() + private val browsingCache = hashMapOf() /** * Load the pai token, see: @@ -286,18 +286,29 @@ object Crunchyroll { parameters.add("categories" to categories.joinToString(",") { it.str }) } - val browseResult: BrowseResult = try { - requestGet(browseEndpoint, parameters) - }catch (ex: SerializationException) { - Log.e(TAG, "SerializationException in browse().", ex) - NoneBrowseResult + // fetch result if not already cached + if (browsingCache.contains(parameters.toString())) { + Log.d(TAG, "browse result cached: $parameters") + } else { + Log.d(TAG, "browse result not cached, fetching: $parameters") + val browseResult: BrowseResult = try { + requestGet(browseEndpoint, parameters) + }catch (ex: SerializationException) { + Log.e(TAG, "SerializationException in browse().", ex) + NoneBrowseResult + } + + // if the cache has more than 100 entries clear it, so it doesn't become a memory problem + // Note: this value is totally guessed and should be replaced by a properly researched value + if (browsingCache.size > 100) { + browsingCache.clear() + } + + // add results to cache + browsingCache[parameters.toString()] = browseResult } - // add results to cache TODO improve - browsingCache.clear() - browsingCache.addAll(browseResult.items) - - return browseResult + return browsingCache[parameters.toString()] ?: NoneBrowseResult } /**