-
-
Notifications
You must be signed in to change notification settings - Fork 11
/
Container.kt
45 lines (38 loc) · 1.46 KB
/
Container.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package app.softwork.composetodo
import android.content.*
import app.cash.sqldelight.driver.android.*
import app.softwork.composetodo.repository.*
import app.softwork.composetodo.repository.TodoRepository.Companion.createDatabase
import app.softwork.composetodo.viewmodels.*
import io.ktor.client.*
import io.ktor.client.engine.android.*
import io.ktor.client.plugins.*
import io.ktor.client.plugins.contentnegotiation.*
import io.ktor.client.plugins.resources.*
import io.ktor.http.*
import io.ktor.serialization.kotlinx.json.*
import kotlinx.coroutines.flow.*
class Container(applicationContext: Context) : AppContainer {
private val db = createDatabase(AndroidSqliteDriver(ComposeTodoDB.Schema, applicationContext, "composetodo.db"))
override val client = HttpClient(Android) {
defaultRequest {
url {
protocol = URLProtocol.HTTPS
host = "api.todo.softwork.app"
}
}
install(Resources)
install(ContentNegotiation) {
json()
}
}
override val api: MutableStateFlow<API> = MutableStateFlow(API.LoggedOut(client))
override fun loginViewModel(api: API.LoggedOut) = LoginViewModel(api = api) {
this.api.value = it
}
override fun registerViewModel(api: API.LoggedOut) = RegisterViewModel(api) {
this.api.value = it
}
override fun todoViewModel(api: API.LoggedIn) =
TodoViewModel(TodoRepository(api = api, dao = db.todoQueries))
}