Browse Source

allow user to force uploads which are delayed (due to wifi-only, charge-only, or schedule for a later timestamp)

Luke Owncloud 10 years ago
parent
commit
b8db750364

+ 9 - 0
src/com/owncloud/android/db/UploadDbObject.java

@@ -309,4 +309,13 @@ public class UploadDbObject implements Serializable {
     public String toFormattedString() {
     public String toFormattedString() {
         return getLocalPath() + " status:"+getUploadStatus() + " result:" + (getLastResult()==null?"null":getLastResult().getCode());
         return getLocalPath() + " status:"+getUploadStatus() + " result:" + (getLastResult()==null?"null":getLastResult().getCode());
     }
     }
+
+    /**
+     * Removes all uploads restrictions. After calling this function upload is performed immediately if requested.
+     */
+    public void removeAllUploadRestrictions() {
+        setUseWifiOnly(false);
+        setWhileChargingOnly(false);
+        setUploadTimestamp(0);
+    }
 }
 }

+ 9 - 8
src/com/owncloud/android/files/FileOperationsHelper.java

@@ -29,9 +29,9 @@ import android.widget.Toast;
 
 
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.db.UploadDbObject;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.files.services.FileUploadService.FileUploaderBinder;
 import com.owncloud.android.files.services.FileUploadService.FileUploaderBinder;
-
 import com.owncloud.android.lib.common.accounts.AccountUtils.Constants;
 import com.owncloud.android.lib.common.accounts.AccountUtils.Constants;
 import com.owncloud.android.lib.common.network.WebdavUtils;
 import com.owncloud.android.lib.common.network.WebdavUtils;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.common.utils.Log_OC;
@@ -248,28 +248,29 @@ public class FileOperationsHelper {
     }
     }
 
 
     /**
     /**
-     * Retry downloading a failed or cancelled upload
+     * Retry uploading a failed or cancelled upload with force. That is, all restrictions (wifi-only, etc.) are removed from upload.
      */
      */
-    public void retryUpload(OCFile file) {
+    public void retryUpload(UploadDbObject upload) {
         Account account = mFileActivity.getAccount();
         Account account = mFileActivity.getAccount();
         FileUploaderBinder uploaderBinder = mFileActivity.getFileUploaderBinder();
         FileUploaderBinder uploaderBinder = mFileActivity.getFileUploaderBinder();
         if (uploaderBinder != null) {
         if (uploaderBinder != null) {
-            uploaderBinder.retry(account, file);            
+            upload.removeAllUploadRestrictions();
+            uploaderBinder.retry(account, upload);            
         }  else {
         }  else {
-            Log_OC.w(TAG, "uploaderBinder not set. Cannot remove " + file);            
+            Log_OC.w(TAG, "uploaderBinder not set. Cannot remove " + upload.getOCFile());            
         }
         }
     }
     }
     
     
     /**
     /**
      * Remove upload from upload list.
      * Remove upload from upload list.
      */
      */
-    public void removeUploadFromList(OCFile file) {
+    public void removeUploadFromList(UploadDbObject upload) {
         Account account = mFileActivity.getAccount();
         Account account = mFileActivity.getAccount();
         FileUploaderBinder uploaderBinder = mFileActivity.getFileUploaderBinder();
         FileUploaderBinder uploaderBinder = mFileActivity.getFileUploaderBinder();
         if (uploaderBinder != null) {
         if (uploaderBinder != null) {
-            uploaderBinder.remove(account, file);            
+            uploaderBinder.remove(account, upload.getOCFile());            
         }  else {
         }  else {
-            Log_OC.w(TAG, "uploaderBinder not set. Cannot remove " + file);            
+            Log_OC.w(TAG, "uploaderBinder not set. Cannot remove " + upload.getOCFile());            
         }
         }
     }
     }
     public void cancelTransference(OCFile file) {
     public void cancelTransference(OCFile file) {

+ 7 - 10
src/com/owncloud/android/files/services/FileUploadService.java

@@ -622,16 +622,13 @@ public class FileUploadService extends IntentService implements OnDatatransferPr
             }            
             }            
         }
         }
         
         
