diff --git a/app/src/main/java/ru/fincode/tsudesk/SplashScreenActivity.kt b/app/src/main/java/ru/fincode/tsudesk/SplashScreenActivity.kt index bc356db..beef5b7 100644 --- a/app/src/main/java/ru/fincode/tsudesk/SplashScreenActivity.kt +++ b/app/src/main/java/ru/fincode/tsudesk/SplashScreenActivity.kt @@ -21,8 +21,8 @@ class SplashScreenActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) lifecycleScope.launchWhenCreated { - val result = withContext(Dispatchers.IO) { fetchConfigUseCase() } - +// val result = withContext(Dispatchers.IO) { fetchConfigUseCase() } + val result = fetchConfigUseCase() when (result) { is DataResult.Data -> { Log.d(LOG_TAG, "SUCCESS: config=${result.data}") diff --git a/app/src/main/java/ru/fincode/tsudesk/App.kt b/app/src/main/java/ru/fincode/tsudesk/TSUDeskApp.kt similarity index 56% rename from app/src/main/java/ru/fincode/tsudesk/App.kt rename to app/src/main/java/ru/fincode/tsudesk/TSUDeskApp.kt index bff88ab..315b238 100644 --- a/app/src/main/java/ru/fincode/tsudesk/App.kt +++ b/app/src/main/java/ru/fincode/tsudesk/TSUDeskApp.kt @@ -1,22 +1,17 @@ package ru.fincode.tsudesk import android.app.Application -import android.util.Log import dagger.hilt.android.HiltAndroidApp import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob -import kotlinx.coroutines.launch -import ru.fincode.tsudesk.core.config.domain.usecase.GetConfigUseCase -import ru.fincode.tsudesk.core.common.model.DataResult -import javax.inject.Inject const val LOG_TAG = "NETWORK_DEBUG" @HiltAndroidApp class TSUDeskApp : Application() { - private val appScope = CoroutineScope(SupervisorJob() + Dispatchers.IO) +// private val appScope = CoroutineScope(SupervisorJob() + Dispatchers.IO) override fun onCreate() { super.onCreate() diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/OkHttpClientFactory.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/OkHttpClientFactory.kt index 430adcc..2ae62ee 100644 --- a/core/network/src/main/java/ru/fincode/tsudesk/core/network/OkHttpClientFactory.kt +++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/OkHttpClientFactory.kt @@ -4,6 +4,7 @@ import android.annotation.SuppressLint import okhttp3.OkHttpClient import ru.fincode.tsudesk.core.common.app.AppConfig import ru.fincode.tsudesk.core.network.interceptor.DebugInterceptor +import ru.fincode.tsudesk.core.network.interceptor.NetEventLogger import java.security.SecureRandom import java.security.cert.X509Certificate import java.util.concurrent.TimeUnit @@ -22,11 +23,12 @@ class OkHttpClientFactory @Inject constructor( .connectTimeout(appConfig.networkTimeoutSec, TimeUnit.SECONDS) .readTimeout(appConfig.networkTimeoutSec, TimeUnit.SECONDS) .writeTimeout(appConfig.networkTimeoutSec, TimeUnit.SECONDS) - .retryOnConnectionFailure(true) + .retryOnConnectionFailure(false) if (appConfig.isDebug) { builder.addInterceptor(debugInterceptor) applyUnsafeSslForDebug(builder) + builder.eventListenerFactory { NetEventLogger() } } return builder.build() diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/interceptor/NetEventLogger.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/interceptor/NetEventLogger.kt new file mode 100644 index 0000000..ca2b03a --- /dev/null +++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/interceptor/NetEventLogger.kt @@ -0,0 +1,51 @@ +package ru.fincode.tsudesk.core.network.interceptor + +import android.util.Log +import okhttp3.Call +import okhttp3.EventListener +import java.io.IOException +import java.net.InetAddress + +private const val LOG_TAG = "NETWORK_DEBUG" + +class NetEventLogger : EventListener() { + override fun dnsStart(call: Call, domainName: String) { + Log.d(LOG_TAG, "dnsStart: $domainName") + } + + override fun dnsEnd(call: Call, domainName: String, inetAddressList: List) { + Log.d(LOG_TAG, "dnsEnd: $domainName -> $inetAddressList") + } + + override fun connectStart( + call: Call, + inetSocketAddress: java.net.InetSocketAddress, + proxy: java.net.Proxy + ) { + Log.d(LOG_TAG, "connectStart: $inetSocketAddress proxy=$proxy") + } + + override fun secureConnectStart(call: Call) { + Log.d(LOG_TAG, "tlsStart") + } + + override fun secureConnectEnd(call: Call, handshake: okhttp3.Handshake?) { + Log.d(LOG_TAG, "tlsEnd: $handshake") + } + + override fun requestHeadersStart(call: Call) { + Log.d(LOG_TAG, "reqHeadersStart") + } + + override fun responseHeadersStart(call: Call) { + Log.d(LOG_TAG, "respHeadersStart") + } + + override fun callFailed(call: Call, ioe: IOException) { + Log.e(LOG_TAG, "callFailed", ioe) + } + + override fun callEnd(call: Call) { + Log.d(LOG_TAG, "callEnd") + } +} diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/local/ScheduleLocalDataSourceImpl.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/local/ScheduleLocalDataSourceImpl.kt index 6199584..bd73970 100644 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/local/ScheduleLocalDataSourceImpl.kt +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/local/ScheduleLocalDataSourceImpl.kt @@ -3,6 +3,12 @@ package ru.fincode.tsudesk.feature.schedule.data.local import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.emitAll +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onStart import ru.fincode.tsudesk.core.database.schedule.ScheduleDao import ru.fincode.tsudesk.feature.schedule.data.datasource.ScheduleLocalDataSource @@ -24,16 +30,19 @@ class ScheduleLocalDataSourceImpl @Inject constructor( return schedule.toDomain(lessons) } - override fun observeSchedule(key: String): Flow { - val scheduleFlow = dao.observeSchedule(key) // Flow - val lessonsFlow = dao.observeLessons(key) - .onStart { emit(emptyList()) } - return scheduleFlow - .combine(lessonsFlow) { schedule, lessons -> - schedule?.toDomain(lessons) + override fun observeSchedule(key: String): Flow = flow { + emitAll( + dao.observeSchedule(key).map { schedule -> + if (schedule == null) { + null + } else { + val lessons = dao.observeLessons(key) + .first() + schedule.toDomain(lessons) + } } - .distinctUntilChanged() - } + ) + }.distinctUntilChanged() override suspend fun removeSchedule(key: String) { dao.deleteLessonsByKey(key)