mirror of
https://github.com/dani-garcia/cloud-manager.git
synced 2026-10-23 03:26:45 +09:00
Don't allow dragging a folder into itself
This commit is contained in:
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.
|
||||
Reference in new issue
Block a user