mirror of
https://github.com/nextcloud/android.git
synced 2024-11-27 08:58:30 +03:00
FIX OC-2101: App crash when renaming a folder while the server is down or without internet connection
This commit is contained in:
parent
6e092bf235
commit
f780062616
3 changed files with 19 additions and 15 deletions
|
@ -151,7 +151,7 @@ public class RenameFileTest extends ActivityInstrumentationTestCase2<TestActivit
|
|||
RemoteOperationResult result = mActivity.renameFile(mNewFolderName, mNewFolderPath, mOldFolderName, mOldFolderPath);
|
||||
assertTrue(result.isSuccess());
|
||||
|
||||
result = mActivity.renameFile(mNewFileName, mNewFilePath, mOldFileName, mOldFilePath);
|
||||
result = mActivity.renameFile(mNewFileName + mFileExtension, mNewFilePath + mFileExtension, mOldFileName, mOldFilePath);
|
||||
assertTrue(result.isSuccess());
|
||||
}
|
||||
|
||||
|
|
|
@ -66,8 +66,13 @@ public class RenameRemoteFileOperation extends RemoteOperation {
|
|||
return new RemoteOperationResult(ResultCode.OK);
|
||||
}
|
||||
|
||||
// check if a file with the new name already exists
|
||||
if (client.existsFile(mNewRemotePath)) {
|
||||
return new RemoteOperationResult(ResultCode.INVALID_OVERWRITE);
|
||||
}
|
||||
|
||||
move = new LocalMoveMethod( client.getBaseUri() + WebdavUtils.encodePath(mOldRemotePath),
|
||||
client.getBaseUri() + WebdavUtils.encodePath(mNewRemotePath));
|
||||
client.getBaseUri() + WebdavUtils.encodePath(mNewRemotePath));
|
||||
int status = client.executeMethod(move, RENAME_READ_TIMEOUT, RENAME_CONNECTION_TIMEOUT);
|
||||
|
||||
move.getResponseBodyAsString(); // exhaust response, although not interesting
|
||||
|
|
|
@ -93,24 +93,23 @@ public class RenameFileOperation extends RemoteOperation {
|
|||
mNewRemotePath += OCFile.PATH_SEPARATOR;
|
||||
}
|
||||
|
||||
// check if a file with the new name already exists
|
||||
if (client.existsFile(mNewRemotePath) || // remote check could fail by network failure. by indeterminate behavior of HEAD for folders ...
|
||||
mStorageManager.getFileByPath(mNewRemotePath) != null) { // ... so local check is convenient
|
||||
// ckeck local overwrite
|
||||
if (mStorageManager.getFileByPath(mNewRemotePath) != null) {
|
||||
return new RemoteOperationResult(ResultCode.INVALID_OVERWRITE);
|
||||
}
|
||||
|
||||
RenameRemoteFileOperation operation = new RenameRemoteFileOperation(mFile.getFileName(), mFile.getRemotePath(), mNewName,
|
||||
mNewRemotePath);
|
||||
result = operation.execute(client);
|
||||
|
||||
RenameRemoteFileOperation operation = new RenameRemoteFileOperation(mFile.getFileName(), mFile.getRemotePath(), mNewName,
|
||||
mNewRemotePath);
|
||||
result = operation.execute(client);
|
||||
|
||||
if (result.isSuccess()) {
|
||||
if (mFile.isFolder()) {
|
||||
saveLocalDirectory();
|
||||
if (result.isSuccess()) {
|
||||
if (mFile.isFolder()) {
|
||||
saveLocalDirectory();
|
||||
|
||||
} else {
|
||||
saveLocalFile();
|
||||
} else {
|
||||
saveLocalFile();
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (HttpException e) {
|
||||
Log_OC.e(TAG, "Rename " + mFile.getRemotePath() + " to " + ((mNewRemotePath==null) ? mNewName : mNewRemotePath) + ": " +
|
||||
((result!= null) ? result.getLogMessage() : ""), e);
|
||||
|
|
Loading…
Reference in a new issue