All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.io.ktor.client.plugins.cache.storage.UnlimitedCacheStorage.kt Maven / Gradle / Ivy

Go to download

Ktor is a framework for quickly creating web applications in Kotlin with minimal effort.

There is a newer version: 2.2.4
Show newest version
/*
* Copyright 2014-2021 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
*/

package io.ktor.client.plugins.cache.storage

import io.ktor.client.plugins.cache.*
import io.ktor.http.*
import io.ktor.util.collections.*

@Suppress("DEPRECATION")
internal class UnlimitedCacheStorage : HttpCacheStorage() {
    private val store = ConcurrentMap>()

    override fun store(url: Url, value: HttpCacheEntry) {
        val data = store.computeIfAbsent(url) { ConcurrentSet() }
        if (!data.add(value)) {
            data.remove(value)
            data.add(value)
        }
    }

    override fun find(url: Url, varyKeys: Map): HttpCacheEntry? {
        val data = store.computeIfAbsent(url) { ConcurrentSet() }
        return data.find { it.varyKeys == varyKeys }
    }

    override fun findByUrl(url: Url): Set = store[url] ?: emptySet()
}

internal class UnlimitedStorage : CacheStorage {

    private val store = ConcurrentMap>()

    override suspend fun store(url: Url, data: CachedResponseData) {
        val cache = store.computeIfAbsent(url) { ConcurrentSet() }
        if (!cache.add(data)) {
            cache.remove(data)
            cache.add(data)
        }
    }

    override suspend fun find(url: Url, varyKeys: Map): CachedResponseData? {
        val data = store.computeIfAbsent(url) { ConcurrentSet() }
        return data.find { it.varyKeys == varyKeys }
    }

    override suspend fun findAll(url: Url): Set = store[url] ?: emptySet()
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy