diff --git a/data/src/main/java/mihon/data/extension/model/NetworkLegacyExtensionRepo.kt b/data/src/main/java/mihon/data/extension/model/NetworkLegacyExtensionRepo.kt index 09a563c30..babc696bb 100644 --- a/data/src/main/java/mihon/data/extension/model/NetworkLegacyExtensionRepo.kt +++ b/data/src/main/java/mihon/data/extension/model/NetworkLegacyExtensionRepo.kt @@ -1,12 +1,15 @@ package mihon.data.extension.model import android.annotation.SuppressLint +import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import mihon.domain.extension.model.ExtensionStore @SuppressLint("UnsafeOptInUsageError") @Serializable data class NetworkLegacyExtensionRepo( + @SerialName("index_v2") + val indexV2: String?, val meta: Meta, ) : BaseNetworkExtensionStore { @Serializable diff --git a/data/src/main/java/mihon/data/extension/service/ExtensionStoreService.kt b/data/src/main/java/mihon/data/extension/service/ExtensionStoreService.kt index 64696fee4..de08e9bf4 100644 --- a/data/src/main/java/mihon/data/extension/service/ExtensionStoreService.kt +++ b/data/src/main/java/mihon/data/extension/service/ExtensionStoreService.kt @@ -22,6 +22,10 @@ class ExtensionStoreService( private val protoBuf: ProtoBuf, ) { suspend fun fetch(indexUrl: String): Result { + return fetch(indexUrl, forceV2 = false) + } + + private suspend fun fetch(indexUrl: String, forceV2: Boolean): Result { var updatedIndexUrl: String = indexUrl return try { val store = network.client.newCall(GET(indexUrl)).awaitSuccess().body.source().use { source -> @@ -40,10 +44,11 @@ class ExtensionStoreService( } catch (e: Exception) { if (e is CancellationException) throw e // KMK <-- + if (forceV2) throw e logcat(LogPriority.ERROR, e) { "Failed to add extension store '$updatedIndexUrl'" } - try { + val legacyIndex = try { json.decodeFromBufferedSource(source.peek()) } catch (e: IllegalArgumentException) { if (!indexUrl.endsWith("/index.min.json")) { @@ -57,6 +62,12 @@ class ExtensionStoreService( json.decodeFromBufferedSource(it.body.source()) } } + + if (legacyIndex.indexV2 != null) { + return fetch(legacyIndex.indexV2, forceV2 = true) + } else { + legacyIndex + } } } .toExtensionStore(updatedIndexUrl)