diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/ExtensionStoreService.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/ExtensionStoreService.kt index 8cdade8a0..2eac26d5e 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/ExtensionStoreService.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/ExtensionStoreService.kt @@ -49,44 +49,41 @@ object ExtensionStoreService { ): ExtensionStore { var updatedIndexUrl = indexUrl return try { - val response = network.client.newCall(GET(indexUrl)).awaitSuccess() - response.body - .source() - .use { source -> + network.client.newCall(GET(indexUrl)).awaitSuccess().body.source().use { source -> + try { + protoBuf.decodeFromByteArray(source.peek().readByteArray()) + } catch (e: IllegalArgumentException) { + logger.debug { "Failed to decode as protobuf, trying JSON" } try { - protoBuf.decodeFromByteArray(source.peek().readByteArray()) + json.decodeFromBufferedSource(source.peek()) } catch (e: IllegalArgumentException) { - logger.debug { "Failed to decode as protobuf, trying JSON" } if (forceV2) throw e - try { - json.decodeFromBufferedSource(source.peek()) - } catch (_: IllegalArgumentException) { - logger.debug { "Failed to decode as NetworkExtensionStore, trying LegacyExtensionRepo" } - val legacyIndex = - try { - json.decodeFromBufferedSource(source.peek()) - } catch (e: IllegalArgumentException) { - if (!indexUrl.endsWith("/index.min.json")) { - throw e - } - logger.debug { "Retrying with /index.min.json" } - updatedIndexUrl = indexUrl.replace("/index.min.json", "/repo.json") - network.client.newCall(GET(updatedIndexUrl)).awaitSuccess().body.source().use { - json.decodeFromBufferedSource(it) - } + logger.debug { "Failed to decode as NetworkExtensionStore, trying LegacyExtensionRepo" } + val legacyIndex = + try { + json.decodeFromBufferedSource(source.peek()) + } catch (e: IllegalArgumentException) { + if (!indexUrl.endsWith("/index.min.json")) { + throw e + } + logger.debug { "Checking for new repo.json format" } + updatedIndexUrl = indexUrl.replace("/index.min.json", "/repo.json") + network.client.newCall(GET(updatedIndexUrl)).awaitSuccess().body.source().use { + json.decodeFromBufferedSource(it) } - - if (legacyIndex.indexV2 != null) { - return fetch(legacyIndex.indexV2, forceV2 = true) - } else { - legacyIndex } + + if (legacyIndex.indexV2 != null) { + return fetch(legacyIndex.indexV2, forceV2 = true) + } else { + legacyIndex } } }.toExtensionStore(updatedIndexUrl) + } } catch (e: Exception) { if (e is CancellationException) throw e - logger.debug(e) { "Failed to fetch extension store '$indexUrl'" } + logger.error(e) { "Failed to fetch extension store '$indexUrl'" } throw e } }