This commit is contained in:
Trey t
2025-11-07 22:02:52 -06:00
parent 992979f113
commit e271403d9b
12 changed files with 141 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
package com.mycrib.storage
internal actual fun getPlatformTaskCacheManager(): TaskCacheManager? {
// Android requires context, so must use initialize() method
return null
}

View File

@@ -0,0 +1,6 @@
package com.mycrib.storage
internal actual fun getPlatformTokenManager(): TokenManager? {
// Android requires context, so must use initialize() method
return null
}

View File

@@ -21,7 +21,14 @@ object TaskCacheStorage {
cacheManager = manager cacheManager = manager
} }
private fun ensureInitialized() {
if (cacheManager == null) {
cacheManager = getPlatformTaskCacheManager()
}
}
fun saveTasks(tasks: List<CustomTask>) { fun saveTasks(tasks: List<CustomTask>) {
ensureInitialized()
try { try {
val tasksJson = json.encodeToString(tasks) val tasksJson = json.encodeToString(tasks)
cacheManager?.saveTasks(tasksJson) cacheManager?.saveTasks(tasksJson)
@@ -31,6 +38,7 @@ object TaskCacheStorage {
} }
fun getTasks(): List<CustomTask>? { fun getTasks(): List<CustomTask>? {
ensureInitialized()
return try { return try {
val tasksJson = cacheManager?.getTasks() val tasksJson = cacheManager?.getTasks()
if (tasksJson != null) { if (tasksJson != null) {
@@ -45,6 +53,14 @@ object TaskCacheStorage {
} }
fun clearTasks() { fun clearTasks() {
ensureInitialized()
cacheManager?.clearTasks() cacheManager?.clearTasks()
} }
} }
/**
* Platform-specific function to get the default TaskCacheManager instance.
* For platforms that don't require context (web, iOS, JVM), returns singleton.
* For Android, must be initialized via initialize() method before use.
*/
internal expect fun getPlatformTaskCacheManager(): TaskCacheManager?

View File

@@ -18,12 +18,21 @@ object TokenStorage {
cachedToken = manager.getToken() cachedToken = manager.getToken()
} }
private fun ensureInitialized() {
if (tokenManager == null) {
tokenManager = getPlatformTokenManager()
cachedToken = tokenManager?.getToken()
}
}
fun saveToken(token: String) { fun saveToken(token: String) {
ensureInitialized()
cachedToken = token cachedToken = token
tokenManager?.saveToken(token) tokenManager?.saveToken(token)
} }
fun getToken(): String? { fun getToken(): String? {
ensureInitialized()
// Return cached token if available, otherwise try to load from storage // Return cached token if available, otherwise try to load from storage
if (cachedToken == null) { if (cachedToken == null) {
cachedToken = tokenManager?.getToken() cachedToken = tokenManager?.getToken()
@@ -32,9 +41,17 @@ object TokenStorage {
} }
fun clearToken() { fun clearToken() {
ensureInitialized()
cachedToken = null cachedToken = null
tokenManager?.clearToken() tokenManager?.clearToken()
} }
fun hasToken(): Boolean = getToken() != null fun hasToken(): Boolean = getToken() != null
} }
/**
* Platform-specific function to get the default TokenManager instance.
* For platforms that don't require context (web, iOS, JVM), returns singleton.
* For Android, must be initialized via initialize() method before use.
*/
internal expect fun getPlatformTokenManager(): TokenManager?

View File

@@ -0,0 +1,5 @@
package com.mycrib.storage
internal actual fun getPlatformTaskCacheManager(): TaskCacheManager? {
return TaskCacheManager.getInstance()
}

View File

@@ -0,0 +1,5 @@
package com.mycrib.storage
internal actual fun getPlatformTokenManager(): TokenManager? {
return TokenManager.getInstance()
}

View File

@@ -0,0 +1,5 @@
package com.mycrib.storage
internal actual fun getPlatformTaskCacheManager(): TaskCacheManager? {
return TaskCacheManager.getInstance()
}

View File

@@ -0,0 +1,5 @@
package com.mycrib.storage
internal actual fun getPlatformTokenManager(): TokenManager? {
return TokenManager.getInstance()
}

View File

@@ -0,0 +1,33 @@
package com.mycrib.storage
import kotlinx.browser.localStorage
/**
* WASM implementation of TaskCacheManager using browser's localStorage.
*/
actual class TaskCacheManager {
actual fun saveTasks(tasksJson: String) {
localStorage.setItem(KEY_TASKS, tasksJson)
}
actual fun getTasks(): String? {
return localStorage.getItem(KEY_TASKS)
}
actual fun clearTasks() {
localStorage.removeItem(KEY_TASKS)
}
companion object {
private const val KEY_TASKS = "cached_tasks"
private var instance: TaskCacheManager? = null
fun getInstance(): TaskCacheManager {
if (instance == null) {
instance = TaskCacheManager()
}
return instance!!
}
}
}

View File

@@ -0,0 +1,5 @@
package com.mycrib.storage
internal actual fun getPlatformTaskCacheManager(): TaskCacheManager? {
return TaskCacheManager.getInstance()
}

View File

@@ -0,0 +1,33 @@
package com.mycrib.storage
import kotlinx.browser.localStorage
/**
* WASM implementation of TokenManager using browser's localStorage.
*/
actual class TokenManager {
actual fun saveToken(token: String) {
localStorage.setItem(KEY_TOKEN, token)
}
actual fun getToken(): String? {
return localStorage.getItem(KEY_TOKEN)
}
actual fun clearToken() {
localStorage.removeItem(KEY_TOKEN)
}
companion object {
private const val KEY_TOKEN = "auth_token"
private var instance: TokenManager? = null
fun getInstance(): TokenManager {
if (instance == null) {
instance = TokenManager()
}
return instance!!
}
}
}

View File

@@ -0,0 +1,5 @@
package com.mycrib.storage
internal actual fun getPlatformTokenManager(): TokenManager? {
return TokenManager.getInstance()
}