X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/c0b85157a9c44a6374e749984e8a55d45868998f..da876348045ca0b0c66e79ca2a7b7dd7d141cad7:/src/com/owncloud/android/operations/RenameFileOperation.java diff --git a/src/com/owncloud/android/operations/RenameFileOperation.java b/src/com/owncloud/android/operations/RenameFileOperation.java index a007af2b..2fdc8f18 100644 --- a/src/com/owncloud/android/operations/RenameFileOperation.java +++ b/src/com/owncloud/android/operations/RenameFileOperation.java @@ -1,5 +1,5 @@ /* ownCloud Android client application - * Copyright (C) 2012-2013 ownCloud Inc. + * Copyright (C) 2012-2014 ownCloud Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -20,50 +20,44 @@ package com.owncloud.android.operations; import java.io.File; import java.io.IOException; -import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.lib.common.OwnCloudClient; -import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; +import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.files.RenameRemoteFileOperation; +import com.owncloud.android.operations.common.SyncOperation; import com.owncloud.android.utils.FileStorageUtils; -import com.owncloud.android.utils.Log_OC; - -import android.accounts.Account; /** * Remote operation performing the rename of a remote file (or folder?) in the ownCloud server. * * @author David A. Velasco + * @author masensio */ -public class RenameFileOperation extends RemoteOperation { +public class RenameFileOperation extends SyncOperation { private static final String TAG = RenameFileOperation.class.getSimpleName(); - private OCFile mFile; - private Account mAccount; + private String mRemotePath; private String mNewName; private String mNewRemotePath; - private FileDataStorageManager mStorageManager; + /** * Constructor * - * @param file OCFile instance describing the remote file or folder to rename + * @param remotePath RemotePath of the OCFile instance describing the remote file or folder to rename * @param account OwnCloud account containing the remote file * @param newName New name to set as the name of file. - * @param storageManager Reference to the local database corresponding to the account where the file is contained. */ - public RenameFileOperation(OCFile file, Account account, String newName, FileDataStorageManager storageManager) { - mFile = file; - mAccount = account; + public RenameFileOperation(String remotePath, String newName) { + mRemotePath = remotePath; mNewName = newName; mNewRemotePath = null; - mStorageManager = storageManager; } public OCFile getFile() { @@ -80,6 +74,8 @@ public class RenameFileOperation extends RemoteOperation { protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result = null; + mFile = getStorageManager().getFileByPath(mRemotePath); + // check if the new name is valid in the local file system try { if (!isValidNewName()) { @@ -92,8 +88,8 @@ public class RenameFileOperation extends RemoteOperation { mNewRemotePath += OCFile.PATH_SEPARATOR; } - // ckeck local overwrite - if (mStorageManager.getFileByPath(mNewRemotePath) != null) { + // check local overwrite + if (getStorageManager().getFileByPath(mNewRemotePath) != null) { return new RemoteOperationResult(ResultCode.INVALID_OVERWRITE); } @@ -103,7 +99,8 @@ public class RenameFileOperation extends RemoteOperation { if (result.isSuccess()) { if (mFile.isFolder()) { - saveLocalDirectory(); + getStorageManager().moveLocalFile(mFile, mNewRemotePath, parent); + //saveLocalDirectory(); } else { saveLocalFile(); @@ -118,34 +115,30 @@ public class RenameFileOperation extends RemoteOperation { return result; } - - private void saveLocalDirectory() { - mStorageManager.moveFolder(mFile, mNewRemotePath); - String localPath = FileStorageUtils.getDefaultSavePathFor(mAccount.name, mFile); - File localDir = new File(localPath); - if (localDir.exists()) { - localDir.renameTo(new File(FileStorageUtils.getSavePath(mAccount.name) + mNewRemotePath)); - // TODO - if renameTo fails, children files that are already down will result unlinked - } - } - private void saveLocalFile() { mFile.setFileName(mNewName); // try to rename the local copy of the file if (mFile.isDown()) { - File f = new File(mFile.getStoragePath()); + String oldPath = mFile.getStoragePath(); + File f = new File(oldPath); String parentStoragePath = f.getParent(); if (!parentStoragePath.endsWith(File.separator)) parentStoragePath += File.separator; if (f.renameTo(new File(parentStoragePath + mNewName))) { - mFile.setStoragePath(parentStoragePath + mNewName); + String newPath = parentStoragePath + mNewName; + mFile.setStoragePath(newPath); + + // notify MediaScanner about removed file - TODO really works? + getStorageManager().triggerMediaScan(oldPath); + // notify to scan about new file + getStorageManager().triggerMediaScan(newPath); } // else - NOTHING: the link to the local file is kept although the local name can't be updated // TODO - study conditions when this could be a problem } - mStorageManager.saveFile(mFile); + getStorageManager().saveFile(mFile); } /** @@ -165,7 +158,7 @@ public class RenameFileOperation extends RemoteOperation { */ private boolean isValidNewName() throws IOException { // check tricky names - if (mNewName == null || mNewName.length() <= 0 || mNewName.contains(File.separator) || mNewName.contains("%")) { + if (mNewName == null || mNewName.length() <= 0 || mNewName.contains(File.separator)) { return false; } // create a test file