demo: add user settings repository

This commit is contained in:
Oscar Mira 2023-04-26 16:38:26 +02:00
parent 08de472199
commit c468972738
3 changed files with 60 additions and 0 deletions

View File

@ -0,0 +1,34 @@
package im.molly.monero.demo.data
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.stringPreferencesKey
import im.molly.monero.demo.data.model.SocksProxy
import im.molly.monero.demo.data.model.UserSettings
import im.molly.monero.demo.data.model.toSocketAddress
import kotlinx.coroutines.flow.map
class SettingsRepository(
private val dataStore: DataStore<Preferences>,
) {
companion object {
val PREF_SOCKS_PROXY = stringPreferencesKey("socks_proxy")
}
fun getUserSettings() = dataStore.data.map { prefs ->
UserSettings(
socksProxy = prefs[PREF_SOCKS_PROXY]?.let { SocksProxy(it.toSocketAddress()) }
)
}
suspend fun setSocksProxy(socksProxy: SocksProxy?) {
dataStore.edit { prefs ->
if (socksProxy != null) {
prefs[PREF_SOCKS_PROXY] = socksProxy.address().toString()
} else {
prefs.remove(PREF_SOCKS_PROXY)
}
}
}
}

View File

@ -0,0 +1,17 @@
package im.molly.monero.demo.data.model
import java.net.InetSocketAddress
import java.net.Proxy
import java.net.SocketAddress
data class SocksProxy(val socketAddress: SocketAddress) : Proxy(Type.SOCKS, socketAddress)
fun String.toSocketAddress(): SocketAddress =
try {
val index = lastIndexOf(':')
val host = substring(0, index)
val port = substring(index + 1).toInt()
InetSocketAddress.createUnresolved(host, port)
} catch (t: IndexOutOfBoundsException) {
throw IllegalArgumentException()
}

View File

@ -0,0 +1,9 @@
package im.molly.monero.demo.data.model
import java.net.Proxy
data class UserSettings(
val socksProxy: SocksProxy?,
) {
val activeProxy: Proxy = socksProxy ?: Proxy.NO_PROXY
}