-        public void retry(Account account, OCFile file) {
-            //get upload from db and add to mPendingUploads. Then start upload.
-            UploadDbObject[] list = mDb.getUploadByLocalPath(file.getStoragePath());
-            if(list.length == 1) {
-                String uploadKey = buildRemoteName(list[0]);
-                mPendingUploads.putIfAbsent(uploadKey, list[0]);
-                FileUploadService.retry(getApplicationContext(), uploadKey);
-            } else {
-                Log_OC.e(TAG, "Upload file " + file + " not found. Cannot upload.");
-            }  
+        /**
+         * Puts upload in upload list and tell FileUploadService to upload items in list. 
+         */
+        public void retry(Account account, UploadDbObject upload) {
+            String uploadKey = buildRemoteName(upload);
+            mPendingUploads.put(uploadKey, upload);
+            FileUploadService.retry(getApplicationContext(), uploadKey);
         }
         }
 
 
         public void clearListeners() {
         public void clearListeners() {

+ 2 - 2
src/com/owncloud/android/ui/adapter/ExpandableUploadListAdapter.java

@@ -204,7 +204,7 @@ public class ExpandableUploadListAdapter extends BaseExpandableListAdapter imple
                 rightButton.setOnClickListener(new OnClickListener() {                
                 rightButton.setOnClickListener(new OnClickListener() {                
                     @Override
                     @Override
                     public void onClick(View v) {
                     public void onClick(View v) {
-                        parentFileActivity.getFileOperationsHelper().retryUpload(uploadObject.getOCFile());                                        
+                        parentFileActivity.getFileOperationsHelper().retryUpload(uploadObject);                                        
                     }
                     }
                 });
                 });
             } else if (UploadUtils.userCanCancelUpload(uploadObject)) {
             } else if (UploadUtils.userCanCancelUpload(uploadObject)) {
@@ -220,7 +220,7 @@ public class ExpandableUploadListAdapter extends BaseExpandableListAdapter imple
                 rightButton.setOnClickListener(new OnClickListener() {                
                 rightButton.setOnClickListener(new OnClickListener() {                
                     @Override
                     @Override
                     public void onClick(View v) {
                     public void onClick(View v) {
-                        parentFileActivity.getFileOperationsHelper().removeUploadFromList(uploadObject.getOCFile());                                        
+                        parentFileActivity.getFileOperationsHelper().removeUploadFromList(uploadObject);                                        
                     }
                     }
                 });
                 });
             }
             }

+ 2 - 2
src/com/owncloud/android/ui/fragment/UploadListFragment.java

@@ -153,10 +153,10 @@ public class UploadListFragment extends ExpandableListFragment {
             ((FileActivity) getActivity()).getFileOperationsHelper().cancelTransference(uploadFile.getOCFile());
             ((FileActivity) getActivity()).getFileOperationsHelper().cancelTransference(uploadFile.getOCFile());
             return true;
             return true;
         case R.id.action_remove_upload: {
         case R.id.action_remove_upload: {
-            ((FileActivity) getActivity()).getFileOperationsHelper().removeUploadFromList(uploadFile.getOCFile());
+            ((FileActivity) getActivity()).getFileOperationsHelper().removeUploadFromList(uploadFile);
             return true;
             return true;
         }case R.id.action_retry_upload: {
         }case R.id.action_retry_upload: {
-            ((FileActivity) getActivity()).getFileOperationsHelper().retryUpload(uploadFile.getOCFile());
+            ((FileActivity) getActivity()).getFileOperationsHelper().retryUpload(uploadFile);
             return true;
             return true;
         }case R.id.action_see_details: {
         }case R.id.action_see_details: {
             Intent showDetailsIntent = new Intent(getActivity(), FileDisplayActivity.class);
             Intent showDetailsIntent = new Intent(getActivity(), FileDisplayActivity.class);

+ 3 - 6
src/com/owncloud/android/utils/UploadUtils.java

@@ -50,17 +50,14 @@ public class UploadUtils {
     /**
     /**
      * Returns true when user can choose to retry this upload. That is, when
      * Returns true when user can choose to retry this upload. That is, when
      * user cancelled upload before or when upload has failed.
      * user cancelled upload before or when upload has failed.
-     * 
-     * TODO Add other cases as described by
-     * https://github.com/owncloud/android/issues/765#issuecomment-66490312
-     * (certificate failure, wrong credentials, remote folder gone, ...) This
-     * needs special handling though!
      */
      */
     static public boolean userCanRetryUpload(UploadDbObject uploadFile) {
     static public boolean userCanRetryUpload(UploadDbObject uploadFile) {
         switch (uploadFile.getUploadStatus()) {
         switch (uploadFile.getUploadStatus()) {
         case UPLOAD_CANCELLED:
         case UPLOAD_CANCELLED:
         case UPLOAD_FAILED_RETRY://automatically retried. no need for user option.
         case UPLOAD_FAILED_RETRY://automatically retried. no need for user option.
-        case UPLOAD_FAILED_GIVE_UP:
+        case UPLOAD_FAILED_GIVE_UP: //TODO this case needs to be handled as described by
+            // https://github.com/owncloud/android/issues/765#issuecomment-66490312
+        case UPLOAD_LATER: //upload is already schedule but allow user to increase priority
             return true;
             return true;
         default:
         default:
             return false;
             return false;