Milan Jurkulak 3 лет назад
Родитель
Сommit
e067c4cb10

+ 3 - 0
tvlib/build.gradle.kts

@@ -100,6 +100,9 @@ dependencies {
     implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1")
     implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1")
     // navigation
     // navigation
     implementation("androidx.navigation:navigation-compose:2.7.0-rc01")
     implementation("androidx.navigation:navigation-compose:2.7.0-rc01")
+    // okhttp
+    implementation("com.squareup.okhttp3:okhttp:4.11.0")
+    implementation("com.squareup.okhttp3:logging-interceptor:4.11.0")
     // image loading
     // image loading
     implementation("io.coil-kt:coil-base:2.4.0")
     implementation("io.coil-kt:coil-base:2.4.0")
     implementation("io.coil-kt:coil-gif:2.4.0")
     implementation("io.coil-kt:coil-gif:2.4.0")

+ 24 - 2
tvlib/src/main/kotlin/org/mjdev/tvlib/extensions/ComposeExt.kt

@@ -36,8 +36,13 @@ import coil.decode.SvgDecoder
 import coil.decode.VideoFrameDecoder
 import coil.decode.VideoFrameDecoder
 import coil.disk.DiskCache
 import coil.disk.DiskCache
 import coil.request.CachePolicy
 import coil.request.CachePolicy
+import okhttp3.Cache
+import okhttp3.OkHttpClient
+import okhttp3.logging.HttpLoggingInterceptor
 import org.mjdev.tvlib.extensions.ContextExt.isATv
 import org.mjdev.tvlib.extensions.ContextExt.isATv
 import org.mjdev.tvlib.helpers.coil.AlbumArtDecoder
 import org.mjdev.tvlib.helpers.coil.AlbumArtDecoder
+import org.mjdev.tvlib.network.CacheInterceptor
+import java.io.File
 
 
 @Suppress("MemberVisibilityCanBePrivate")
 @Suppress("MemberVisibilityCanBePrivate")
 object ComposeExt {
 object ComposeExt {
@@ -145,14 +150,31 @@ object ComposeExt {
                 .crossfade(false)
                 .crossfade(false)
                 .diskCachePolicy(CachePolicy.ENABLED)
                 .diskCachePolicy(CachePolicy.ENABLED)
                 .memoryCachePolicy(CachePolicy.ENABLED)
                 .memoryCachePolicy(CachePolicy.ENABLED)
+                .okHttpClient {
+                    OkHttpClient.Builder()
+                        .cache(
+                            Cache(
+                            directory = File(
+                                context.applicationContext.cacheDir,
+                                "http_cache"
+                            ),
+                            maxSize = 1024L * 1024L * 1024L
+                        )
+                        )
+                        .addNetworkInterceptor(HttpLoggingInterceptor().apply {
+                            level = HttpLoggingInterceptor.Level.BODY
+                        })
+                        .addNetworkInterceptor(CacheInterceptor())
+                        .build()
+                }
                 .diskCache {
                 .diskCache {
                     DiskCache.Builder()
                     DiskCache.Builder()
                         .directory(context.cacheDir.resolve("image_cache"))
                         .directory(context.cacheDir.resolve("image_cache"))
                         .maxSizePercent(0.7)
                         .maxSizePercent(0.7)
                         .build()
                         .build()
                 }
                 }
-                .respectCacheHeaders(true)
-                .networkObserverEnabled(true)
+//                .respectCacheHeaders(false)
+//                .networkObserverEnabled(true)
                 .components {
                 .components {
                     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                         add(ImageDecoderDecoder.Factory())
                         add(ImageDecoderDecoder.Factory())

+ 14 - 0
tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/coil/AlbumArtDecoder.kt

@@ -25,11 +25,13 @@ import coil.request.Options
 import okhttp3.Cache
 import okhttp3.Cache
 import okhttp3.OkHttpClient
 import okhttp3.OkHttpClient
 import okhttp3.Request
 import okhttp3.Request
+import org.mjdev.tvlib.network.CacheInterceptor
 import org.xmlpull.v1.XmlPullParser
 import org.xmlpull.v1.XmlPullParser
 import timber.log.Timber
 import timber.log.Timber
 import java.io.BufferedInputStream
 import java.io.BufferedInputStream
 import java.io.File
 import java.io.File
 import java.io.InputStream
 import java.io.InputStream
+import okhttp3.logging.HttpLoggingInterceptor
 
 
 @Suppress("PrivatePropertyName")
 @Suppress("PrivatePropertyName")
 class AlbumArtDecoder(
 class AlbumArtDecoder(
@@ -56,9 +58,21 @@ class AlbumArtDecoder(
         UserAgentInterceptor(USER_AGENT)
         UserAgentInterceptor(USER_AGENT)
     }
     }
 
 
+    private val cacheInterceptor by lazy {
+        CacheInterceptor()
+    }
+
+    private val httpLoggingInterceptor by lazy {
+        HttpLoggingInterceptor().apply {
+            level = HttpLoggingInterceptor.Level.BODY
+        }
+    }
+
     private val httpClient: OkHttpClient by lazy {
     private val httpClient: OkHttpClient by lazy {
         OkHttpClient.Builder().apply {
         OkHttpClient.Builder().apply {
             addNetworkInterceptor(userAgentInterceptor)
             addNetworkInterceptor(userAgentInterceptor)
+            addNetworkInterceptor(cacheInterceptor)
+            addNetworkInterceptor(httpLoggingInterceptor)
             cache(httpCache)
             cache(httpCache)
         }.build()
         }.build()
     }
     }