mirror of
https://github.com/nextcloud/android.git
synced 2024-11-27 17:46:37 +03:00
OC-2332: rewrite getAvailableRemotePath from UpdateFileOperation, using ExistenceCeheckRemoteOperation instead of WebClient#existsFile
This commit is contained in:
parent
2246c27a8b
commit
d38a69abc1
3 changed files with 26 additions and 11 deletions
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue