fix web target?

This commit is contained in:
2026-06-30 19:21:49 +03:00
parent 7f2aefdd72
commit 4c0153a294
10 changed files with 23 additions and 14 deletions
+1 -1
View File
@@ -10,7 +10,7 @@ plugins {
sqldelight { sqldelight {
databases { databases {
create("AppDatabase") { register("AppDatabase") {
packageName.set("ru.shadowsparky.vbox.app") packageName.set("ru.shadowsparky.vbox.app")
generateAsync.set(true) generateAsync.set(true)
} }
@@ -2,6 +2,7 @@
package ru.shadowsparky.vbox.shared.data package ru.shadowsparky.vbox.shared.data
import app.cash.sqldelight.Query import app.cash.sqldelight.Query
import app.cash.sqldelight.async.coroutines.awaitAsOneOrNull
import app.cash.sqldelight.coroutines.asFlow import app.cash.sqldelight.coroutines.asFlow
import app.cash.sqldelight.coroutines.mapToList import app.cash.sqldelight.coroutines.mapToList
import app.cash.sqldelight.coroutines.mapToOneOrNull import app.cash.sqldelight.coroutines.mapToOneOrNull
@@ -70,7 +71,7 @@ class AndroidOfflineStorage(
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
getQueries() getQueries()
.selectById(id) .selectById(id)
.executeAsOneOrNull() .awaitAsOneOrNull()
} }
override fun queryByArgs(movieId: Long, seasonId: Long?): Flow<List<OfflineVideo>> = flow { override fun queryByArgs(movieId: Long, seasonId: Long?): Flow<List<OfflineVideo>> = flow {
@@ -86,7 +87,7 @@ class AndroidOfflineStorage(
override suspend fun find(movieId: Long, seasonId: Long?, episodeId: Long?): OfflineVideo? { override suspend fun find(movieId: Long, seasonId: Long?, episodeId: Long?): OfflineVideo? {
return withContext(Dispatchers.IO) { return withContext(Dispatchers.IO) {
getQueries().selectByFullArgs(movieId, seasonId, episodeId) getQueries().selectByFullArgs(movieId, seasonId, episodeId)
.executeAsOneOrNull() .awaitAsOneOrNull()
?.toDomain() ?.toDomain()
} }
} }
@@ -28,8 +28,7 @@ class RemoteSavedMovieRepository(
) : SavedMovieRepository { ) : SavedMovieRepository {
override fun getAll(): Flow<List<VideoDetails>> { override fun getAll(): Flow<List<VideoDetails>> {
return eventListener.event return eventListener.event.filter { it is RemoteEvent.OnSaved }
.filter { it is RemoteEvent.OnSaved }
.map { getAllSingle() } .map { getAllSingle() }
.onStart { emit(getAllSingle()) } .onStart { emit(getAllSingle()) }
} }
@@ -52,8 +51,7 @@ class RemoteSavedMovieRepository(
} }
override fun isSaved(id: Long): Flow<Boolean> { override fun isSaved(id: Long): Flow<Boolean> {
return eventListener.event return eventListener.event.filter { it is RemoteEvent.OnSaved && it.movieId == id }
.filter { it is RemoteEvent.OnSaved && it.movieId == id }
.map { isSavedSingle(id) } .map { isSavedSingle(id) }
.onStart { emit(isSavedSingle(id)) } .onStart { emit(isSavedSingle(id)) }
} }
@@ -37,9 +37,9 @@ class SqlSavedMovieRepository(
}.flowOn(dispatcherProvider.io) }.flowOn(dispatcherProvider.io)
} }
private suspend fun obtain(): List<VideoDetails> = withContext(dispatcherProvider.io) { private suspend fun obtain(): List<VideoDetails> {
val request = getRequest() val request = getRequest()
request.awaitAsList().map { return request.awaitAsList().map {
VideoDetails( VideoDetails(
it.saved_movie_id, it.saved_movie_id,
it.poster_url, it.poster_url,
@@ -8,6 +8,7 @@ import kotlinx.serialization.json.encodeToJsonElement
import kotlinx.serialization.json.put import kotlinx.serialization.json.put
import org.koin.core.annotation.Factory import org.koin.core.annotation.Factory
import org.koin.core.annotation.Named import org.koin.core.annotation.Named
import ru.shadowsparky.domain.DispatcherProvider
import ru.shadowsparky.http.domain.TokenStorage import ru.shadowsparky.http.domain.TokenStorage
import ru.shadowsparky.http.domain.hasAccount import ru.shadowsparky.http.domain.hasAccount
import ru.shadowsparky.vbox.shared.data.RemoteSourceSynchronizer import ru.shadowsparky.vbox.shared.data.RemoteSourceSynchronizer
@@ -29,7 +30,8 @@ class SyncClientSavedMovieRepository(
private val syncRepository: SyncRepository, private val syncRepository: SyncRepository,
private val authTokenCache: TokenStorage, private val authTokenCache: TokenStorage,
private val json: Json, private val json: Json,
private val pendingOperationSynchronizer: PendingOperationSynchronizer private val pendingOperationSynchronizer: PendingOperationSynchronizer,
private val dispatcherProvider: DispatcherProvider
) : SavedMovieRepository { ) : SavedMovieRepository {
override suspend fun save(details: VideoDetails) { override suspend fun save(details: VideoDetails) {
@@ -1,5 +1,6 @@
package ru.shadowsparky.vbox.shared.data.sync package ru.shadowsparky.vbox.shared.data.sync
import app.cash.sqldelight.async.coroutines.awaitAsList
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonNull import kotlinx.serialization.json.JsonNull
@@ -28,7 +29,7 @@ class SqlPendingOperationRepository(
} }
override suspend fun query(type: AggregateType): List<OperationInfo> = withContext(dispatcherProvider.io) { override suspend fun query(type: AggregateType): List<OperationInfo> = withContext(dispatcherProvider.io) {
val records = getQueries().getOperationsByAggregate(type.name).executeAsList() val records = getQueries().getOperationsByAggregate(type.name).awaitAsList()
records.map { record -> records.map { record ->
OperationInfo( OperationInfo(
id = record.id, id = record.id,
@@ -1,5 +1,6 @@
package ru.shadowsparky.vbox.shared.data.tag 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.asFlow
import app.cash.sqldelight.coroutines.mapToList import app.cash.sqldelight.coroutines.mapToList
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
@@ -71,7 +72,7 @@ class SqlMovieTagRepository(
} }
private suspend fun queryId(tag: String): Long? = withContext(dispatcherProvider.io) { 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 { private suspend fun getQueries(): MovieTagQueries {
@@ -4,8 +4,11 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.emitAll import kotlinx.coroutines.flow.emitAll
import kotlinx.coroutines.flow.flow 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.TokenStorage
import ru.shadowsparky.http.domain.hasAccount import ru.shadowsparky.http.domain.hasAccount
import ru.shadowsparky.koin
suspend fun TokenStorage.use( suspend fun TokenStorage.use(
active: suspend () -> Unit, active: suspend () -> Unit,
@@ -30,7 +33,7 @@ fun <T> TokenStorage.queryFlow(
} else { } else {
fallback fallback
}) })
} }.flowOn(koin.get<DispatcherProvider>().io)
} }
suspend fun <T> TokenStorage.query( suspend fun <T> TokenStorage.query(
@@ -0,0 +1,4 @@
config.resolve.fallback = {
...config.resolve.fallback,
"net": false
};
-1
View File
@@ -11,7 +11,6 @@ kotlin {
val commonMain by getting { val commonMain by getting {
dependencies { dependencies {
implementation(project(":libs:base")) implementation(project(":libs:base"))
implementation(libs.ktor.client.cio)
implementation(libs.kotlinx.rpc.krpc.client) implementation(libs.kotlinx.rpc.krpc.client)
// Server API // Server API
implementation(libs.kotlinx.rpc.krpc.server) implementation(libs.kotlinx.rpc.krpc.server)