diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 87fb090d68..151d633aa3 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -17,8 +17,8 @@ along with this program. If not, see . --> + android:versionCode="103008" + android:versionName="1.3.8" xmlns:android="http://schemas.android.com/apk/res/android"> diff --git a/src/com/owncloud/android/files/services/FileUploader.java b/src/com/owncloud/android/files/services/FileUploader.java index 10f05c488a..f7340f6bcc 100644 --- a/src/com/owncloud/android/files/services/FileUploader.java +++ b/src/com/owncloud/android/files/services/FileUploader.java @@ -220,6 +220,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe availablePath = getAvailableRemotePath(wc, mRemotePaths[i]); try { File f = new File(mRemotePaths[i]); + long size = localFiles[i].length(); parentDirId = storageManager.getFileByPath(f.getParent().endsWith("/")?f.getParent():f.getParent()+"/").getFileId(); if(availablePath != null) { mRemotePaths[i] = availablePath; @@ -227,7 +228,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe if (wc.putFile(mLocalPaths[i], mRemotePaths[i], mimeType)) { OCFile new_file = new OCFile(mRemotePaths[i]); new_file.setMimetype(mimeType); - new_file.setFileLength(localFiles[i].length()); + new_file.setFileLength(size); new_file.setModificationTimestamp(System.currentTimeMillis()); new_file.setLastSyncDate(0); new_file.setStoragePath(mLocalPaths[i]); diff --git a/src/eu/alefzero/webdav/FileRequestEntity.java b/src/eu/alefzero/webdav/FileRequestEntity.java index 2a3ba025af..f8ba3204a3 100644 --- a/src/eu/alefzero/webdav/FileRequestEntity.java +++ b/src/eu/alefzero/webdav/FileRequestEntity.java @@ -5,6 +5,11 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.RandomAccessFile; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; +import java.nio.channels.FileLock; +import java.nio.channels.OverlappingFileLockException; import org.apache.commons.httpclient.methods.RequestEntity; @@ -49,12 +54,19 @@ public class FileRequestEntity implements RequestEntity { } public void writeRequest(final OutputStream out) throws IOException { - byte[] tmp = new byte[4096]; + //byte[] tmp = new byte[4096]; + ByteBuffer tmp = ByteBuffer.allocate(4096); int i = 0; - InputStream instream = new FileInputStream(this.file); + + FileChannel channel = new RandomAccessFile(this.file, "rw").getChannel(); + FileLock lock = channel.tryLock(); + //InputStream instream = new FileInputStream(this.file); + try { - while ((i = instream.read(tmp)) >= 0) { - out.write(tmp, 0, i); + //while ((i = instream.read(tmp)) >= 0) { + while ((i = channel.read(tmp)) >= 0) { + out.write(tmp.array(), 0, i); + tmp.clear(); if (listener != null) listener.transferProgress(i); } @@ -63,7 +75,9 @@ 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 { - instream.close(); + //instream.close(); + lock.release(); + channel.close(); } }