diff --git a/plugins/plugin-servers/src/main/kotlin/com/redmadrobot/debug/plugin/servers/ServersPlugin.kt b/plugins/plugin-servers/src/main/kotlin/com/redmadrobot/debug/plugin/servers/ServersPlugin.kt index a81730fb..19f8145c 100644 --- a/plugins/plugin-servers/src/main/kotlin/com/redmadrobot/debug/plugin/servers/ServersPlugin.kt +++ b/plugins/plugin-servers/src/main/kotlin/com/redmadrobot/debug/plugin/servers/ServersPlugin.kt @@ -35,11 +35,11 @@ public class ServersPlugin( return getPlugin().getContainer().serversRepository.getDefault() } - public fun getSelectedStage(): DebugStage { + public fun getSelectedStage(): DebugStage? { return getPlugin().getContainer().stagesRepository.getSelectedStage() } - public fun getDefaultStage(): DebugStage { + public fun getDefaultStage(): DebugStage? { return getPlugin().getContainer().stagesRepository.getDefault() } } diff --git a/plugins/plugin-servers/src/main/kotlin/com/redmadrobot/debug/plugin/servers/data/DebugStageRepository.kt b/plugins/plugin-servers/src/main/kotlin/com/redmadrobot/debug/plugin/servers/data/DebugStageRepository.kt index 20161c41..21474eb0 100644 --- a/plugins/plugin-servers/src/main/kotlin/com/redmadrobot/debug/plugin/servers/data/DebugStageRepository.kt +++ b/plugins/plugin-servers/src/main/kotlin/com/redmadrobot/debug/plugin/servers/data/DebugStageRepository.kt @@ -34,7 +34,7 @@ internal class DebugStageRepository( } } - fun getSelectedStage(): DebugStage { + fun getSelectedStage(): DebugStage? { val stageName = sharedPreferences.getString(SELECTED_STAGE_NAME, null) val hostsHash = sharedPreferences.getInt(SELECTED_STAGE_HOSTS_HASH, -1) @@ -48,8 +48,8 @@ internal class DebugStageRepository( } } - fun getDefault(): DebugStage { - return preInstalledStages.first { it.isDefault } + fun getDefault(): DebugStage? { + return preInstalledStages.firstOrNull { it.isDefault } } suspend fun getStages(): List { diff --git a/plugins/plugin-servers/src/main/kotlin/com/redmadrobot/debug/plugin/servers/interceptor/DebugStageInterceptor.kt b/plugins/plugin-servers/src/main/kotlin/com/redmadrobot/debug/plugin/servers/interceptor/DebugStageInterceptor.kt index 36ec20e8..ae859e57 100644 --- a/plugins/plugin-servers/src/main/kotlin/com/redmadrobot/debug/plugin/servers/interceptor/DebugStageInterceptor.kt +++ b/plugins/plugin-servers/src/main/kotlin/com/redmadrobot/debug/plugin/servers/interceptor/DebugStageInterceptor.kt @@ -30,20 +30,28 @@ public class DebugStageInterceptor(private val hostName: String) : Interceptor { } override fun intercept(chain: Interceptor.Chain): Response { - var request = chain.request() - return if (DebugPanel.isInitialized) { - val debugStage = stageRepository.getSelectedStage() - val host = debugStage.hosts[hostName] - if (host != null) { - val newUrl = request.getNewUrl(host) - request = request.newBuilder() - .url(newUrl) - .build() + val originalRequest = chain.request() + + if (!DebugPanel.isInitialized) { + return chain.proceed(originalRequest) + } + + val debugStage = stageRepository.getSelectedStage() + val host = debugStage?.hosts?.get(hostName) + var currentRequest = originalRequest + + if (host != null) { + val newUrl = originalRequest.getNewUrl(host) + if (newUrl != originalRequest.url) { + currentRequest = originalRequest.newBuilder().url(newUrl).build() } - chain.proceed(requestModifier?.invoke(request, debugStage) ?: request) - } else { - chain.proceed(request) } + + val modifiedRequest = debugStage?.let { stage -> + requestModifier?.invoke(currentRequest, stage) + } + + return chain.proceed(modifiedRequest ?: currentRequest) } diff --git a/sample/src/debug/kotlin/com/redmadrobot/debug_sample/debug_data/DebugServersProvider.kt b/sample/src/debug/kotlin/com/redmadrobot/debug_sample/debug_data/DebugServersProvider.kt index e3517fad..27e9cb81 100644 --- a/sample/src/debug/kotlin/com/redmadrobot/debug_sample/debug_data/DebugServersProvider.kt +++ b/sample/src/debug/kotlin/com/redmadrobot/debug_sample/debug_data/DebugServersProvider.kt @@ -31,14 +31,6 @@ class DebugServersProvider { ), isDefault = true ), - DebugStage( - name = "debug stage 2", - hosts = mapOf( - "main" to "https://testserver2main.com", - "s3" to "https://testserver2s3.com", - "wss" to "https://testserver2wss.com" - ) - ), ) } } diff --git a/sample/src/main/kotlin/com/redmadrobot/debug_sample/network/ApiFactory.kt b/sample/src/main/kotlin/com/redmadrobot/debug_sample/network/ApiFactory.kt index b127dc7f..c595dcc7 100644 --- a/sample/src/main/kotlin/com/redmadrobot/debug_sample/network/ApiFactory.kt +++ b/sample/src/main/kotlin/com/redmadrobot/debug_sample/network/ApiFactory.kt @@ -1,17 +1,11 @@ package com.redmadrobot.debug_sample.network -import com.redmadrobot.debug.plugin.servers.interceptor.DebugStageInterceptor +import com.redmadrobot.debug.plugin.servers.interceptor.DebugServerInterceptor import okhttp3.Interceptor import okhttp3.OkHttpClient -import okhttp3.Response import retrofit2.Retrofit -import java.net.HttpURLConnection -import java.net.URL -import java.net.URLConnection -import java.net.URLStreamHandler object ApiFactory { - fun getSampleApi(onCalled: (String) -> Unit): SampleApi { val retrofit = Retrofit.Builder() .baseUrl("https://jsonplaceholder.typicode.com/") @@ -22,25 +16,14 @@ object ApiFactory { } private fun getSampleClient(onCalled: (String) -> Unit): OkHttpClient { - return OkHttpClient.Builder() + .addInterceptor(interceptor = DebugServerInterceptor()) .addInterceptor( - DebugStageInterceptor("s3").modifyRequest { request, server -> - if (server.name == "Test") { - request.newBuilder() - .addHeader("Authorization", "testToken") - .build() - } else { - request - } - } - ) - .addInterceptor(object : Interceptor { - override fun intercept(chain: Interceptor.Chain): Response { + interceptor = Interceptor { chain -> onCalled.invoke(chain.request().url.toString()) - return chain.proceed(chain.request()) + chain.proceed(chain.request()) } - }) + ) .build() } }