From 4c0153a294aafbc04922b953e09fcaaf5c35bc58 Mon Sep 17 00:00:00 2001 From: Eugene Date: Tue, 30 Jun 2026 19:21:49 +0300 Subject: [PATCH] fix web target? --- apps/vbox/client/shared/build.gradle.kts | 2 +- .../shadowsparky/vbox/shared/data/AndroidOfflineStorage.kt | 5 +++-- .../vbox/shared/data/saved/RemoteSavedMovieRepository.kt | 6 ++---- .../vbox/shared/data/saved/SqlSavedMovieRepository.kt | 4 ++-- .../shared/data/saved/SyncClientSavedMovieRepository.kt | 4 +++- .../vbox/shared/data/sync/SqlPendingOperationRepository.kt | 3 ++- .../vbox/shared/data/tag/SqlMovieTagRepository.kt | 3 ++- .../ru/shadowsparky/vbox/shared/domain/AuthTokenCacheExt.kt | 5 ++++- apps/vbox/client/web/webpack.config.d/fallback.js | 4 ++++ libs/http-client/build.gradle.kts | 1 - 10 files changed, 23 insertions(+), 14 deletions(-) create mode 100644 apps/vbox/client/web/webpack.config.d/fallback.js diff --git a/apps/vbox/client/shared/build.gradle.kts b/apps/vbox/client/shared/build.gradle.kts index 13c7b61..365ca0d 100644 --- a/apps/vbox/client/shared/build.gradle.kts +++ b/apps/vbox/client/shared/build.gradle.kts @@ -10,7 +10,7 @@ plugins { sqldelight { databases { - create("AppDatabase") { + register("AppDatabase") { packageName.set("ru.shadowsparky.vbox.app") generateAsync.set(true) } diff --git a/apps/vbox/client/shared/src/androidMain/kotlin/ru/shadowsparky/vbox/shared/data/AndroidOfflineStorage.kt b/apps/vbox/client/shared/src/androidMain/kotlin/ru/shadowsparky/vbox/shared/data/AndroidOfflineStorage.kt index ee68184..5d7a37d 100644 --- a/apps/vbox/client/shared/src/androidMain/kotlin/ru/shadowsparky/vbox/shared/data/AndroidOfflineStorage.kt +++ b/apps/vbox/client/shared/src/androidMain/kotlin/ru/shadowsparky/vbox/shared/data/AndroidOfflineStorage.kt @@ -2,6 +2,7 @@ package ru.shadowsparky.vbox.shared.data import app.cash.sqldelight.Query +import app.cash.sqldelight.async.coroutines.awaitAsOneOrNull import app.cash.sqldelight.coroutines.asFlow import app.cash.sqldelight.coroutines.mapToList import app.cash.sqldelight.coroutines.mapToOneOrNull @@ -70,7 +71,7 @@ class AndroidOfflineStorage( withContext(Dispatchers.IO) { getQueries() .selectById(id) - .executeAsOneOrNull() + .awaitAsOneOrNull() } override fun queryByArgs(movieId: Long, seasonId: Long?): Flow> = flow { @@ -86,7 +87,7 @@ class AndroidOfflineStorage( override suspend fun find(movieId: Long, seasonId: Long?, episodeId: Long?): OfflineVideo? { return withContext(Dispatchers.IO) { getQueries().selectByFullArgs(movieId, seasonId, episodeId) - .executeAsOneOrNull() + .awaitAsOneOrNull() ?.toDomain() } } diff --git a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/saved/RemoteSavedMovieRepository.kt b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/saved/RemoteSavedMovieRepository.kt index bb86281..dea4807 100644 --- a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/saved/RemoteSavedMovieRepository.kt +++ b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/saved/RemoteSavedMovieRepository.kt @@ -28,8 +28,7 @@ class RemoteSavedMovieRepository( ) : SavedMovieRepository { override fun getAll(): Flow> { - return eventListener.event - .filter { it is RemoteEvent.OnSaved } + return eventListener.event.filter { it is RemoteEvent.OnSaved } .map { getAllSingle() } .onStart { emit(getAllSingle()) } } @@ -52,8 +51,7 @@ class RemoteSavedMovieRepository( } override fun isSaved(id: Long): Flow { - return eventListener.event - .filter { it is RemoteEvent.OnSaved && it.movieId == id } + return eventListener.event.filter { it is RemoteEvent.OnSaved && it.movieId == id } .map { isSavedSingle(id) } .onStart { emit(isSavedSingle(id)) } } diff --git a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/saved/SqlSavedMovieRepository.kt b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/saved/SqlSavedMovieRepository.kt index 6818656..b1ece4e 100644 --- a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/saved/SqlSavedMovieRepository.kt +++ b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/saved/SqlSavedMovieRepository.kt @@ -37,9 +37,9 @@ class SqlSavedMovieRepository( }.flowOn(dispatcherProvider.io) } - private suspend fun obtain(): List = withContext(dispatcherProvider.io) { + private suspend fun obtain(): List { val request = getRequest() - request.awaitAsList().map { + return request.awaitAsList().map { VideoDetails( it.saved_movie_id, it.poster_url, diff --git a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/saved/SyncClientSavedMovieRepository.kt b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/saved/SyncClientSavedMovieRepository.kt index 8f9b1a5..0f59caa 100644 --- a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/saved/SyncClientSavedMovieRepository.kt +++ b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/saved/SyncClientSavedMovieRepository.kt @@ -8,6 +8,7 @@ import kotlinx.serialization.json.encodeToJsonElement import kotlinx.serialization.json.put import org.koin.core.annotation.Factory import org.koin.core.annotation.Named +import ru.shadowsparky.domain.DispatcherProvider import ru.shadowsparky.http.domain.TokenStorage import ru.shadowsparky.http.domain.hasAccount import ru.shadowsparky.vbox.shared.data.RemoteSourceSynchronizer @@ -29,7 +30,8 @@ class SyncClientSavedMovieRepository( private val syncRepository: SyncRepository, private val authTokenCache: TokenStorage, private val json: Json, - private val pendingOperationSynchronizer: PendingOperationSynchronizer + private val pendingOperationSynchronizer: PendingOperationSynchronizer, + private val dispatcherProvider: DispatcherProvider ) : SavedMovieRepository { override suspend fun save(details: VideoDetails) { diff --git a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/sync/SqlPendingOperationRepository.kt b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/sync/SqlPendingOperationRepository.kt index e4e3ceb..669db08 100644 --- a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/sync/SqlPendingOperationRepository.kt +++ b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/sync/SqlPendingOperationRepository.kt @@ -1,5 +1,6 @@ package ru.shadowsparky.vbox.shared.data.sync +import app.cash.sqldelight.async.coroutines.awaitAsList import kotlinx.coroutines.withContext import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonNull @@ -28,7 +29,7 @@ class SqlPendingOperationRepository( } override suspend fun query(type: AggregateType): List = withContext(dispatcherProvider.io) { - val records = getQueries().getOperationsByAggregate(type.name).executeAsList() + val records = getQueries().getOperationsByAggregate(type.name).awaitAsList() records.map { record -> OperationInfo( id = record.id, diff --git a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/tag/SqlMovieTagRepository.kt b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/tag/SqlMovieTagRepository.kt index 2596df3..e3fdbea 100644 --- a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/tag/SqlMovieTagRepository.kt +++ b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/data/tag/SqlMovieTagRepository.kt @@ -1,5 +1,6 @@ package ru.shadowsparky.vbox.shared.data.tag +import app.cash.sqldelight.async.coroutines.awaitAsOneOrNull import app.cash.sqldelight.coroutines.asFlow import app.cash.sqldelight.coroutines.mapToList import kotlinx.coroutines.flow.Flow @@ -71,7 +72,7 @@ class SqlMovieTagRepository( } private suspend fun queryId(tag: String): Long? = withContext(dispatcherProvider.io) { - getTagsQueries().find(tag).executeAsOneOrNull()?.id + getTagsQueries().find(tag).awaitAsOneOrNull()?.id } private suspend fun getQueries(): MovieTagQueries { diff --git a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/domain/AuthTokenCacheExt.kt b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/domain/AuthTokenCacheExt.kt index b3b7b0a..50c741a 100644 --- a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/domain/AuthTokenCacheExt.kt +++ b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/domain/AuthTokenCacheExt.kt @@ -4,8 +4,11 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.emitAll import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOn +import ru.shadowsparky.domain.DispatcherProvider import ru.shadowsparky.http.domain.TokenStorage import ru.shadowsparky.http.domain.hasAccount +import ru.shadowsparky.koin suspend fun TokenStorage.use( active: suspend () -> Unit, @@ -30,7 +33,7 @@ fun TokenStorage.queryFlow( } else { fallback }) - } + }.flowOn(koin.get().io) } suspend fun TokenStorage.query( diff --git a/apps/vbox/client/web/webpack.config.d/fallback.js b/apps/vbox/client/web/webpack.config.d/fallback.js new file mode 100644 index 0000000..13b1d68 --- /dev/null +++ b/apps/vbox/client/web/webpack.config.d/fallback.js @@ -0,0 +1,4 @@ +config.resolve.fallback = { + ...config.resolve.fallback, + "net": false +}; diff --git a/libs/http-client/build.gradle.kts b/libs/http-client/build.gradle.kts index f4c134a..2093324 100644 --- a/libs/http-client/build.gradle.kts +++ b/libs/http-client/build.gradle.kts @@ -11,7 +11,6 @@ kotlin { val commonMain by getting { dependencies { implementation(project(":libs:base")) - implementation(libs.ktor.client.cio) implementation(libs.kotlinx.rpc.krpc.client) // Server API implementation(libs.kotlinx.rpc.krpc.server)