mirror of
https://github.com/mollyim/monero-wallet-sdk.git
synced 2025-02-05 01:15:37 -05:00
demo: add user settings repository
This commit is contained in:
parent
08de472199
commit
c468972738
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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()
|
||||
}
|
@ -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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user