From ceb88beda8d010ac11a35bfe3db1ca49fdcea712 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 3 Sep 2015 11:22:26 +0200 Subject: [client] Add "open folder" button to download panel --- .../openslx/dozmod/filetransfer/TransferTask.java | 4 +++ .../openslx/dozmod/gui/activity/DownloadPanel.java | 37 ++++++++++++++++++---- .../openslx/dozmod/gui/activity/TransferPanel.java | 4 ++- .../openslx/dozmod/gui/helper/QFileChooser.java | 2 +- .../org/openslx/dozmod/thrift/ThriftActions.java | 8 ++--- .../java/org/openslx/dozmod/util/OpenLinks.java | 27 ++++++++++++++-- 6 files changed, 67 insertions(+), 15 deletions(-) diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java index fabf1d66..056e5f71 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java @@ -235,6 +235,10 @@ public abstract class TransferTask implements Runnable { } } + public File getFile() { + return localFile; + } + protected abstract static class TransferThread extends Thread { @Override public abstract void run(); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java index 31946abd..f2434b1b 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java @@ -3,9 +3,14 @@ package org.openslx.dozmod.gui.activity; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import javax.swing.JButton; + +import org.openslx.bwlp.thrift.iface.TransferState; import org.openslx.dozmod.filetransfer.DownloadTask; +import org.openslx.dozmod.filetransfer.TransferEvent; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.helper.MessageType; +import org.openslx.dozmod.util.OpenLinks; @SuppressWarnings("serial") public class DownloadPanel extends TransferPanel { @@ -14,8 +19,13 @@ public class DownloadPanel extends TransferPanel { private final DownloadTask download; + private final JButton btnOpenFolder; + public DownloadPanel(String displayName, String diskFile, DownloadTask download) { super(download, displayName, diskFile); + btnOpenFolder = new JButton("Ordner öffnen"); + btnOpenFolder.setEnabled(false); + header.add(btnOpenFolder, 6); btnClose.addActionListener(new ButtonAction()); this.download = download; download.addListener(this); @@ -24,14 +34,27 @@ public class DownloadPanel extends TransferPanel { private class ButtonAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { - if (!download.isCanceled()) { - if (!Gui.showMessageBox(panel, "Wollen Sie diesen Transfer wirklich abbrechen?", - MessageType.QUESTION_YESNO, null, null)) - return; - download.cancel(); + if (e.getSource() == btnClose) { + if (!download.isCanceled()) { + if (!Gui.showMessageBox(panel, "Wollen Sie diesen Transfer wirklich abbrechen?", + MessageType.QUESTION_YESNO, null, null)) + return; + download.cancel(); + } + download.removeListener(panel); + close(); + } else if (e.getSource() == btnOpenFolder) { + OpenLinks.openLocal(download.getFile().getAbsoluteFile().getParentFile()); } - download.removeListener(panel); - close(); } } + + @Override + public void update(final TransferEvent event) { + super.update(event); + if (event.state == TransferState.FINISHED) { + btnOpenFolder.setEnabled(true); + } + } + } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java index 96171e6d..cbb0fd2f 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java @@ -39,13 +39,15 @@ public abstract class TransferPanel extends ActivityPanel implements TransferEve private final Color defaultLabelColor; + protected final JPanel header; + private int errorCountdown = 0; public TransferPanel(TransferTask transfer, String displayName, String fileName) { setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); // Header: [status] VM-Name ---- fileName [Button] - JPanel header = new JPanel(); + header = new JPanel(); header.setLayout(new BoxLayout(header, BoxLayout.LINE_AXIS)); lblStatus = new QLabel("[init]"); header.add(lblStatus); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/QFileChooser.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/QFileChooser.java index 5c2cf974..b1e301ce 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/QFileChooser.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/QFileChooser.java @@ -15,7 +15,7 @@ public class QFileChooser extends JFileChooser { // Ugly hack to get a prettier file chooser with GTK LookAndFeel old = UIManager.getLookAndFeel(); - if (old == null || !old.getName().toLowerCase().contains("gtk")) { + if (dirMode || old == null || !old.getName().toLowerCase().contains("gtk")) { old = null; } else { try { diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java index 6c1d1a58..2900ee20 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java @@ -406,10 +406,10 @@ public class ThriftActions { final File tmpDiskFile = new File(destDir.getAbsolutePath(), VmWrapper.generateFilename(imageName, null) + ".part"); - if (tmpDiskFile.exists()) { - boolean ret = Gui.showMessageBox(frame, "Datei '" + tmpDiskFile.getAbsolutePath() - + "' existiert bereits, wollen Sie sie überschreiben?", MessageType.QUESTION_YESNO, - LOGGER, null); + if (destDir.exists()) { + boolean ret = Gui.showMessageBox(frame, "Verzeichnis '" + destDir.getAbsolutePath() + + "' existiert bereits, wollen Sie die VM darin überschreiben?", + MessageType.QUESTION_YESNO, LOGGER, null); if (!ret) { // user aborted if (callback != null) diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/util/OpenLinks.java b/dozentenmodul/src/main/java/org/openslx/dozmod/util/OpenLinks.java index 0819fb1f..0443c2cf 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/util/OpenLinks.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/util/OpenLinks.java @@ -1,6 +1,7 @@ package org.openslx.dozmod.util; import java.awt.Desktop; +import java.io.File; import java.net.URI; import java.net.URLEncoder; @@ -17,8 +18,10 @@ public class OpenLinks { public static enum Link { FAQ("http://bwlehrpool.hs-offenburg.de"), - VMWARE("https://my.vmware.com/de/web/vmware/free#desktop_end_user_computing/vmware_player/6_0%7CPLAYER-603%7Cproduct_downloads"), - INTRO("http://www.hs-offenburg.de/fileadmin/Einrichtungen/hrz/Projekte/bwLehrpool/3_bwLehrpool_-_Image_einbinden_und_starten.pdf"); + VMWARE( + "https://my.vmware.com/de/web/vmware/free#desktop_end_user_computing/vmware_player/6_0%7CPLAYER-603%7Cproduct_downloads"), + INTRO( + "http://www.hs-offenburg.de/fileadmin/Einrichtungen/hrz/Projekte/bwLehrpool/3_bwLehrpool_-_Image_einbinden_und_starten.pdf"); private final URI uri; @@ -47,6 +50,26 @@ public class OpenLinks { return false; } + public static boolean openLocal(File path) { + try { + desktop.open(path); + return true; + } catch (Exception e) { + LOGGER.error("Got exception in openLocal: ", e); + } + try { + int exitCode = Runtime.getRuntime() + .exec(new String[] { "xdg-open", path.getAbsolutePath() }) + .waitFor(); + if (exitCode == 0) + return true; + LOGGER.error("xdg-open returned " + exitCode); + } catch (Exception e) { + LOGGER.error("xdg-open fallback failed", e); + } + return false; + } + /** * Send an email to the given email address, with an optional subject. This * will open the user's default mail application. -- cgit v1.2.3-55-g7522