X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fde%2Ftodesbaum%2Fjsite%2Fgui%2FProjectInsertPage.java;h=2cedd5b567167bf25d11fb2e5ae223a75c144028;hb=56b5bbc99fc0179022aba3c7a847b71122963801;hp=563ef3cf1d267f3ae948c8810820c27a9234beca;hpb=bf46824a2aee4b6b7e4753a74f7cc6d7c9d6c20b;p=jSite.git diff --git a/src/de/todesbaum/jsite/gui/ProjectInsertPage.java b/src/de/todesbaum/jsite/gui/ProjectInsertPage.java index 563ef3c..2cedd5b 100644 --- a/src/de/todesbaum/jsite/gui/ProjectInsertPage.java +++ b/src/de/todesbaum/jsite/gui/ProjectInsertPage.java @@ -57,7 +57,7 @@ import de.todesbaum.util.swing.TWizardPage; /** * Wizard page that shows the progress of an insert. - * + * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> */ public class ProjectInsertPage extends TWizardPage implements InsertListener, ClipboardOwner { @@ -80,9 +80,15 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl /** The start time of the insert. */ private long startTime = 0; + /** The number of inserted blocks. */ + private volatile int insertedBlocks; + + /** Whether the “copy URI to clipboard” button was used. */ + private boolean uriCopied; + /** * Creates a new progress insert wizard page. - * + * * @param wizard * The wizard this page belongs to */ @@ -138,7 +144,7 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl /** * Creates the main panel. - * + * * @return The main panel */ private JComponent createProjectInsertPanel() { @@ -164,7 +170,7 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl final JLabel progressLabel = new JLabel(I18n.getMessage("jsite.insert.progress") + ":"); projectInsertPanel.add(progressLabel, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL, new Insets(6, 18, 0, 0), 0, 0)); projectInsertPanel.add(progressBar, new GridBagConstraints(1, 3, 1, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0)); - projectInsertPanel.add(new JButton(copyURIAction), new GridBagConstraints(0, 4, 2, 1, 0.0, 0.0, GridBagConstraints.LINE_END, GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0)); + projectInsertPanel.add(new JButton(copyURIAction), new GridBagConstraints(0, 4, 2, 1, 0.0, 0.0, GridBagConstraints.LINE_END, GridBagConstraints.NONE, new Insets(12, 18, 0, 0), 0, 0)); I18nContainer.getInstance().registerRunnable(new Runnable() { @@ -209,19 +215,8 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl } /** - * Sets whether to activate the debug mode. - * - * @param debug - * true to activate the debug mode, - * false to deactivate. - */ - public void setDebug(boolean debug) { - projectInserter.setDebug(debug); - } - - /** * Sets the project to insert. - * + * * @param project * The project to insert */ @@ -238,7 +233,7 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl /** * Sets the freenet interface to use. - * + * * @param freenetInterface * The freenet interface to use */ @@ -246,6 +241,28 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl projectInserter.setFreenetInterface(freenetInterface); } + /** + * Sets the project inserter’s temp directory. + * + * @see ProjectInserter#setTempDirectory(String) + * @param tempDirectory + * The temp directory to use, or {@code null} to use the system + * default + */ + public void setTempDirectory(String tempDirectory) { + projectInserter.setTempDirectory(tempDirectory); + } + + /** + * Returns whether the “copy URI to clipboard” button was used. + * + * @return {@code true} if an URI was copied to clipboard, {@code false} + * otherwise + */ + public boolean wasUriCopied() { + return uriCopied; + } + // // INTERFACE InsertListener // @@ -254,12 +271,12 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl * {@inheritDoc} */ public void projectInsertStarted(final Project project) { - startTime = System.currentTimeMillis(); + SwingUtilities.invokeLater(new Runnable() { @SuppressWarnings("synthetic-access") public void run() { - startTimeLabel.setText(DateFormat.getDateTimeInstance().format(new Date(startTime))); + startTimeLabel.setText(DateFormat.getDateTimeInstance().format(new Date())); } }); } @@ -267,6 +284,13 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl /** * {@inheritDoc} */ + public void projectUploadFinished(Project project) { + startTime = System.currentTimeMillis(); + } + + /** + * {@inheritDoc} + */ public void projectURIGenerated(Project project, final String uri) { SwingUtilities.invokeLater(new Runnable() { @@ -282,6 +306,7 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl * {@inheritDoc} */ public void projectInsertProgress(Project project, final int succeeded, final int failed, final int fatal, final int total, final boolean finalized) { + insertedBlocks = succeeded; SwingUtilities.invokeLater(new Runnable() { @SuppressWarnings("synthetic-access") @@ -291,8 +316,10 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl int progress = (succeeded + failed + fatal) * 100 / total; StringBuilder progressString = new StringBuilder(); progressString.append(progress).append("% ("); - progressString.append(succeeded + failed + fatal).append("/").append(total); - progressString.append(")"); + progressString.append(succeeded + failed + fatal).append('/').append(total); + progressString.append(") ("); + progressString.append(getTransferRate()); + progressString.append(' ').append(I18n.getMessage("jsite.insert.k-per-s")).append(')'); progressBar.setString(progressString.toString()); if (finalized) { progressBar.setFont(progressBar.getFont().deriveFont(Font.BOLD)); @@ -306,7 +333,11 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl */ public void projectInsertFinished(Project project, boolean success, Throwable cause) { if (success) { - JOptionPane.showMessageDialog(this, I18n.getMessage("jsite.insert.inserted"), null, JOptionPane.INFORMATION_MESSAGE); + String copyURILabel = I18n.getMessage("jsite.insert.okay-copy-uri"); + int selectedValue = JOptionPane.showOptionDialog(this, I18n.getMessage("jsite.insert.inserted"), I18n.getMessage("jsite.insert.done.title"), 0, JOptionPane.INFORMATION_MESSAGE, null, new Object[] { I18n.getMessage("jsite.insert.okay"), copyURILabel }, copyURILabel); + if (selectedValue == 1) { + actionCopyURI(); + } } else { if (cause == null) { JOptionPane.showMessageDialog(this, I18n.getMessage("jsite.insert.insert-failed"), null, JOptionPane.ERROR_MESSAGE); @@ -319,7 +350,7 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl @SuppressWarnings("synthetic-access") public void run() { progressBar.setValue(progressBar.getMaximum()); - progressBar.setString(I18n.getMessage("jsite.insert.done")); + progressBar.setString(I18n.getMessage("jsite.insert.done") + " (" + getTransferRate() + " " + I18n.getMessage("jsite.insert.k-per-s") + ")"); wizard.setNextEnabled(true); wizard.setQuitEnabled(true); } @@ -334,10 +365,42 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl * Copies the request URI of the project to the clipboard. */ private void actionCopyURI() { + uriCopied = true; Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(new StringSelection(requestURITextField.getText()), this); } + /** + * Formats the given number so that it always has the the given number of + * fractional digits. + * + * @param number + * The number to format + * @param digits + * The number of fractional digits + * @return The formatted number + */ + private String formatNumber(double number, int digits) { + int multiplier = (int) Math.pow(10, digits); + String formattedNumber = String.valueOf((int) (number * multiplier) / (double) multiplier); + if (formattedNumber.indexOf('.') == -1) { + formattedNumber += '.'; + for (int digit = 0; digit < digits; digit++) { + formattedNumber += "0"; + } + } + return formattedNumber; + } + + /** + * Returns the formatted transfer rate at this point. + * + * @return The formatted transfer rate + */ + private String getTransferRate() { + return formatNumber(insertedBlocks * 32.0 / ((System.currentTimeMillis() - startTime) / 1000), 1); + } + // // INTERFACE ClipboardOwner //