conventionschedule-android/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/OfflineCacheManager.kt

38 lines
1.6 KiB
Kotlin

package com.adlerosn.brasilfurfest.schedule.managers
import android.content.Context
import android.content.res.Resources
import com.adlerosn.brasilfurfest.helper.joinFile
import com.adlerosn.brasilfurfest.helper.lastPathPart
import com.adlerosn.brasilfurfest.helper.nullFun
import java.io.File
import java.io.InputStream
import java.lang.Exception
class OfflineCacheManager(context: Context): CacheManager() {
private val assets = context.assets
private val cacheDir = context.cacheDir
override val goesOnline = false
override val preloaded = false
override fun getStamp(file: String): String? = get(file)?.second
override fun get(file: String): Pair<InputStream, String>? = try {
Pair(assets.open("out/$file"), UNIX_TIMESTAMP_START)
} catch (e: Exception) { null }
override fun set(file: String, requestResult: Pair<ByteArray, String>) = nullFun()
override fun delete(file: String) = false
override fun sanitize() = 0
override fun startMonitoringNeededFiles() = nullFun()
override fun removeNotNeededFiles() = 0
override val files get() = (assets.list("out") ?: arrayOf()).toSet()
override fun getFileFor(asset: String): File {
val cachedFile = cacheDir.joinFile(asset.lastPathPart())
if(!cachedFile.exists()){
val assetDescriptor = get(asset.lastPathPart())
if (assetDescriptor == null)
throw Resources.NotFoundException("Unavailable asset: $asset")
else
cachedFile.writeBytes(assetDescriptor.first.readBytes())
}
return cachedFile
}
}