X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/b83064eb8326c38d7c7e4a154abb1becbda72d48..b59784af890d90ccca1674ea176f9171bd60198b:/src/com/owncloud/android/files/services/FileUploader.java diff --git a/src/com/owncloud/android/files/services/FileUploader.java b/src/com/owncloud/android/files/services/FileUploader.java index 958036a7..31c9d675 100644 --- a/src/com/owncloud/android/files/services/FileUploader.java +++ b/src/com/owncloud/android/files/services/FileUploader.java @@ -38,7 +38,6 @@ import com.owncloud.android.operations.RemoteOperationResult; import com.owncloud.android.operations.UploadFileOperation; import com.owncloud.android.ui.activity.FileDetailActivity; import com.owncloud.android.ui.fragment.FileDetailFragment; -import com.owncloud.android.utils.FileStorageUtils; import com.owncloud.android.utils.OwnCloudVersion; import eu.alefzero.webdav.OnDatatransferProgressListener; @@ -87,6 +86,11 @@ public class FileUploader extends Service implements OnDatatransferProgressListe public static final String KEY_UPLOAD_TYPE = "UPLOAD_TYPE"; public static final String KEY_FORCE_OVERWRITE = "KEY_FORCE_OVERWRITE"; public static final String KEY_INSTANT_UPLOAD = "INSTANT_UPLOAD"; + public static final String KEY_LOCAL_BEHAVIOUR = "BEHAVIOUR"; + + public static final int LOCAL_BEHAVIOUR_COPY = 0; + public static final int LOCAL_BEHAVIOUR_MOVE = 1; + public static final int LOCAL_BEHAVIOUR_FORGET = 2; public static final int UPLOAD_SINGLE_FILE = 0; public static final int UPLOAD_MULTIPLE_FILES = 1; @@ -199,7 +203,8 @@ public class FileUploader extends Service implements OnDatatransferProgressListe FileDataStorageManager storageManager = new FileDataStorageManager(account, getContentResolver()); boolean forceOverwrite = intent.getBooleanExtra(KEY_FORCE_OVERWRITE, false); - boolean isInstant = intent.getBooleanExtra(KEY_INSTANT_UPLOAD, false); + boolean isInstant = intent.getBooleanExtra(KEY_INSTANT_UPLOAD, false); + int localAction = intent.getIntExtra(KEY_LOCAL_BEHAVIOUR, LOCAL_BEHAVIOUR_COPY); boolean fixed = false; if (isInstant) { fixed = checkAndFixInstantUploadDirectory(storageManager); // MUST be done BEFORE calling obtainNewOCFileToUpload @@ -238,9 +243,9 @@ public class FileUploader extends Service implements OnDatatransferProgressListe for (int i=0; i < files.length; i++) { uploadKey = buildRemoteName(account, files[i].getRemotePath()); if (chunked) { - newUpload = new ChunkedUploadFileOperation(account, files[i], isInstant, forceOverwrite); + newUpload = new ChunkedUploadFileOperation(account, files[i], isInstant, forceOverwrite, localAction); } else { - newUpload = new UploadFileOperation(account, files[i], isInstant, forceOverwrite); + newUpload = new UploadFileOperation(account, files[i], isInstant, forceOverwrite, localAction); } if (fixed && i==0) { newUpload.setRemoteFolderToBeCreated(); @@ -458,42 +463,21 @@ public class FileUploader extends Service implements OnDatatransferProgressListe } catch (Exception e) { result = new RemoteOperationResult(e); - Log.i(TAG, "Update: synchronizing properties for uploaded " + mCurrentUpload.getRemotePath() + ": " + result.getLogMessage(), e); + Log.e(TAG, "Update: synchronizing properties for uploaded " + mCurrentUpload.getRemotePath() + ": " + result.getLogMessage(), e); } finally { if (propfind != null) propfind.releaseConnection(); } - + /// maybe this would be better as part of UploadFileOperation... or maybe all this method if (mCurrentUpload.wasRenamed()) { OCFile oldFile = mCurrentUpload.getOldFile(); - if (!oldFile.fileExists()) { - // just a name coincidence - file.setStoragePath(oldFile.getStoragePath()); - - } else { - // conflict resolved with 'Keep both' by the user - File localFile = new File(oldFile.getStoragePath()); - File newLocalFile = new File(FileStorageUtils.getDefaultSavePathFor(mCurrentUpload.getAccount().name, file)); - boolean renameSuccessed = localFile.renameTo(newLocalFile); - if (renameSuccessed) { - file.setStoragePath(newLocalFile.getAbsolutePath()); - - } else { - // poor solution - Log.d(TAG, "DAMN IT: local rename failed after uploading a file with a new name already existing both in the remote account and the local database (should be due to a conflict solved with 'keep both'"); - file.setStoragePath(null); - // not so fine: - // - local file will be kept there as 'trash' until is download (and overwritten) again from the server; - // - user will see as 'not down' a file that was just upload - // BUT: - // - no loss of data happened - // - when the user downloads again the renamed and original file from the server, local file names and contents will be correctly synchronized with names and contents in server - } + if (oldFile.fileExists()) { oldFile.setStoragePath(null); mStorageManager.saveFile(oldFile); - } + + } // else: it was just an automatic renaming due to a name coincidence; nothing else is needed, the storagePath is right in the instance returned by mCurrentUpload.getFile() } mStorageManager.saveFile(file);