11package no.spk.fiskeoye.plugin.service
22
3+ import com.github.benmanes.caffeine.cache.Cache
4+ import com.github.benmanes.caffeine.cache.Caffeine
35import com.intellij.openapi.diagnostic.Logger
46import no.spk.fiskeoye.plugin.service.api.FileContentRequest
57import no.spk.fiskeoye.plugin.service.api.FilenameRequest
@@ -10,11 +12,18 @@ import org.http4k.core.Request
1012import org.http4k.core.Status
1113import org.jsoup.Jsoup
1214import org.jsoup.nodes.Element
15+ import java.time.Duration
1316
1417internal object FiskeoyeService {
1518
1619 private val logger: Logger = Logger .getInstance(FiskeoyeService ::class .java)
1720 private const val ID = " resultat_linje"
21+ private val cache: Cache <String , Pair <String , List <Element >? >> = Caffeine .newBuilder()
22+ .maximumSize(300 )
23+ .expireAfterWrite(Duration .ofMinutes(60 ))
24+ .expireAfterAccess(Duration .ofMinutes(60 ))
25+ .recordStats()
26+ .build()
1827
1928 internal fun getFileContent (
2029 includeText : String ,
@@ -23,7 +32,11 @@ internal object FiskeoyeService {
2332 isCaseSensitive : Boolean
2433 ): Pair <String , List <Element >? > {
2534 val request = FileContentRequest (includeText, isExclude, excludeText, isCaseSensitive)
26- return send(request) { it.hasAttr(" class" ) && ID == it.className() && it.children().isNotEmpty() }
35+ val cacheKey = generateCacheKey(request, " file_content" )
36+
37+ return cache.get(cacheKey) {
38+ send(request) { it.hasAttr(" class" ) && ID == it.className() && it.children().isNotEmpty() }
39+ }
2740 }
2841
2942 internal fun getFilename (
@@ -32,9 +45,15 @@ internal object FiskeoyeService {
3245 isSearchInFullPath : Boolean
3346 ): Pair <String , List <Element >? > {
3447 val request = FilenameRequest (includeText, isCaseSensitive, isSearchInFullPath)
35- return send(request) { it.hasAttr(" href" ) && it.hasParent() && ID == it.parent()!! .className() }
48+ val cacheKey = generateCacheKey(request, " filename" )
49+
50+ return cache.get(cacheKey) {
51+ send(request) { it.hasAttr(" href" ) && it.hasParent() && ID == it.parent()!! .className() }
52+ }
3653 }
3754
55+ private fun generateCacheKey (request : FiskeoyeRequest , type : String ): String = " ${type} _${request.getUrl().hashCode()} "
56+
3857 private fun send (fiskeoyeRequest : FiskeoyeRequest , filterPredicate : (Element ) -> Boolean ): Pair <String , List <Element >? > {
3958 val url = fiskeoyeRequest.getUrl()
4059 logger.info(" Request: $url " )
0 commit comments