38 lines
1.6 KiB
Kotlin
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
|
|
}
|
|
} |