mirror of https://github.com/tasks/tasks
RIP Flipper
parent
7ed406fbbc
commit
6fe9b0b255
@ -1,39 +0,0 @@
|
||||
package org.tasks
|
||||
|
||||
import android.content.Context
|
||||
import com.facebook.flipper.android.AndroidFlipperClient
|
||||
import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor
|
||||
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin
|
||||
import com.google.api.client.http.HttpRequest
|
||||
import com.google.api.client.http.HttpResponse
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import okhttp3.OkHttpClient
|
||||
import java.io.IOException
|
||||
import javax.inject.Inject
|
||||
|
||||
class DebugNetworkInterceptor @Inject constructor(@param:ApplicationContext private val context: Context) {
|
||||
fun apply(builder: OkHttpClient.Builder?) {
|
||||
builder?.addNetworkInterceptor(FlipperOkhttpInterceptor(getNetworkPlugin(context)))
|
||||
}
|
||||
|
||||
@Throws(IOException::class)
|
||||
fun <T> execute(request: HttpRequest, responseClass: Class<T>): T? {
|
||||
val interceptor = FlipperHttpInterceptor(getNetworkPlugin(context), responseClass)
|
||||
request
|
||||
.setInterceptor(interceptor)
|
||||
.setResponseInterceptor(interceptor)
|
||||
.execute()
|
||||
return interceptor.response
|
||||
}
|
||||
|
||||
@Throws(IOException::class)
|
||||
fun <T> report(httpResponse: HttpResponse, responseClass: Class<T>, start: Long, finish: Long): T? {
|
||||
val interceptor = FlipperHttpInterceptor(getNetworkPlugin(context), responseClass)
|
||||
interceptor.report(httpResponse, start, finish)
|
||||
return interceptor.response
|
||||
}
|
||||
|
||||
private fun getNetworkPlugin(context: Context): NetworkFlipperPlugin {
|
||||
return AndroidFlipperClient.getInstance(context).getPlugin(NetworkFlipperPlugin.ID)!!
|
||||
}
|
||||
}
|
||||
@ -1,82 +0,0 @@
|
||||
package org.tasks
|
||||
|
||||
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin
|
||||
import com.facebook.flipper.plugins.network.NetworkReporter
|
||||
import com.facebook.flipper.plugins.network.NetworkReporter.ResponseInfo
|
||||
import com.google.api.client.http.*
|
||||
import com.google.api.client.json.GenericJson
|
||||
import org.tasks.data.UUIDHelper
|
||||
import org.tasks.time.DateTimeUtils2.currentTimeMillis
|
||||
import timber.log.Timber
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.io.IOException
|
||||
|
||||
internal class FlipperHttpInterceptor<T>(private val plugin: NetworkFlipperPlugin, private val responseClass: Class<T>) : HttpExecuteInterceptor, HttpResponseInterceptor {
|
||||
private val requestId = UUIDHelper.newUUID()
|
||||
|
||||
var response: T? = null
|
||||
private set
|
||||
|
||||
override fun intercept(request: HttpRequest) {
|
||||
plugin.reportRequest(toRequestInfo(request, currentTimeMillis()))
|
||||
}
|
||||
|
||||
@Throws(IOException::class)
|
||||
override fun interceptResponse(response: HttpResponse) {
|
||||
plugin.reportResponse(toResponseInfo(response, currentTimeMillis()))
|
||||
}
|
||||
|
||||
@Throws(IOException::class)
|
||||
fun report(response: HttpResponse, start: Long, end: Long) {
|
||||
plugin.reportRequest(toRequestInfo(response.request, start))
|
||||
plugin.reportResponse(toResponseInfo(response, end))
|
||||
}
|
||||
|
||||
private fun toRequestInfo(request: HttpRequest, timestamp: Long): NetworkReporter.RequestInfo {
|
||||
val requestInfo = NetworkReporter.RequestInfo()
|
||||
requestInfo.method = request.requestMethod
|
||||
requestInfo.body = bodyToByteArray(request.content)
|
||||
requestInfo.headers = getHeaders(request.headers)
|
||||
requestInfo.requestId = requestId
|
||||
requestInfo.timeStamp = timestamp
|
||||
requestInfo.uri = request.url.toString()
|
||||
return requestInfo
|
||||
}
|
||||
|
||||
@Throws(IOException::class)
|
||||
private fun toResponseInfo(response: HttpResponse, timestamp: Long): ResponseInfo {
|
||||
val responseInfo = ResponseInfo()
|
||||
responseInfo.timeStamp = timestamp
|
||||
responseInfo.headers = getHeaders(response.headers)
|
||||
responseInfo.requestId = requestId
|
||||
responseInfo.statusCode = response.statusCode
|
||||
responseInfo.statusReason = response.statusMessage
|
||||
this.response = response.parseAs(responseClass)
|
||||
if (this.response is GenericJson) {
|
||||
try {
|
||||
responseInfo.body = (this.response as GenericJson).toPrettyString().toByteArray()
|
||||
} catch (e: IOException) {
|
||||
Timber.e(e)
|
||||
}
|
||||
}
|
||||
return responseInfo
|
||||
}
|
||||
|
||||
private fun getHeaders(headers: HttpHeaders): List<NetworkReporter.Header> {
|
||||
return headers.map { (name, value) -> NetworkReporter.Header(name, value.toString()) }
|
||||
}
|
||||
|
||||
private fun bodyToByteArray(content: HttpContent?): ByteArray? {
|
||||
if (content == null) {
|
||||
return null
|
||||
}
|
||||
val output = ByteArrayOutputStream()
|
||||
try {
|
||||
content.writeTo(output)
|
||||
} catch (e: IOException) {
|
||||
Timber.e(e)
|
||||
return null
|
||||
}
|
||||
return output.toByteArray()
|
||||
}
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
package org.tasks
|
||||
|
||||
import com.google.api.client.http.HttpRequest
|
||||
import com.google.api.client.http.HttpResponse
|
||||
import okhttp3.OkHttpClient
|
||||
import javax.inject.Inject
|
||||
|
||||
class DebugNetworkInterceptor @Inject constructor() {
|
||||
fun apply(builder: OkHttpClient.Builder?) {}
|
||||
fun <T> execute(httpRequest: HttpRequest?, responseClass: Class<T>?): T? = null
|
||||
fun <T> report(httpResponse: HttpResponse?, responseClass: Class<T>?, start: Long, finish: Long): T? = null
|
||||
}
|
||||
Loading…
Reference in New Issue