source: AE/installer2/src/net/oni2/aeinstaller/gui/downloadwindow/Downloader.java@ 640

Last change on this file since 640 was 638, checked in by alloc, 12 years ago

AEI2 0.95:

  • Made download-window non-abortable as soon as last file was downloaded (but not yet unpacked)
  • Fixed table to work with local-only packages again (regression introduced when adding last-change column)
  • Added mod version number to contents pane
File size: 3.2 KB
Line 
1package net.oni2.aeinstaller.gui.downloadwindow;
2
3import java.util.ResourceBundle;
4import java.util.TreeSet;
5
6import javax.swing.JButton;
7import javax.swing.JDialog;
8import javax.swing.JLabel;
9import javax.swing.JOptionPane;
10import javax.swing.JProgressBar;
11
12import net.oni2.aeinstaller.backend.SizeFormatter;
13import net.oni2.aeinstaller.backend.mods.Mod;
14import net.oni2.aeinstaller.backend.mods.download.ModDownloader;
15import net.oni2.aeinstaller.backend.mods.download.ModDownloader.State;
16import net.oni2.aeinstaller.backend.mods.download.ModDownloaderListener;
17
18import org.javabuilders.BuildResult;
19import org.javabuilders.swing.SwingJavaBuilder;
20
21/**
22 * @author Christian Illy
23 */
24public class Downloader extends JDialog implements ModDownloaderListener {
25 private static final long serialVersionUID = 9097967828001263776L;
26
27 private ResourceBundle bundle = ResourceBundle
28 .getBundle("net.oni2.aeinstaller.localization."
29 + getClass().getSimpleName());
30 @SuppressWarnings("unused")
31 private BuildResult result = SwingJavaBuilder.build(this, bundle);
32
33 private JLabel lblElapsedVal;
34 private JLabel lblRemainingVal;
35 private JLabel lblDownloadedVal;
36 private JLabel lblTotalVal;
37 private JLabel lblRateVal;
38 private JProgressBar progress;
39
40 private JButton btnAbort;
41
42 private ModDownloader downloader;
43
44 /**
45 * @param mods
46 * Mods to download
47 */
48 public Downloader(TreeSet<Mod> mods) {
49 super();
50
51 setResizable(false);
52 setSize(500, (int) getSize().getHeight());
53
54 downloader = new ModDownloader(mods, this);
55 progress.setMaximum(downloader.getTotalSize());
56 progress.setStringPainted(true);
57 progress.setToolTipText(String.format("%d / %d files downloaded", 0,
58 mods.size()));
59
60 lblDownloadedVal.setText(SizeFormatter.format(0, 3));
61 lblTotalVal.setText(SizeFormatter.format(downloader.getTotalSize(), 3));
62 }
63
64 private void close() {
65 if (!downloader.isFinished())
66 downloader.abort();
67 setVisible(false);
68 }
69
70 @SuppressWarnings("unused")
71 private boolean confirm() {
72 int res = JOptionPane.showConfirmDialog(this,
73 bundle.getString("abort.text"),
74 bundle.getString("abort.title"), JOptionPane.YES_NO_OPTION,
75 JOptionPane.WARNING_MESSAGE);
76 return res == JOptionPane.YES_OPTION;
77 }
78
79 private String formatTime(int sec) {
80 int min = sec / 60;
81 sec = sec % 60;
82 return String.format("%02d:%02d", min, sec);
83 }
84
85 @Override
86 public void updateStatus(ModDownloader source, State state, int filesDown,
87 int filesTotal, int bytesDown, int bytesTotal, int duration,
88 int remaining, int speed) {
89 if (state == ModDownloader.State.FINISHED) {
90 close();
91 } else {
92 if (state == State.LAST_FILE_DOWNLOADED)
93 btnAbort.setEnabled(false);
94
95 progress.setValue(bytesDown);
96 progress.setToolTipText(String.format("%d / %d files downloaded",
97 filesDown, filesTotal));
98
99 lblElapsedVal.setText(formatTime(duration));
100 lblRemainingVal.setText(formatTime(remaining));
101
102 lblDownloadedVal.setText(SizeFormatter.format(bytesDown, 3));
103
104 lblRateVal.setText(SizeFormatter.format(speed, 3) + "/s");
105 }
106 }
107
108 /**
109 * @return were all downloads finished?
110 */
111 public boolean isFinished() {
112 return downloader.isFinished();
113 }
114
115}
Note: See TracBrowser for help on using the repository browser.