Skip to content

Commit

Permalink
Further DI improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
ashdavies committed Sep 9, 2024
1 parent 2655b88 commit 1152a58
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,24 @@ import com.slack.circuit.foundation.Circuit
import com.slack.circuit.runtime.presenter.presenterOf
import io.ashdavies.content.PlatformContext
import io.ashdavies.content.reportFullyDrawn
import io.ashdavies.http.DefaultHttpConfiguration
import io.ashdavies.identity.IdentityManager
import io.ashdavies.party.coroutines.rememberRetainedCoroutineScope
import io.ashdavies.party.events.EventsPresenter
import io.ashdavies.party.events.EventsScreen
import io.ashdavies.party.events.paging.rememberEventPager
import io.ashdavies.party.gallery.GalleryPresenter
import io.ashdavies.party.gallery.GalleryScreen
import io.ashdavies.party.gallery.ImageManager
import io.ashdavies.party.gallery.PathProvider
import io.ashdavies.party.gallery.StorageManager
import io.ashdavies.party.gallery.SyncManager
import io.ashdavies.party.gallery.inMemoryHttpClientEngine
import io.ashdavies.party.home.HomePresenter
import io.ashdavies.party.home.HomeScreen
import io.ashdavies.playground.PlaygroundDatabase
import io.ashdavies.sql.LocalTransacter
import io.ktor.client.HttpClient
import kotlinx.coroutines.CoroutineScope
import io.ashdavies.party.events.Event as DatabaseEvent

Expand All @@ -31,6 +36,8 @@ public fun rememberCircuit(
coroutineScope: CoroutineScope = rememberRetainedCoroutineScope(),
): Circuit = remember(platformContext) {
val identityManager = IdentityManager(platformContext, playgroundDatabase.credentialQueries)
val imageManager = ImageManager(platformContext, playgroundDatabase.imageQueries)
val syncManager = SyncManager(HttpClient(inMemoryHttpClientEngine(), DefaultHttpConfiguration))
val storageManager = StorageManager(PathProvider(platformContext))

Circuit.Builder()
Expand All @@ -41,7 +48,7 @@ public fun rememberCircuit(
presenterOf { EventsPresenter(eventPager, coroutineScope) }
}
.addPresenter<GalleryScreen, GalleryScreen.State> { _, _, _ ->
presenterOf { GalleryPresenter(platformContext) }
presenterOf { GalleryPresenter(imageManager, syncManager) }
}
.addUi<HomeScreen, HomeScreen.State> { state, modifier ->
HomeScreen(state, modifier, platformContext::reportFullyDrawn)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import androidx.paging.ExperimentalPagingApi
import androidx.paging.InvalidatingPagingSourceFactory
import androidx.paging.Pager
import androidx.paging.PagingConfig
import app.cash.sqldelight.Transacter
import io.ashdavies.aggregator.AsgConference
import io.ashdavies.aggregator.UpcomingConferencesCallable
import io.ashdavies.config.RemoteConfig
Expand All @@ -15,7 +16,8 @@ import io.ashdavies.http.common.models.EventCfp
import io.ashdavies.party.events.EventsQueries
import io.ashdavies.party.events.callable.PagedUpcomingEventsCallable
import io.ashdavies.party.network.todayAsString
import io.ashdavies.party.sql.rememberLocalQueries
import io.ashdavies.playground.PlaygroundDatabase
import io.ashdavies.sql.LocalTransacter
import io.ktor.client.HttpClient
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
Expand Down Expand Up @@ -70,6 +72,12 @@ private fun rememberUpcomingEventsCallable(
}
}

@Composable
internal fun <T : Transacter> rememberLocalQueries(
database: PlaygroundDatabase = LocalTransacter.current as PlaygroundDatabase,
transform: (PlaygroundDatabase) -> T,
): T = remember { transform(database) }

private fun AsgConference.toEvent(): ApiEvent = ApiEvent(
id = hash(), name = name, website = website, location = location, dateStart = dateStart,
dateEnd = dateEnd, imageUrl = imageUrl, status = status, online = online,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,16 @@ package io.ashdavies.party.gallery
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import com.slack.circuit.retained.produceRetainedState
import com.slack.circuit.retained.rememberRetained
import io.ashdavies.content.PlatformContext
import io.ashdavies.party.sql.rememberLocalQueries
import kotlinx.coroutines.launch

@Composable
internal fun GalleryPresenter(
platformContext: PlatformContext,
imageQueries: ImageQueries = rememberLocalQueries { it.imageQueries },
): GalleryScreen.State = GalleryPresenter(
imageManager = remember(imageQueries) {
ImageManager(platformContext, imageQueries)
},
)

@Composable
internal fun GalleryPresenter(
imageManager: ImageManager,
syncManager: SyncManager = remember { SyncManager() },
syncManager: SyncManager,
): GalleryScreen.State {
val itemList by produceRetainedState(emptyList<Image>()) {
imageManager.list.collect { value = it }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package io.ashdavies.party.gallery

import io.ashdavies.http.DefaultHttpConfiguration
import io.ktor.client.HttpClient
import io.ktor.client.call.body
import io.ktor.client.request.get
Expand All @@ -27,10 +26,7 @@ internal enum class SyncState {
SYNCED,
}

internal fun SyncManager(
client: HttpClient = HttpClient(inMemoryHttpClientEngine(), DefaultHttpConfiguration),
reader: File.() -> ByteReadChannel = File::readChannel,
): SyncManager = object : SyncManager {
internal fun SyncManager(client: HttpClient): SyncManager = object : SyncManager {

private val _state = MutableStateFlow<Map<String, SyncState>>(emptyMap())
private val initialised = AtomicBoolean(false)
Expand All @@ -52,7 +48,7 @@ internal fun SyncManager(
when (initialState) {
SyncState.NOT_SYNCED -> client.post(getName()) {
header(HttpHeaders.ContentLength, length())
setBody(reader())
setBody(readChannel())
}

else -> client.put(getName())
Expand Down

This file was deleted.

0 comments on commit 1152a58

Please sign in to comment.