Fixed lack of File#getUsableSpace() in Android versions previous to GINGERBREAD
[pub/Android/ownCloud.git] / src / com / owncloud / android / operations / UploadFileOperation.java
index 2ced4bf..9c570ea 100644 (file)
@@ -143,7 +143,6 @@ public class UploadFileOperation extends RemoteOperation {
         mDataTransferListeners.add(listener);
     }
     
         mDataTransferListeners.add(listener);
     }
     
-
     @Override
     protected RemoteOperationResult run(WebdavClient client) {
         RemoteOperationResult result = null;
     @Override
     protected RemoteOperationResult run(WebdavClient client) {
         RemoteOperationResult result = null;
@@ -167,8 +166,7 @@ public class UploadFileOperation extends RemoteOperation {
             /// check location of local file; if not the expected, copy to a temporal file before upload (if COPY is the expected behaviour)
             if (!originalStoragePath.equals(expectedPath) && mLocalBehaviour == FileUploader.LOCAL_BEHAVIOUR_COPY) {
 
             /// check location of local file; if not the expected, copy to a temporal file before upload (if COPY is the expected behaviour)
             if (!originalStoragePath.equals(expectedPath) && mLocalBehaviour == FileUploader.LOCAL_BEHAVIOUR_COPY) {
 
-                File ocLocalFolder = new File(FileStorageUtils.getSavePath(mAccount.name));
-                if (ocLocalFolder.getUsableSpace() < originalFile.length()) {
+                if (FileStorageUtils.getUsableSpace(mAccount.name) < originalFile.length()) {
                     result = new RemoteOperationResult(ResultCode.LOCAL_STORAGE_FULL);
                     return result;  // error condition when the file should be copied
                         
                     result = new RemoteOperationResult(ResultCode.LOCAL_STORAGE_FULL);
                     return result;  // error condition when the file should be copied
                         
@@ -187,6 +185,11 @@ public class UploadFileOperation extends RemoteOperation {
                             while ((len = in.read(buf)) > 0){
                                 out.write(buf, 0, len);
                             }
                             while ((len = in.read(buf)) > 0){
                                 out.write(buf, 0, len);
                             }
+                            
+                        } catch (Exception e) {
+                            result = new RemoteOperationResult(ResultCode.LOCAL_STORAGE_NOT_COPIED);
+                            return result;
+                            
                         } finally {
                             try {
                                 if (in != null) in.close();
                         } finally {
                             try {
                                 if (in != null) in.close();
@@ -230,8 +233,11 @@ public class UploadFileOperation extends RemoteOperation {
                     }
                     expectedFile = new File(mFile.getStoragePath());
                     if (!expectedFile.equals(fileToMove) && !fileToMove.renameTo(expectedFile)) {
                     }
                     expectedFile = new File(mFile.getStoragePath());
                     if (!expectedFile.equals(fileToMove) && !fileToMove.renameTo(expectedFile)) {
-                        result = new RemoteOperationResult(ResultCode.LOCAL_STORAGE_NOT_MOVED);
-                        return result;
+                        mFile.setStoragePath(null); // forget the local file
+                        // by now, treat this as a success; the file was uploaded; the user won't like that the local file is not linked, but this should be a veeery rare fail;
+                        // the best option could be show a warning message (but not a fail)
+                        //result = new RemoteOperationResult(ResultCode.LOCAL_STORAGE_NOT_MOVED);
+                        //return result;
                     }
                 } 
             }
                     }
                 } 
             }