From fefce9f98217cb8683dd355abecbb57aece4d02d Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Tue, 24 Feb 2015 15:31:29 -0800 Subject: b64 images for stetho preview --- .../async/stetho/NetworkEventReporterWrapper.java | 25 ++++++++++++++++------ .../async/stetho/StethoMiddleware.java | 4 +++- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/AndroidAsyncStetho/src/com/koushikdutta/async/stetho/NetworkEventReporterWrapper.java b/AndroidAsyncStetho/src/com/koushikdutta/async/stetho/NetworkEventReporterWrapper.java index b1c7e58..b826d36 100644 --- a/AndroidAsyncStetho/src/com/koushikdutta/async/stetho/NetworkEventReporterWrapper.java +++ b/AndroidAsyncStetho/src/com/koushikdutta/async/stetho/NetworkEventReporterWrapper.java @@ -2,6 +2,9 @@ package com.koushikdutta.async.stetho; +import android.util.Base64; +import android.util.Base64OutputStream; + import com.facebook.stetho.inspector.network.NetworkEventReporter; import com.facebook.stetho.inspector.network.NetworkPeerManager; import com.facebook.stetho.inspector.network.ResponseHandler; @@ -10,11 +13,14 @@ import com.koushikdutta.async.DataEmitter; import com.koushikdutta.async.FilteredDataEmitter; import com.koushikdutta.async.util.StreamUtility; +import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; +import java.nio.channels.Channels; import java.nio.channels.FileChannel; +import java.nio.channels.WritableByteChannel; import javax.annotation.Nullable; @@ -74,17 +80,20 @@ class NetworkEventReporterWrapper implements NetworkEventReporter { return null; } - public DataEmitter interpretResponseEmitter( - final String requestId, - @Nullable DataEmitter body - ) { + public DataEmitter interpretResponseEmitter(final String requestId, @Nullable DataEmitter body, final boolean b64Encode) { final NetworkPeerManager peerManager = getPeerManagerIfEnabled(); if (peerManager == null) return null; - final FileChannel channel; + final WritableByteChannel channel; try { - channel = ((FileOutputStream)peerManager.getResponseBodyFileManager().openResponseBodyFile(requestId, false)).getChannel(); + if (b64Encode) { + final Base64OutputStream b64out = new Base64OutputStream(peerManager.getResponseBodyFileManager().openResponseBodyFile(requestId, false), Base64.DEFAULT); + channel = Channels.newChannel(b64out); + } + else { + channel = ((FileOutputStream)peerManager.getResponseBodyFileManager().openResponseBodyFile(requestId, false)).getChannel(); + } } catch (IOException e) { return null; @@ -112,7 +121,9 @@ class NetworkEventReporterWrapper implements NetworkEventReporter { copy[i] = original[i].duplicate(); } try { - channel.write(copy); + for (ByteBuffer c: copy) { + channel.write(c); + } } catch (IOException ignored) { StreamUtility.closeQuietly(channel); diff --git a/AndroidAsyncStetho/src/com/koushikdutta/async/stetho/StethoMiddleware.java b/AndroidAsyncStetho/src/com/koushikdutta/async/stetho/StethoMiddleware.java index 14ec31c..3bf4c4c 100644 --- a/AndroidAsyncStetho/src/com/koushikdutta/async/stetho/StethoMiddleware.java +++ b/AndroidAsyncStetho/src/com/koushikdutta/async/stetho/StethoMiddleware.java @@ -189,7 +189,9 @@ public class StethoMiddleware extends SimpleMiddleware { if (inspect == null) return; - DataEmitter emitter = eventReporter.interpretResponseEmitter(inspect.id(), data.bodyEmitter); + String ct = data.response.headers().get("Content-Type"); + boolean isImage = ct != null && ct.startsWith("image/"); + DataEmitter emitter = eventReporter.interpretResponseEmitter(inspect.id(), data.bodyEmitter, isImage); if (emitter != null) data.bodyEmitter = emitter; } -- cgit v1.2.3