Don't allow dragging a folder into itself

This commit is contained in:
Daniel García committed 2016-05-26 00:09:28 +02:00
1 parent f06f79a32a
commit 36e1c35f4f
4 files changed
+30 -12

No files matched your search

@@ -39,7 +39,7 @@ public class TransferManager {
* @param target The service of the target file
* @param targetFolder The target file
*/
public void transferFile(FileService origin, ModelFile file, FileService target, ModelFile targetFolder) {
public boolean transferFile(FileService origin, ModelFile file, FileService target, ModelFile targetFolder) {
// TODO Error si el archivo ya existe
// If we don't get a target, assume the current directory
@@ -50,26 +50,33 @@ public class TransferManager {
// If both are the same services, we move the file
if (origin.getInstanceId().equals(target.getInstanceId())) {
moveOnSameService(origin, file, targetFolder);
return moveOnSameService(origin, file, targetFolder);
} else {
transferToAnotherService(origin, file, target, targetFolder);
return transferToAnotherService(origin, file, target, targetFolder);
}
}
private void moveOnSameService(FileService service, ModelFile file, ModelFile targetFolder) {
// TODO Comprobar que no intentamos mover un archivo dentro de si mismo o similar
private boolean moveOnSameService(FileService service, ModelFile file, ModelFile targetFolder) {
ModelFile commonAncestor = file.getCommonAncestor(targetFolder);
service.moveFile(file, targetFolder);
// Can't move a file inside itself
if (commonAncestor.equals(file)) {
return false;
}
boolean result = service.moveFile(file, targetFolder);
// TODO En ciertas ocasiones no recarga bien los ficheros
// EJ Tenemos la carpeta aa/bb y aa/cc
// Si arrastramos un fichero de una a otra, aparecerá en los dos lados hasta que se recargue
file.refreshFile();
targetFolder.refreshChildren();
return result;
}
private void transferToAnotherService(FileService origin, ModelFile file, FileService target, ModelFile targetFolder) {
private boolean transferToAnotherService(FileService origin, ModelFile file, FileService target, ModelFile targetFolder) {
Thread thread = new Thread(() -> {
// Create the file trasfer, add the listener and notify the start of the download
FileTransfer transfer = origin.sendFile(file);
@@ -91,6 +98,8 @@ public class TransferManager {
thread.setDaemon(true);
thread.start();
return true;
}
/**
@@ -106,7 +115,7 @@ public class TransferManager {
* Add a listener for all the downloads. For each transfer in progress, this listener will be called for every 1% transfered.
* The parameters are the file being transfered and the progress of the transfer (0-100)
*
* @param otherListener
* @param otherListener The listener to add
*/
public void addProgressListener(BiConsumer<ModelFile, Double> otherListener) {
if (listener == null)
@@ -4,8 +4,11 @@ import com.cloudmanager.core.api.service.FileService;
import com.cloudmanager.core.managers.ServiceManager;
import com.cloudmanager.core.managers.TransferManager;
import com.cloudmanager.core.model.ModelFile;
import com.cloudmanager.gui.util.ResourceManager;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.input.*;
import java.util.HashMap;
@@ -80,7 +83,7 @@ public class DraggableFileHandler {
// TODO Suppport folder transfers
if (draggedFile.isFolder() && !draggedServiceId.equals(targetServiceId)) {
// Currently we don't support folder trasfers
// Currently we don't support folder transfers
dragEvent.consume();
return;
}
@@ -113,7 +116,11 @@ public class DraggableFileHandler {
FileService draggedService = ServiceManager.getInstance().getServiceSettings(draggedServiceId).getService();
FileService targetService = ServiceManager.getInstance().getServiceSettings(targetServiceId).getService();
TransferManager.get().transferFile(draggedService, draggedFile, targetService, targetFolder.get());
boolean result = TransferManager.get().transferFile(draggedService, draggedFile, targetService, targetFolder.get());
if (!result) {
new Alert(AlertType.WARNING, ResourceManager.getString("error_moving_file")).show();
}
}
draggedFiles.remove(fileId);
@@ -46,4 +46,5 @@ remove_success=File deleted successfully.
remove_error=There was an error removing the file.
rename_success=File renamed successfully.
rename_error=There was an error renaming the file.
name_cant_be_empty=Name can't be empty.
name_cant_be_empty=Name can't be empty.
error_moving_file=There was an error moving the file.
@@ -46,4 +46,5 @@ remove_success=Archivo borrado con
remove_error=Ha sucedido un error al eliminar el archivo.
rename_success=Archivo renombrado con éxito.
rename_error=Ha sucedido un error al renombrar el archivo.
name_cant_be_empty=El nombre no puede estar vacío.
name_cant_be_empty=El nombre no puede estar vacío.
error_moving_file=Ha sucedido un error al mover el archivo.