зеркало из https://github.com/nextcloud/android.git
This commit is contained in:
Родитель
590e617c8a
Коммит
cd0bebf45e
|
@ -1 +1,2 @@
|
|||
include ':nextcloud-android-library'
|
||||
//include ':'
|
||||
include 'nextcloud-android-library'
|
||||
|
|
|
@ -396,50 +396,7 @@ public class UploadFileOperation extends SyncOperation {
|
|||
File originalFile = new File(mOriginalStoragePath);
|
||||
File expectedFile = null;
|
||||
FileLock fileLock = null;
|
||||
long size = 0;
|
||||
|
||||
boolean metadataExists = false;
|
||||
String token = null;
|
||||
|
||||
ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(getContext().getContentResolver());
|
||||
|
||||
String privateKey = arbitraryDataProvider.getValue(getAccount().name, EncryptionUtils.PRIVATE_KEY);
|
||||
String publicKey = arbitraryDataProvider.getValue(getAccount().name, EncryptionUtils.PUBLIC_KEY);
|
||||
|
||||
/// check the existence of the parent folder for the file to upload
|
||||
String remoteParentPath = new File(getRemotePath()).getParent();
|
||||
remoteParentPath = remoteParentPath.endsWith(OCFile.PATH_SEPARATOR) ?
|
||||
remoteParentPath : remoteParentPath + OCFile.PATH_SEPARATOR;
|
||||
RemoteOperationResult result = grantFolderExistence(remoteParentPath, client);
|
||||
|
||||
if (!result.isSuccess()) {
|
||||
return result;
|
||||
}
|
||||
|
||||
OCFile parent = getStorageManager().getFileByPath(remoteParentPath);
|
||||
mFile.setParentId(parent.getFileId());
|
||||
|
||||
if (parent.isEncrypted()) {
|
||||
Log_OC.d(TAG, "encrypted upload");
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
return encryptedUpload(client, parent);
|
||||
} else {
|
||||
Log_OC.e(TAG, "Encrypted upload on old Android API");
|
||||
return new RemoteOperationResult(ResultCode.OLD_ANDROID_API);
|
||||
}
|
||||
} else {
|
||||
Log_OC.d(TAG, "normal upload");
|
||||
return normalUpload(client);
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
|
||||
private RemoteOperationResult encryptedUpload(OwnCloudClient client, OCFile parentFile) {
|
||||
RemoteOperationResult result = null;
|
||||
File temporalFile = null;
|
||||
File originalFile = new File(mOriginalStoragePath);
|
||||
File expectedFile = null;
|
||||
FileLock fileLock = null;
|
||||
long size;
|
||||
|
||||
boolean metadataExists = false;
|
||||
String token = null;
|
||||
|
@ -663,15 +620,15 @@ public class UploadFileOperation extends SyncOperation {
|
|||
// }
|
||||
|
||||
result = mUploadOperation.execute(client);
|
||||
if (result == null || result.isSuccess() && mUploadOperation != null) {
|
||||
result = mUploadOperation.execute(client);
|
||||
// if (result == null || result.isSuccess() && mUploadOperation != null) {
|
||||
// result = mUploadOperation.execute(client);
|
||||
|
||||
/// move local temporal file or original file to its corresponding
|
||||
// location in the Nextcloud local folder
|
||||
if (!result.isSuccess() && result.getHttpCode() == HttpStatus.SC_PRECONDITION_FAILED) {
|
||||
result = new RemoteOperationResult(ResultCode.SYNC_CONFLICT);
|
||||
}
|
||||
}
|
||||
// }
|
||||
|
||||
if (result.isSuccess()) {
|
||||
// upload metadata
|
||||
|
@ -720,15 +677,8 @@ public class UploadFileOperation extends SyncOperation {
|
|||
} finally {
|
||||
mUploadStarted.set(false);
|
||||
|
||||
// unlock file
|
||||
if (token != null) {
|
||||
UnlockFileOperation unlockFileOperation = new UnlockFileOperation(parentFile.getLocalId(), token);
|
||||
RemoteOperationResult unlockFileOperationResult = unlockFileOperation.execute(client);
|
||||
|
||||
if (!unlockFileOperationResult.isSuccess()) {
|
||||
Log_OC.e(TAG, "Failed to unlock " + parentFile.getLocalId());
|
||||
}
|
||||
}
|
||||
// unlock folder
|
||||
unlockFolder(parentFile, client, token);
|
||||
|
||||
if (fileLock != null) {
|
||||
try {
|
||||
|
@ -765,66 +715,29 @@ public class UploadFileOperation extends SyncOperation {
|
|||
}
|
||||
}
|
||||
|
||||
switch (mLocalBehaviour) {
|
||||
case FileUploader.LOCAL_BEHAVIOUR_FORGET:
|
||||
String temporalPath = FileStorageUtils.getTemporalPath(mAccount.name) + mFile.getRemotePath();
|
||||
if (mOriginalStoragePath.equals(temporalPath)) {
|
||||
// delete local file is was pre-copied in temporary folder (see .ui.helpers.UriUploader)
|
||||
temporalFile = new File(temporalPath);
|
||||
temporalFile.delete();
|
||||
// TODO on failure store token
|
||||
if (result.isSuccess()) {
|
||||
handleSuccessfulUpload(temporalFile, expectedFile, originalFile, client);
|
||||
unlockFolder(parentFile, client, token);
|
||||
|
||||
} else if (result.getCode() == ResultCode.SYNC_CONFLICT) {
|
||||
getStorageManager().saveConflict(mFile, mFile.getEtagInConflict());
|
||||
}
|
||||
mFile.setStoragePath("");
|
||||
saveUploadedFile(client);
|
||||
break;
|
||||
|
||||
case FileUploader.LOCAL_BEHAVIOUR_DELETE:
|
||||
Log_OC.d(TAG, "Delete source file");
|
||||
|
||||
originalFile.delete();
|
||||
getStorageManager().deleteFileInMediaScan(originalFile.getAbsolutePath());
|
||||
saveUploadedFile(client);
|
||||
break;
|
||||
|
||||
case FileUploader.LOCAL_BEHAVIOUR_COPY:
|
||||
if (temporalFile != null) {
|
||||
try {
|
||||
move(temporalFile, expectedFile);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
mFile.setStoragePath(expectedFile.getAbsolutePath());
|
||||
saveUploadedFile(client);
|
||||
FileDataStorageManager.triggerMediaScan(expectedFile.getAbsolutePath());
|
||||
break;
|
||||
|
||||
case FileUploader.LOCAL_BEHAVIOUR_MOVE:
|
||||
|
||||
String expectedPath = FileStorageUtils.getDefaultSavePathFor(mAccount.name, mFile);
|
||||
expectedFile = new File(expectedPath);
|
||||
|
||||
try {
|
||||
move(originalFile, expectedFile);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
getStorageManager().deleteFileInMediaScan(originalFile.getAbsolutePath());
|
||||
mFile.setStoragePath(expectedFile.getAbsolutePath());
|
||||
saveUploadedFile(client);
|
||||
FileDataStorageManager.triggerMediaScan(expectedFile.getAbsolutePath());
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO
|
||||
// if (result.isSuccess()) {
|
||||
// handleSuccessfulUpload(temporalFile, expectedFile, originalFile, client);
|
||||
// } else if (result.getCode() == ResultCode.SYNC_CONFLICT) {
|
||||
// getStorageManager().saveConflict(mFile, mFile.getEtagInConflict());
|
||||
// }
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private void unlockFolder(OCFile parentFolder, OwnCloudClient client, String token) {
|
||||
if (token != null) {
|
||||
UnlockFileOperation unlockFileOperation = new UnlockFileOperation(parentFolder.getLocalId(), token);
|
||||
RemoteOperationResult unlockFileOperationResult = unlockFileOperation.execute(client);
|
||||
|
||||
if (!unlockFileOperationResult.isSuccess()) {
|
||||
Log_OC.e(TAG, "Failed to unlock " + parentFolder.getLocalId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private RemoteOperationResult checkConditions(File originalFile) {
|
||||
if (Device.getNetworkType(mContext).equals(JobRequest.NetworkType.ANY) ||
|
||||
ConnectivityUtils.isInternetWalled(mContext)) {
|
||||
|
|
|
@ -471,6 +471,7 @@ public class EncryptionUtils {
|
|||
|
||||
String[] strings = string.split(ivDelimiter);
|
||||
String cipherString = strings[0];
|
||||
|
||||
byte[] iv = new IvParameterSpec(decodeStringToBase64Bytes(strings[1])).getIV();
|
||||
|
||||
Key key = new SecretKeySpec(encryptionKeyBytes, "AES");
|
||||
|
|
|
@ -268,8 +268,7 @@
|
|||
<string name="favorite_real">Set as favorite</string>
|
||||
<string name="unset_favorite_real">Unset favorite</string>
|
||||
<string name="favorite_switch">Available offline</string>
|
||||
<string name="encrypted">Set as encrypted</string>
|
||||
<string name="unset_encrypted">Unset encryption</string>
|
||||
<string name="favorite_switch">Available offline</string>
|
||||
<string name="encrypted">Set as encrypted</string>
|
||||
<string name="unset_encrypted">Unset encryption</string>
|
||||
<string name="common_rename">Rename</string>
|
||||
|
|
Загрузка…
Ссылка в новой задаче