From 152538e2b8206e8d851dfcc2841accad94af1de6 Mon Sep 17 00:00:00 2001 From: sk89q Date: Thu, 9 Jan 2014 09:21:51 -0800 Subject: [PATCH] Added console log button to ProgressDialog. --- .../skcraft/launcher/dialog/ConsoleFrame.java | 31 +++++++++++++++++++ .../launcher/dialog/ProgressDialog.java | 18 +++++++++-- .../launcher/install/HttpDownloader.java | 2 +- .../skcraft/launcher/swing/MessageLog.java | 8 ++--- .../skcraft/launcher/lang/Launcher.properties | 6 ++++ 5 files changed, 57 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/skcraft/launcher/dialog/ConsoleFrame.java b/src/main/java/com/skcraft/launcher/dialog/ConsoleFrame.java index ff7df48..eb3125c 100644 --- a/src/main/java/com/skcraft/launcher/dialog/ConsoleFrame.java +++ b/src/main/java/com/skcraft/launcher/dialog/ConsoleFrame.java @@ -28,12 +28,16 @@ import static com.skcraft.launcher.util.SharedLocale._; */ public class ConsoleFrame extends JFrame { + private static ConsoleFrame globalFrame; + @Getter private final Image trayRunningIcon; @Getter private final Image trayClosedIcon; @Getter private final MessageLog messageLog; @Getter private LinedBoxPanel buttonsPanel; + private boolean registeredGlobalLog = false; + /** * Construct the frame. * @@ -92,11 +96,23 @@ public class ConsoleFrame extends JFrame { }); } + /** + * Register the global logger if it hasn't been registered. + */ + private void registerLoggerHandler() { + if (!registeredGlobalLog) { + getMessageLog().registerLoggerHandler(); + registeredGlobalLog = true; + } + } + /** * Attempt to perform window close. */ protected void performClose() { messageLog.detachGlobalHandler(); + messageLog.clear(); + registeredGlobalLog = false; dispose(); } @@ -122,4 +138,19 @@ public class ConsoleFrame extends JFrame { }); } + public static void showMessages() { + ConsoleFrame frame = globalFrame; + if (frame == null) { + frame = new ConsoleFrame(10000, false); + globalFrame = frame; + frame.setTitle(_("console.launcherConsoleTitle")); + frame.registerLoggerHandler(); + frame.setVisible(true); + } else { + frame.setVisible(true); + frame.registerLoggerHandler(); + frame.requestFocus(); + } + } + } diff --git a/src/main/java/com/skcraft/launcher/dialog/ProgressDialog.java b/src/main/java/com/skcraft/launcher/dialog/ProgressDialog.java index aefbf8b..cbd61d9 100644 --- a/src/main/java/com/skcraft/launcher/dialog/ProgressDialog.java +++ b/src/main/java/com/skcraft/launcher/dialog/ProgressDialog.java @@ -39,6 +39,7 @@ public class ProgressDialog extends JDialog { private final JTextArea logText = new JTextArea(); private final JScrollPane logScroll = new JScrollPane(logText); private final JButton detailsButton = new JButton(); + private final JButton logButton = new JButton(_("progress.viewLog")); private final JButton cancelButton = new JButton(_("button.cancel")); public ProgressDialog(Window owner, String title, String message) { @@ -65,13 +66,15 @@ public class ProgressDialog extends JDialog { } private void setCompactSize() { - detailsButton.setText("Details..."); + detailsButton.setText(_("progress.details")); + logButton.setVisible(false); setMinimumSize(new Dimension(400, 100)); pack(); } private void setDetailsSize() { - detailsButton.setText("Less..."); + detailsButton.setText(_("progress.less")); + logButton.setVisible(true); setSize(400, 350); } @@ -82,6 +85,7 @@ public class ProgressDialog extends JDialog { progressBar.setPreferredSize(new Dimension(0, 18)); buttonsPanel.addElement(detailsButton); + buttonsPanel.addElement(logButton); buttonsPanel.addGlue(); buttonsPanel.addElement(cancelButton); buttonsPanel.setBorder(BorderFactory.createEmptyBorder(30, 13, 13, 13)); @@ -113,16 +117,24 @@ public class ProgressDialog extends JDialog { } } }); + detailsButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { toggleDetails(); } }); + + logButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ConsoleFrame.showMessages(); + } + }); } private boolean confirmCancel() { - return SwingHelper.confirmDialog(this, "Are you sure that you wish to cancel?", "Cancel"); + return SwingHelper.confirmDialog(this, _("progress.confirmCancel"), _("progress.confirmCancelTitle")); } protected void cancel() { diff --git a/src/main/java/com/skcraft/launcher/install/HttpDownloader.java b/src/main/java/com/skcraft/launcher/install/HttpDownloader.java index fd38d96..30a85f0 100644 --- a/src/main/java/com/skcraft/launcher/install/HttpDownloader.java +++ b/src/main/java/com/skcraft/launcher/install/HttpDownloader.java @@ -218,7 +218,7 @@ public class HttpDownloader implements Downloader { } private void download() throws IOException, InterruptedException { - log.log(Level.INFO, "Downloading {0} from {1}...", new Object[] { destFile, urls }); + log.log(Level.INFO, "Downloading " + destFile + " from " + urls); File destDir = destFile.getParentFile(); File tempFile = new File(destDir, destFile.getName() + ".tmp"); diff --git a/src/main/java/com/skcraft/launcher/swing/MessageLog.java b/src/main/java/com/skcraft/launcher/swing/MessageLog.java index d6d9817..ccc877a 100644 --- a/src/main/java/com/skcraft/launcher/swing/MessageLog.java +++ b/src/main/java/com/skcraft/launcher/swing/MessageLog.java @@ -8,6 +8,7 @@ package com.skcraft.launcher.swing; import com.skcraft.launcher.LauncherUtils; import com.skcraft.launcher.util.LimitLinesDocumentListener; +import com.skcraft.launcher.util.SimpleLogFormatter; import javax.swing.*; import javax.swing.text.*; @@ -264,6 +265,8 @@ public class MessageLog extends JPanel { * Used to send logger messages to the console. */ private class ConsoleLoggerHandler extends Handler { + private final SimpleLogFormatter formatter = new SimpleLogFormatter(); + @Override public void publish(LogRecord record) { Level level = record.getLevel(); @@ -276,10 +279,7 @@ public class MessageLog extends JPanel { attributes = debugAttributes; } - log(record.getMessage() + "\n", attributes); - if (t != null) { - log(LauncherUtils.getStackTrace(t) + "\n", attributes); - } + log(formatter.format(record), attributes); } @Override diff --git a/src/main/resources/com/skcraft/launcher/lang/Launcher.properties b/src/main/resources/com/skcraft/launcher/lang/Launcher.properties index a13d101..030a1f7 100644 --- a/src/main/resources/com/skcraft/launcher/lang/Launcher.properties +++ b/src/main/resources/com/skcraft/launcher/lang/Launcher.properties @@ -104,6 +104,7 @@ login.noLoginTitle=Missing Account login.minecraftNotOwnedError=Sorry, Minecraft is not owned on that account. console.title=Messages and Errors +console.launcherConsoleTitle=Launcher Messages console.uploadLog=Upload Log console.pasteUploading=Uploading {0} bytes...\n console.pasteUploaded=Paste uploaded\: {0}\n @@ -127,6 +128,11 @@ downloader.jobPending=...\t{0} downloader.noDownloads=No pending downloads. downloader.failedCount=({0} have failed) +progress.details=Details... +progress.less=Less... +progress.viewLog=View log +progress.confirmCancel=Are you sure that you wish to cancel? +progress.confirmCancelTitle=Cancel progress.defaultStatus=Working... progress.percentTitle=({0}%) {1}