package com.ustadmobile.libcache import android.content.Context import com.ustadmobile.door.DatabaseBuilder import com.ustadmobile.libcache.db.AddNewEntryTriggerCallback import com.ustadmobile.libcache.db.MIGRATE_8_9 import com.ustadmobile.libcache.db.UstadCacheDb import com.ustadmobile.libcache.db.addCacheDbMigrations import com.ustadmobile.libcache.logging.UstadCacheLogger import com.ustadmobile.xxhashkmp.XXStringHasher import com.ustadmobile.xxhashkmp.commonjvmimpl.XXStringHasherCommonJvm import kotlinx.io.files.Path import kotlinx.io.files.SystemFileSystem @Suppress("MemberVisibilityCanBePrivate") class UstadCacheBuilder( var appContext: Context, var storagePath: Path, var dbName: String = DEFAULT_DB_NAME, var db: UstadCacheDb? = null, var logger: UstadCacheLogger? = null, var sizeLimit: () -> Long, var xxStringHasher: XXStringHasher = XXStringHasherCommonJvm(), var cachePathsProvider: CachePathsProvider = CachePathsProvider { CachePaths( tmpWorkPath = Path(storagePath, DEFAULT_SUBPATH_WORK), persistentPath = Path(storagePath, DEFAULT_SUBPATH_PERSISTENT), cachePath = Path(appContext.cacheDir.absolutePath, DEFAULT_SUBPATH_CACHE), ) } ) { fun build(): UstadCache { return UstadCacheImpl( fileSystem = SystemFileSystem, pathsProvider = cachePathsProvider, logger = logger, sizeLimit = sizeLimit, xxStringHasher = xxStringHasher, db = db ?: DatabaseBuilder.databaseBuilder( context = appContext, dbClass = UstadCacheDb::class, dbName = dbName, nodeId = 1L ) .addCacheDbMigrations() .addMigrations(MIGRATE_8_9) .addCallback(AddNewEntryTriggerCallback()) .build() ) } companion object { const val DEFAULT_SUBPATH_WORK = "tmpwork" const val DEFAULT_SUBPATH_PERSISTENT = "persistent" const val DEFAULT_SUBPATH_CACHE = "ustad-cache" const val DEFAULT_DB_NAME = "UstadCache" } }