From d4327c8d48608ebc6eafc4a3df226c31d6586bbd Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+AntsyLich@users.noreply.github.com> Date: Wed, 10 Jun 2026 22:29:27 +0600 Subject: [PATCH] Add auto migration support from legacy extension store index (#3398) --- .../extension/model/NetworkLegacyExtensionRepo.kt | 3 +++ .../data/extension/service/ExtensionStoreService.kt | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) 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 6f55c9311..2292ea10b 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 -> @@ -34,10 +38,11 @@ class ExtensionStoreService( try { json.decodeFromBufferedSource(source.peek()) } catch (e: IllegalArgumentException) { + 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")) { @@ -51,6 +56,12 @@ class ExtensionStoreService( json.decodeFromBufferedSource(it) } } + + if (legacyIndex.indexV2 != null) { + return fetch(legacyIndex.indexV2, forceV2 = true) + } else { + legacyIndex + } } } .toExtensionStore(updatedIndexUrl)