summaryrefslogtreecommitdiff
path: root/app/src/main/java/com/lc8n/util/ProgressMultipartEntity.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/com/lc8n/util/ProgressMultipartEntity.java')
-rw-r--r--app/src/main/java/com/lc8n/util/ProgressMultipartEntity.java72
1 files changed, 72 insertions, 0 deletions
diff --git a/app/src/main/java/com/lc8n/util/ProgressMultipartEntity.java b/app/src/main/java/com/lc8n/util/ProgressMultipartEntity.java
new file mode 100644
index 0000000..21142fd
--- /dev/null
+++ b/app/src/main/java/com/lc8n/util/ProgressMultipartEntity.java
@@ -0,0 +1,72 @@
+package com.lc8n.util;
+
+import org.apache.http.entity.mime.HttpMultipartMode;
+import org.apache.http.entity.mime.MultipartEntity;
+
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.charset.Charset;
+
+public class ProgressMultipartEntity extends MultipartEntity
+{
+
+ private final ProgressListener listener;
+
+ public ProgressMultipartEntity(final ProgressListener listener)
+ {
+ super();
+ this.listener = listener;
+ }
+
+ public ProgressMultipartEntity(final HttpMultipartMode mode, final ProgressListener listener)
+ {
+ super(mode);
+ this.listener = listener;
+ }
+
+ public ProgressMultipartEntity(HttpMultipartMode mode, final String boundary, final Charset charset, final ProgressListener listener)
+ {
+ super(mode, boundary, charset);
+ this.listener = listener;
+ }
+
+ @Override
+ public void writeTo(final OutputStream outstream) throws IOException
+ {
+ super.writeTo(new CountingOutputStream(outstream, this.listener));
+ }
+
+ public static interface ProgressListener
+ {
+ void transferred(long num);
+ }
+
+ public static class CountingOutputStream extends FilterOutputStream
+ {
+
+ private final ProgressListener listener;
+ private long transferred;
+
+ public CountingOutputStream(final OutputStream out, final ProgressListener listener)
+ {
+ super(out);
+ this.listener = listener;
+ this.transferred = 0;
+ }
+
+ public void write(byte[] b, int off, int len) throws IOException
+ {
+ out.write(b, off, len);
+ this.transferred += len;
+ this.listener.transferred(this.transferred);
+ }
+
+ public void write(int b) throws IOException
+ {
+ out.write(b);
+ this.transferred++;
+ this.listener.transferred(this.transferred);
+ }
+ }
+} \ No newline at end of file