X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/b0ab3ce0872d2702e82b5979dddaa5a897be340b..27112bd200e1bf30897ae94507afeeb272e267ec:/src/eu/alefzero/webdav/FileRequestEntity.java diff --git a/src/eu/alefzero/webdav/FileRequestEntity.java b/src/eu/alefzero/webdav/FileRequestEntity.java index 0f774f77..2924f452 100644 --- a/src/eu/alefzero/webdav/FileRequestEntity.java +++ b/src/eu/alefzero/webdav/FileRequestEntity.java @@ -27,7 +27,7 @@ public class FileRequestEntity implements RequestEntity { final File mFile; final String mContentType; - Set mListeners = new HashSet(); + Set mDataTransferListeners = new HashSet(); public FileRequestEntity(final File file, final String contentType) { super(); @@ -54,15 +54,15 @@ public class FileRequestEntity implements RequestEntity { } public void addOnDatatransferProgressListener(OnDatatransferProgressListener listener) { - mListeners.add(listener); + mDataTransferListeners.add(listener); } public void addOnDatatransferProgressListeners(Collection listeners) { - mListeners.addAll(listeners); + mDataTransferListeners.addAll(listeners); } public void removeOnDatatransferProgressListener(OnDatatransferProgressListener listener) { - mListeners.remove(listener); + mDataTransferListeners.remove(listener); } @@ -70,7 +70,7 @@ public class FileRequestEntity implements RequestEntity { public void writeRequest(final OutputStream out) throws IOException { //byte[] tmp = new byte[4096]; ByteBuffer tmp = ByteBuffer.allocate(4096); - int i = 0; + int readResult = 0; // TODO(bprzybylski): each mem allocation can throw OutOfMemoryError we need to handle it // globally in some fashionable manner @@ -78,13 +78,17 @@ public class FileRequestEntity implements RequestEntity { FileChannel channel = raf.getChannel(); FileLock lock = channel.tryLock(); Iterator it = null; + long transferred = 0; + long size = mFile.length(); + if (size == 0) size = -1; try { - while ((i = channel.read(tmp)) >= 0) { - out.write(tmp.array(), 0, i); + while ((readResult = channel.read(tmp)) >= 0) { + out.write(tmp.array(), 0, readResult); tmp.clear(); - it = mListeners.iterator(); + transferred += readResult; + it = mDataTransferListeners.iterator(); while (it.hasNext()) { - it.next().onTransferProgress(i); + it.next().onTransferProgress(readResult, transferred, size, mFile.getName()); } }