X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/53b67429ea8c97b83602cec3446a10e0b6b7ff5e..5fc7cd13e7e561ef528e12d2fa088b58e35e00d0:/src/eu/alefzero/webdav/ChunkFromFileChannelRequestEntity.java diff --git a/src/eu/alefzero/webdav/ChunkFromFileChannelRequestEntity.java b/src/eu/alefzero/webdav/ChunkFromFileChannelRequestEntity.java index bcba3541..b7ab2613 100644 --- a/src/eu/alefzero/webdav/ChunkFromFileChannelRequestEntity.java +++ b/src/eu/alefzero/webdav/ChunkFromFileChannelRequestEntity.java @@ -22,6 +22,10 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; import org.apache.commons.httpclient.methods.RequestEntity; @@ -44,7 +48,7 @@ public class ChunkFromFileChannelRequestEntity implements RequestEntity { private final String mContentType; private final long mSize; private long mOffset; - private OnDatatransferProgressListener mListener; + Set mListeners = new HashSet(); private ByteBuffer mBuffer = ByteBuffer.allocate(4096); public ChunkFromFileChannelRequestEntity(final FileChannel channel, final String contentType, long size) { @@ -81,22 +85,33 @@ public class ChunkFromFileChannelRequestEntity implements RequestEntity { return true; } - public void setOnDatatransferProgressListener(OnDatatransferProgressListener listener) { - mListener = listener; + public void addOnDatatransferProgressListener(OnDatatransferProgressListener listener) { + mListeners.add(listener); } + public void addOnDatatransferProgressListeners(Collection listeners) { + mListeners.addAll(listeners); + } + + public void removeOnDatatransferProgressListener(OnDatatransferProgressListener listener) { + mListeners.remove(listener); + } + + public void writeRequest(final OutputStream out) throws IOException { int readCount = 0; + Iterator it = null; try { - //while ((i = instream.read(tmp)) >= 0) { mChannel.position(mOffset); - while (mChannel.position() < mOffset + mSize) { + while (mChannel.position() < mOffset + mSize && mChannel.position() < mChannel.size()) { readCount = mChannel.read(mBuffer); out.write(mBuffer.array(), 0, readCount); mBuffer.clear(); - if (mListener != null) - mListener.transferProgress(readCount); + it = mListeners.iterator(); + while (it.hasNext()) { + it.next().onTransferProgress(readCount); + } } } catch (IOException io) {