X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/92080afefcab6de830d6a5c099b04e3c3a7db47f..0a924c67d3a9141c4cceaca8d0a1b6c5b28995ac:/src/eu/alefzero/webdav/FileRequestEntity.java diff --git a/src/eu/alefzero/webdav/FileRequestEntity.java b/src/eu/alefzero/webdav/FileRequestEntity.java index 69643e6f..aa32a324 100644 --- a/src/eu/alefzero/webdav/FileRequestEntity.java +++ b/src/eu/alefzero/webdav/FileRequestEntity.java @@ -24,7 +24,6 @@ import java.io.OutputStream; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; -import java.nio.channels.FileLock; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; @@ -32,6 +31,8 @@ import java.util.Set; import org.apache.commons.httpclient.methods.RequestEntity; +import com.owncloud.android.network.ProgressiveDataTransferer; + import eu.alefzero.webdav.OnDatatransferProgressListener; import android.util.Log; @@ -41,7 +42,7 @@ import android.util.Log; * A RequestEntity that represents a File. * */ -public class FileRequestEntity implements RequestEntity { +public class FileRequestEntity implements RequestEntity, ProgressiveDataTransferer { final File mFile; final String mContentType; @@ -70,17 +71,26 @@ public class FileRequestEntity implements RequestEntity { public boolean isRepeatable() { return true; } - - public void addOnDatatransferProgressListener(OnDatatransferProgressListener listener) { - mDataTransferListeners.add(listener); + + @Override + public void addDatatransferProgressListener(OnDatatransferProgressListener listener) { + synchronized (mDataTransferListeners) { + mDataTransferListeners.add(listener); + } } - public void addOnDatatransferProgressListeners(Collection listeners) { - mDataTransferListeners.addAll(listeners); + @Override + public void addDatatransferProgressListeners(Collection listeners) { + synchronized (mDataTransferListeners) { + mDataTransferListeners.addAll(listeners); + } } - public void removeOnDatatransferProgressListener(OnDatatransferProgressListener listener) { - mDataTransferListeners.remove(listener); + @Override + public void removeDatatransferProgressListener(OnDatatransferProgressListener listener) { + synchronized (mDataTransferListeners) { + mDataTransferListeners.remove(listener); + } } @@ -94,7 +104,6 @@ public class FileRequestEntity implements RequestEntity { // globally in some fashionable manner RandomAccessFile raf = new RandomAccessFile(mFile, "r"); FileChannel channel = raf.getChannel(); - FileLock lock = channel.tryLock(); Iterator it = null; long transferred = 0; long size = mFile.length(); @@ -104,9 +113,11 @@ public class FileRequestEntity implements RequestEntity { out.write(tmp.array(), 0, readResult); tmp.clear(); transferred += readResult; - it = mDataTransferListeners.iterator(); - while (it.hasNext()) { - it.next().onTransferProgress(readResult, transferred, size, mFile.getName()); + synchronized (mDataTransferListeners) { + it = mDataTransferListeners.iterator(); + while (it.hasNext()) { + it.next().onTransferProgress(readResult, transferred, size, mFile.getName()); + } } } @@ -115,7 +126,6 @@ public class FileRequestEntity implements RequestEntity { throw new RuntimeException("Ugly solution to workaround the default policy of retries when the server falls while uploading ; temporal fix; really", io); } finally { - lock.release(); channel.close(); raf.close(); }