OC-2332: rewrite getAvailableRemotePath from UpdateFileOperation, using ExistenceCeheckRemoteOperation instead of WebClient#existsFile

This commit is contained in:
masensio 2013-12-12 12:37:36 +01:00
parent 2246c27a8b
commit d38a69abc1
3 changed files with 26 additions and 11 deletions

View file

@ -267,9 +267,10 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
uploadKey = buildRemoteName(account, files[i].getRemotePath());
if (chunked) {
newUpload = new ChunkedUploadFileOperation(account, files[i], isInstant, forceOverwrite,
localAction);
localAction, getApplicationContext());
} else {
newUpload = new UploadFileOperation(account, files[i], isInstant, forceOverwrite, localAction);
newUpload = new UploadFileOperation(account, files[i], isInstant, forceOverwrite, localAction,
getApplicationContext());
}
if (isInstant) {
newUpload.setRemoteFolderToBeCreated();

View file

@ -36,6 +36,7 @@ import com.owncloud.android.utils.Log_OC;
import android.accounts.Account;
import android.content.Context;
public class ChunkedUploadFileOperation extends UploadFileOperation {
@ -48,9 +49,9 @@ public class ChunkedUploadFileOperation extends UploadFileOperation {
OCFile file,
boolean isInstant,
boolean forceOverwrite,
int localBehaviour) {
int localBehaviour, Context context) {
super(account, file, isInstant, forceOverwrite, localBehaviour);
super(account, file, isInstant, forceOverwrite, localBehaviour, context);
}
@Override

View file

@ -43,10 +43,12 @@ import com.owncloud.android.oc_framework.operations.OperationCancelledException;
import com.owncloud.android.oc_framework.operations.RemoteOperation;
import com.owncloud.android.oc_framework.operations.RemoteOperationResult;
import com.owncloud.android.oc_framework.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.oc_framework.operations.remote.ExistenceCheckRemoteOperation;
import com.owncloud.android.utils.FileStorageUtils;
import com.owncloud.android.utils.Log_OC;
import android.accounts.Account;
import android.content.Context;
/**
@ -72,6 +74,7 @@ public class UploadFileOperation extends RemoteOperation {
PutMethod mPutMethod = null;
private Set<OnDatatransferProgressListener> mDataTransferListeners = new HashSet<OnDatatransferProgressListener>();
private final AtomicBoolean mCancellationRequested = new AtomicBoolean(false);
private Context mContext;
protected RequestEntity mEntity = null;
@ -80,7 +83,8 @@ public class UploadFileOperation extends RemoteOperation {
OCFile file,
boolean isInstant,
boolean forceOverwrite,
int localBehaviour) {
int localBehaviour,
Context context) {
if (account == null)
throw new IllegalArgumentException("Illegal NULL account in UploadFileOperation creation");
if (file == null)
@ -100,6 +104,7 @@ public class UploadFileOperation extends RemoteOperation {
mLocalBehaviour = localBehaviour;
mOriginalStoragePath = mFile.getStoragePath();
mOriginalFileName = mFile.getFileName();
mContext = context;
}
public Account getAccount() {
@ -199,7 +204,7 @@ public class UploadFileOperation extends RemoteOperation {
// !!!
expectedFile = new File(expectedPath);
// / check location of local file; if not the expected, copy to a
// check location of local file; if not the expected, copy to a
// temporal file before upload (if COPY is the expected behaviour)
if (!mOriginalStoragePath.equals(expectedPath) && mLocalBehaviour == FileUploader.LOCAL_BEHAVIOUR_COPY) {
@ -389,7 +394,7 @@ public class UploadFileOperation extends RemoteOperation {
* @return
*/
private String getAvailableRemotePath(WebdavClient wc, String remotePath) throws Exception {
boolean check = wc.existsFile(remotePath);
boolean check = existsFile(wc, remotePath);
if (!check) {
return remotePath;
}
@ -404,10 +409,12 @@ public class UploadFileOperation extends RemoteOperation {
int count = 2;
do {
suffix = " (" + count + ")";
if (pos >= 0)
check = wc.existsFile(remotePath + suffix + "." + extension);
else
check = wc.existsFile(remotePath + suffix);
if (pos >= 0) {
check = existsFile(wc, remotePath + suffix + "." + extension);
}
else {
check = existsFile(wc, remotePath + suffix);
}
count++;
} while (check);
@ -418,6 +425,12 @@ public class UploadFileOperation extends RemoteOperation {
}
}
private boolean existsFile(WebdavClient client, String remotePath){
ExistenceCheckRemoteOperation existsOperation = new ExistenceCheckRemoteOperation(remotePath, mContext, false);
RemoteOperationResult result = existsOperation.execute(client);
return result.isSuccess();
}
public void cancel() {
synchronized (mCancellationRequested) {
mCancellationRequested.set(true);