Pith - jamb
jamb/app/src/main/java/com/vgmlr/jamb/JambPrefs.kt [2.1 kb]
Modified: 20:33:38 112 026 (09 Jul 026)
16 Days Ago
package com.vgmlr.jamb

import android.content.Context
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map

private val Context.dataStore by preferencesDataStore("jamb_prefs")

class JambPrefs(private val context: Context) {

    companion object {
        const val ALL = "__ALL__"
        const val NONE = "__NONE__"
        const val MODE_SORTED = "SORTED"
        const val MODE_SHUFFLE = "SHUFFLE"
        const val AWAKE_NONE = "NONE"
        const val AWAKE_CHARGING = "CHARGING"
        const val AWAKE_ALWAYS = "ALWAYS"
        private val FOLDER = stringPreferencesKey("folder")
        private val MODE = stringPreferencesKey("mode")
        private val REPEAT = booleanPreferencesKey("repeat")
        private val PLAYLIST = stringPreferencesKey("playlist")
        private val KEEP_AWAKE = stringPreferencesKey("keep_awake")
    }

    suspend fun read(): Triple<String, String, Boolean> {
        val p = context.dataStore.data.first()
        return Triple(p[FOLDER] ?: ALL, p[MODE] ?: MODE_SORTED, p[REPEAT] ?: false)
    }

    suspend fun getPlaylist(): String? = context.dataStore.data.first()[PLAYLIST]

    val keepAwake: Flow<String>
        get() = context.dataStore.data.map { it[KEEP_AWAKE] ?: AWAKE_NONE }

    suspend fun getKeepAwake(): String =
        context.dataStore.data.first()[KEEP_AWAKE] ?: AWAKE_NONE

    suspend fun setKeepAwake(v: String) = context.dataStore.edit { it[KEEP_AWAKE] = v }

    suspend fun setFolder(v: String) = context.dataStore.edit { it[FOLDER] = v }
    suspend fun setMode(v: String) = context.dataStore.edit { it[MODE] = v }
    suspend fun setRepeat(v: Boolean) = context.dataStore.edit { it[REPEAT] = v }
    suspend fun setPlaylist(v: String?) = context.dataStore.edit {
        if (v == null) it.remove(PLAYLIST) else it[PLAYLIST] = v
    }
}
Updates
Wedge - Android 126.026
Wedge - Linux 124.026
Shim - Android 117.026
Miter - 114.026
Kerf - Android 112.026
Dev
TVShow (227) 'CSA'
TVShow (228) 'APT'
TVProgram (83) 'BXT'
Miter Update(s)
Peen (Messaging)

Menu
Calendar
Project Tin (024/029)
Miter
RSS Feed
User Avatar
@vgmlr
=SUM(parts)