mirror of
				https://github.com/owncloud/android-library.git
				synced 2025-10-31 02:17:41 +00:00 
			
		
		
		
	Allow conditional read of list of files in a folder based on ETag
This commit is contained in:
		
							parent
							
								
									e0f0416c9e
								
							
						
					
					
						commit
						5ff9062ea8
					
				| @ -61,8 +61,8 @@ import javax.net.ssl.SSLException; | |||||||
|  */ |  */ | ||||||
| public class RemoteOperationResult implements Serializable { | public class RemoteOperationResult implements Serializable { | ||||||
| 
 | 
 | ||||||
| 	/** Generated - should be refreshed every time the class changes!! */; |     /** Generated - should be refreshed every time the class changes!! */; | ||||||
|     private static final long serialVersionUID = 1129130415603799707L; |     private static final long serialVersionUID = -1909603208238358633L; | ||||||
| 
 | 
 | ||||||
|     private static final String TAG = RemoteOperationResult.class.getSimpleName(); |     private static final String TAG = RemoteOperationResult.class.getSimpleName(); | ||||||
| 
 | 
 | ||||||
| @ -100,19 +100,20 @@ public class RemoteOperationResult implements Serializable { | |||||||
|         ACCOUNT_NOT_THE_SAME, |         ACCOUNT_NOT_THE_SAME, | ||||||
|         INVALID_CHARACTER_IN_NAME, |         INVALID_CHARACTER_IN_NAME, | ||||||
|         SHARE_NOT_FOUND, |         SHARE_NOT_FOUND, | ||||||
| 		LOCAL_STORAGE_NOT_REMOVED, |         LOCAL_STORAGE_NOT_REMOVED, | ||||||
| 		FORBIDDEN, |         FORBIDDEN, | ||||||
| 		SHARE_FORBIDDEN, |         SHARE_FORBIDDEN, | ||||||
| 		OK_REDIRECT_TO_NON_SECURE_CONNECTION,  |         OK_REDIRECT_TO_NON_SECURE_CONNECTION, | ||||||
| 		INVALID_MOVE_INTO_DESCENDANT, |         INVALID_MOVE_INTO_DESCENDANT, | ||||||
|         INVALID_COPY_INTO_DESCENDANT, |         INVALID_COPY_INTO_DESCENDANT, | ||||||
| 		PARTIAL_MOVE_DONE, |         PARTIAL_MOVE_DONE, | ||||||
|         PARTIAL_COPY_DONE, |         PARTIAL_COPY_DONE, | ||||||
|         SHARE_WRONG_PARAMETER, |         SHARE_WRONG_PARAMETER, | ||||||
|         WRONG_SERVER_RESPONSE, |         WRONG_SERVER_RESPONSE, | ||||||
|         INVALID_CHARACTER_DETECT_IN_SERVER, |         INVALID_CHARACTER_DETECT_IN_SERVER, | ||||||
|         DELAYED_FOR_WIFI, |         DELAYED_FOR_WIFI, | ||||||
|         LOCAL_FILE_NOT_FOUND |         LOCAL_FILE_NOT_FOUND, | ||||||
|  |         NOT_MODIFIED | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private boolean mSuccess = false; |     private boolean mSuccess = false; | ||||||
| @ -127,7 +128,7 @@ public class RemoteOperationResult implements Serializable { | |||||||
| 
 | 
 | ||||||
|     public RemoteOperationResult(ResultCode code) { |     public RemoteOperationResult(ResultCode code) { | ||||||
|         mCode = code; |         mCode = code; | ||||||
| 		mSuccess = (code == ResultCode.OK || code == ResultCode.OK_SSL || |         mSuccess = (code == ResultCode.OK || code == ResultCode.OK_SSL || | ||||||
|                 code == ResultCode.OK_NO_SSL || |                 code == ResultCode.OK_NO_SSL || | ||||||
|                 code == ResultCode.OK_REDIRECT_TO_NON_SECURE_CONNECTION); |                 code == ResultCode.OK_REDIRECT_TO_NON_SECURE_CONNECTION); | ||||||
|         mData = null; |         mData = null; | ||||||
| @ -157,9 +158,11 @@ public class RemoteOperationResult implements Serializable { | |||||||
|             case HttpStatus.SC_INSUFFICIENT_STORAGE: |             case HttpStatus.SC_INSUFFICIENT_STORAGE: | ||||||
|                 mCode = ResultCode.QUOTA_EXCEEDED; |                 mCode = ResultCode.QUOTA_EXCEEDED; | ||||||
|                 break; |                 break; | ||||||
| 			case HttpStatus.SC_FORBIDDEN: |             case HttpStatus.SC_FORBIDDEN: | ||||||
| 				mCode = ResultCode.FORBIDDEN; |                 mCode = ResultCode.FORBIDDEN; | ||||||
|                 break; |                 break; | ||||||
|  |             case HttpStatus.SC_NOT_MODIFIED: | ||||||
|  |                 mCode = ResultCode.NOT_MODIFIED; | ||||||
|             default: |             default: | ||||||
|                 mCode = ResultCode.UNHANDLED_HTTP_CODE; |                 mCode = ResultCode.UNHANDLED_HTTP_CODE; | ||||||
|                 Log_OC.d(TAG, "RemoteOperationResult has processed UNHANDLED_HTTP_CODE: " + |                 Log_OC.d(TAG, "RemoteOperationResult has processed UNHANDLED_HTTP_CODE: " + | ||||||
| @ -406,10 +409,13 @@ public class RemoteOperationResult implements Serializable { | |||||||
|                 return "The file name contains an forbidden character"; |                 return "The file name contains an forbidden character"; | ||||||
| 
 | 
 | ||||||
|         } else if (mCode == ResultCode.FILE_NOT_FOUND) { |         } else if (mCode == ResultCode.FILE_NOT_FOUND) { | ||||||
| 	  	    return "Local file does not exist"; |            return "Local file does not exist"; | ||||||
| 
 | 
 | ||||||
|  	    } else if (mCode == ResultCode.SYNC_CONFLICT) { |         } else if (mCode == ResultCode.SYNC_CONFLICT) { | ||||||
|             return "Synchronization conflict"; |             return "Synchronization conflict"; | ||||||
|  | 
 | ||||||
|  |         } else if (mCode == ResultCode.NOT_MODIFIED) { | ||||||
|  |             return "Resource in server was not modified"; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         return "Operation finished with HTTP status code " + mHttpCode + " (" + |         return "Operation finished with HTTP status code " + mHttpCode + " (" + | ||||||
|  | |||||||
| @ -47,28 +47,42 @@ import com.owncloud.android.lib.common.utils.Log_OC; | |||||||
| 
 | 
 | ||||||
| public class ReadRemoteFolderOperation extends RemoteOperation { | public class ReadRemoteFolderOperation extends RemoteOperation { | ||||||
| 
 | 
 | ||||||
| 	private static final String TAG = ReadRemoteFolderOperation.class.getSimpleName(); |     private static final String TAG = ReadRemoteFolderOperation.class.getSimpleName(); | ||||||
| 
 | 
 | ||||||
| 	private String mRemotePath; |     private static final String IF_NONE_MATCH_HEADER = "If-None-Match"; | ||||||
| 	private ArrayList<Object> mFolderAndFiles; |  | ||||||
| 
 | 
 | ||||||
| 	/** |     private String mRemotePath; | ||||||
|  |     private String mETagToNotMatch; | ||||||
|  |     private ArrayList<Object> mFolderAndFiles; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|      * Constructor |      * Constructor | ||||||
|      *  |      *  | ||||||
|      * @param remotePath		Remote path of the file.  |      * @param remotePath		Remote path of the file.  | ||||||
|      */ |      */ | ||||||
| 	public ReadRemoteFolderOperation(String remotePath) { |     public ReadRemoteFolderOperation(String remotePath) { | ||||||
| 		mRemotePath = remotePath; |         mRemotePath = remotePath; | ||||||
| 	} |         mETagToNotMatch = ""; | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
| 	/** |     /** | ||||||
|  |      * Constructor | ||||||
|  |      * | ||||||
|  |      * @param remotePath		Remote path of the file. | ||||||
|  |      */ | ||||||
|  |     public ReadRemoteFolderOperation(String remotePath, String eTagToNotMatch) { | ||||||
|  |         mRemotePath = remotePath; | ||||||
|  |         mETagToNotMatch = (eTagToNotMatch == null) ? "" : eTagToNotMatch; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|      * Performs the read operation. |      * Performs the read operation. | ||||||
|      *  |      *  | ||||||
|      * @param   client      Client object to communicate with the remote ownCloud server. |      * @param   client      Client object to communicate with the remote ownCloud server. | ||||||
|      */ |      */ | ||||||
| 	@Override |     @Override | ||||||
| 	protected RemoteOperationResult run(OwnCloudClient client) { |     protected RemoteOperationResult run(OwnCloudClient client) { | ||||||
| 		RemoteOperationResult result = null; |         RemoteOperationResult result = null; | ||||||
|         PropFindMethod query = null; |         PropFindMethod query = null; | ||||||
|          |          | ||||||
|         try { |         try { | ||||||
| @ -76,13 +90,17 @@ public class ReadRemoteFolderOperation extends RemoteOperation { | |||||||
|             query = new PropFindMethod(client.getWebdavUri() + WebdavUtils.encodePath(mRemotePath), |             query = new PropFindMethod(client.getWebdavUri() + WebdavUtils.encodePath(mRemotePath), | ||||||
|                     WebdavUtils.getAllPropSet(),    // PropFind Properties |                     WebdavUtils.getAllPropSet(),    // PropFind Properties | ||||||
|                     DavConstants.DEPTH_1); |                     DavConstants.DEPTH_1); | ||||||
|  |             if (mETagToNotMatch.length() > 0) { | ||||||
|  |                 query.addRequestHeader(IF_NONE_MATCH_HEADER, "\"" + mETagToNotMatch + "\""); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|             int status = client.executeMethod(query); |             int status = client.executeMethod(query); | ||||||
| 
 | 
 | ||||||
|             // check and process response |             // check and process response | ||||||
|             boolean isSuccess = ( |             boolean isSuccess = ( | ||||||
|                     status == HttpStatus.SC_MULTI_STATUS || |                     status == HttpStatus.SC_MULTI_STATUS || | ||||||
|                     status == HttpStatus.SC_OK |                     status == HttpStatus.SC_OK | ||||||
| 		            ); |                     ); | ||||||
|             if (isSuccess) { |             if (isSuccess) { | ||||||
|             	// get data from remote folder  |             	// get data from remote folder  | ||||||
|             	MultiStatus dataInServer = query.getResponseBodyAsMultiStatus(); |             	MultiStatus dataInServer = query.getResponseBodyAsMultiStatus(); | ||||||
| @ -95,7 +113,7 @@ public class ReadRemoteFolderOperation extends RemoteOperation { | |||||||
|             		result.setData(mFolderAndFiles); |             		result.setData(mFolderAndFiles); | ||||||
|             	} |             	} | ||||||
|             } else { |             } else { | ||||||
|                 // synchronization failed |                 // synchronization failed, or no change in folder (mETagToNotMatch matched) | ||||||
|                 client.exhaustResponse(query.getResponseBodyAsStream()); |                 client.exhaustResponse(query.getResponseBodyAsStream()); | ||||||
|                 result = new RemoteOperationResult(false, status, query.getResponseHeaders()); |                 result = new RemoteOperationResult(false, status, query.getResponseHeaders()); | ||||||
|             } |             } | ||||||
| @ -120,10 +138,6 @@ public class ReadRemoteFolderOperation extends RemoteOperation { | |||||||
|              |              | ||||||
|         } |         } | ||||||
|         return result; |         return result; | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
|     public boolean isMultiStatus(int status) { |  | ||||||
|         return (status == HttpStatus.SC_MULTI_STATUS);  |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user