mirror of
https://github.com/xfarrow/guify.git
synced 2025-02-17 12:30:45 +01:00
Fix #3
This commit is contained in:
parent
7be8f4a2e1
commit
4325c59a40
@ -5,8 +5,8 @@ import com.jcraft.jsch.SftpProgressMonitor;
|
||||
// Documentation: https://epaul.github.io/jsch-documentation/javadoc/com/jcraft/jsch/SftpProgressMonitor.html
|
||||
public class GuifySftpProgressMonitor implements SftpProgressMonitor {
|
||||
|
||||
TransferProgress transferProgress = null;
|
||||
|
||||
private TransferProgress transferProgress = null;
|
||||
|
||||
@Override
|
||||
public boolean count(long bytes) {
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
// In loving memory of L.B. and E.B.
|
||||
|
||||
package code;
|
||||
|
||||
import java.awt.EventQueue;
|
||||
@ -19,7 +21,4 @@ public class Main {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// In loving memory of L.B. and E.B.
|
||||
|
@ -8,6 +8,8 @@ import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
import java.util.Vector;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import com.jcraft.jsch.*;
|
||||
import com.jcraft.jsch.ChannelSftp.LsEntry;
|
||||
@ -173,7 +175,7 @@ public class SshEngine {
|
||||
* Uploads a file from the local machine to the remote host. Executed
|
||||
* asynchronously.
|
||||
*/
|
||||
public static void uploadFile(File fileToUpload, String remoteDirectory) {
|
||||
public static void uploadFile(File fileToUpload, String remoteDirectory, Consumer<String> uploadCompletedEvent) {
|
||||
// We execute the lengthy and time-consuming operation on a different
|
||||
// thread instead of the Event Dispatch Thread.
|
||||
// We use SwingWorker so any GUI changes requested by this thread will
|
||||
@ -190,6 +192,9 @@ public class SshEngine {
|
||||
fileToUpload.getName());
|
||||
channelSftp.put(fileToUpload.getAbsolutePath(), remotePath,
|
||||
new GuifySftpProgressMonitor());
|
||||
|
||||
// Fire the upload completed event
|
||||
uploadCompletedEvent.accept(remoteDirectory);
|
||||
System.out.println("File: " + fileToUpload.getAbsolutePath()
|
||||
+ " uploaded to remote path: " + remotePath);
|
||||
} catch (SftpException sftpex) {
|
||||
@ -214,7 +219,7 @@ public class SshEngine {
|
||||
* will be uploaded in
|
||||
*/
|
||||
public static void uploadDirectoriesRecursively(File directory,
|
||||
String remoteDirectory) {
|
||||
String remoteDirectory, Consumer<String> uploadCompletedEvent) {
|
||||
// We execute the lengthy and time-consuming operation on a different
|
||||
// thread instead of the Event Dispatch Thread.
|
||||
// We use SwingWorker so any GUI changes requested by this thread will
|
||||
@ -228,6 +233,9 @@ public class SshEngine {
|
||||
channelSftp.connect();
|
||||
uploadDirectoriesRecursively_aux(channelSftp, directory,
|
||||
remoteDirectory);
|
||||
|
||||
// Fire the upload completed event
|
||||
uploadCompletedEvent.accept(remoteDirectory);
|
||||
} catch (SftpException sftpex) {
|
||||
// TODO maybe no permissions
|
||||
} catch (Exception e) {
|
||||
|
@ -15,6 +15,9 @@ import code.SshEngine;
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import javax.swing.SwingUtilities;
|
||||
public class DesktopController {
|
||||
|
||||
/*
|
||||
@ -159,13 +162,20 @@ public class DesktopController {
|
||||
}
|
||||
}
|
||||
|
||||
// Once the upload has completed, fire this event (draw the desktop).
|
||||
// The parameter is the remote path in which the file(s) are uploaded
|
||||
// into
|
||||
Consumer<String> uploadCompletedEvent = s -> this
|
||||
.uploadCompletedEvent(s);
|
||||
|
||||
for (File file : selectedFiles) {
|
||||
SshEngine.uploadFile(file, this.getCurrentWorkingDirectory());
|
||||
SshEngine.uploadFile(file, this.getCurrentWorkingDirectory(),
|
||||
uploadCompletedEvent);
|
||||
}
|
||||
|
||||
for (File directory : selectedDirectories) {
|
||||
SshEngine.uploadDirectoriesRecursively(directory,
|
||||
this.getCurrentWorkingDirectory());
|
||||
this.getCurrentWorkingDirectory(), uploadCompletedEvent);
|
||||
}
|
||||
}
|
||||
|
||||
@ -449,6 +459,34 @@ public class DesktopController {
|
||||
return title.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Event that gets fired once
|
||||
*/
|
||||
public void uploadCompletedEvent(String path) {
|
||||
|
||||
if (!path.equals(getCurrentWorkingDirectory())) {
|
||||
// Redraw the desktop only if necessary
|
||||
return;
|
||||
}
|
||||
|
||||
// This method gets called from outside the Event
|
||||
// Dispatch Thread and we know it, but we write this condition
|
||||
// because you never know when this method may be helpful in
|
||||
// the future, forgetting to check this condition.
|
||||
if (!SwingUtilities.isEventDispatchThread()) {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
uploadCompletedEvent(path);
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// Draw the UI again
|
||||
frame.drawComponentsForDirectory(path);
|
||||
}
|
||||
|
||||
/*
|
||||
* ========== END Other ==========
|
||||
*/
|
||||
|
@ -165,16 +165,13 @@ public class Desktop extends JFrame implements IDesktopFrame {
|
||||
|
||||
((DesktopController) controller)
|
||||
.uploadToRemoteServer(droppedFileArray);
|
||||
drawComponentsForDirectory(
|
||||
((DesktopController) controller)
|
||||
.getCurrentWorkingDirectory());
|
||||
|
||||
} catch (UnsupportedFlavorException | IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
dtde.dropComplete(true);
|
||||
desktopPanel.setBorder(null);
|
||||
desktopPanel.setBorder(null); // remove the blue line
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -959,8 +956,6 @@ public class Desktop extends JFrame implements IDesktopFrame {
|
||||
&& fileChooser.getSelectedFiles().length > 0) {
|
||||
controller.uploadToRemoteServer(
|
||||
fileChooser.getSelectedFiles());
|
||||
drawComponentsForDirectory(
|
||||
controller.getCurrentWorkingDirectory());
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user