Browse Source

Revert "Don't load remote images in the EDT"

This reverts commit 00b7926810.

Change-Id: Ic46e4185df7959ae8723adf2c1167a67c4fb450b
Reviewed-on: http://gerrit.dmdirc.com/1980
Reviewed-by: Greg Holmes <greg@dmdirc.com>
Automatic-Compile: DMDirc Build Manager
tags/0.7rc1
Greg Holmes 13 years ago
parent
commit
f5de47b21c

+ 1
- 1
src/com/dmdirc/addons/ui_swing/components/addonbrowser/AddonTable.java View File

@@ -87,7 +87,7 @@ public class AddonTable extends JTable {
87 87
     /** {@inheritDoc} */
88 88
     @Override
89 89
     public void setRowSorter(final RowSorter<? extends TableModel> sorter) {
90
-        if (sorter != null && !(sorter instanceof AddonSorter)) {
90
+        if (!(sorter instanceof AddonSorter)) {
91 91
             throw new IllegalArgumentException(
92 92
                     "Row sorter must be of type AddonSorter");
93 93
         }

+ 9
- 6
src/com/dmdirc/addons/ui_swing/components/addonbrowser/BrowserWindow.java View File

@@ -22,6 +22,8 @@
22 22
 
23 23
 package com.dmdirc.addons.ui_swing.components.addonbrowser;
24 24
 
25
+import com.dmdirc.addons.ui_swing.components.text.TextLabel;
26
+
25 27
 import java.awt.Window;
26 28
 import java.awt.event.ActionEvent;
27 29
 import java.awt.event.ActionListener;
@@ -95,6 +97,9 @@ public class BrowserWindow extends JDialog implements ActionListener {
95 97
         setResizable(false);
96 98
         setLayout(new MigLayout("fill, wmin 650, hmin 600"));
97 99
         scrollPane.getVerticalScrollBar().setUnitIncrement(15);
100
+        final JPanel loadingPanel = new JPanel(
101
+                new MigLayout("filly, alignx 50%"));
102
+        loadingPanel.add(new TextLabel("Loading addons, please wait."));
98 103
 
99 104
         JPanel panel = new JPanel(new MigLayout("fill"));
100 105
         panel.setBorder(BorderFactory.createTitledBorder(UIManager.getBorder(
@@ -146,7 +151,8 @@ public class BrowserWindow extends JDialog implements ActionListener {
146 151
         list.setRowSorter(sorter);
147 152
         list.setShowGrid(false);
148 153
 
149
-        loadData(true);
154
+        scrollPane.setViewportView(loadingPanel);
155
+        loadData();
150 156
 
151 157
         pack();
152 158
         setLocationRelativeTo(parentWindow);
@@ -183,12 +189,9 @@ public class BrowserWindow extends JDialog implements ActionListener {
183 189
 
184 190
     /**
185 191
      * Loads addon data from the locally cached feed file.
186
-     *
187
-     * @param download Download new addon feed?
188 192
      */
189
-    public final void loadData(final boolean download) {
190
-        new DataLoaderWorker(list, download, this, scrollPane)
191
-                .executeInExecutor();
193
+    public final void loadData() {
194
+        new DataLoaderWorker(list, this, scrollPane).executeInExecutor();
192 195
     }
193 196
 
194 197
     /**

+ 11
- 87
src/com/dmdirc/addons/ui_swing/components/addonbrowser/DataLoaderWorker.java View File

@@ -23,39 +23,25 @@
23 23
 package com.dmdirc.addons.ui_swing.components.addonbrowser;
24 24
 
25 25
 import com.dmdirc.Main;
26
-import com.dmdirc.addons.ui_swing.UIUtilities;
27 26
 import com.dmdirc.addons.ui_swing.components.LoggingSwingWorker;
28
-import com.dmdirc.addons.ui_swing.components.text.TextLabel;
29 27
 import com.dmdirc.logger.ErrorLevel;
30 28
 import com.dmdirc.logger.Logger;
31 29
 import com.dmdirc.util.ConfigFile;
32
-import com.dmdirc.util.DownloadListener;
33
-import com.dmdirc.util.Downloader;
34 30
 import com.dmdirc.util.InvalidConfigFileException;
35 31
 
36 32
 import java.io.File;
37 33
 import java.io.IOException;
38
-import java.util.ArrayList;
39 34
 import java.util.Collection;
40 35
 import java.util.Collections;
41
-import java.util.List;
42 36
 import java.util.Map;
43 37
 import java.util.concurrent.ExecutionException;
44
-import javax.swing.Box;
45
-
46
-import javax.swing.JPanel;
47
-import javax.swing.JProgressBar;
48 38
 import javax.swing.JScrollPane;
49
-import javax.swing.text.StyleConstants;
50
-
51
-import net.miginfocom.swing.MigLayout;
52 39
 
53 40
 /**
54 41
  * Loads the addon data feed into the addon browser.
55 42
  */
56 43
 public class DataLoaderWorker
57
-        extends LoggingSwingWorker<Collection<AddonInfo>, Object>
58
-        implements DownloadListener {
44
+        extends LoggingSwingWorker<Collection<Map<String, String>>, Object> {
59 45
 
60 46
     /** List to load data into. */
61 47
     private final AddonTable table;
@@ -63,24 +49,18 @@ public class DataLoaderWorker
63 49
     private final BrowserWindow browserWindow;
64 50
     /** Table's parent scrollpane. */
65 51
     private final JScrollPane scrollPane;
66
-    /** Downloader progress bar. */
67
-    private final JProgressBar jpb = new JProgressBar(0, 100);
68
-    /** Refresh addons feed? */
69
-    private final boolean download;
70 52
 
71 53
     /**
72 54
      * Creates a new data loader worker.
73 55
      *
74 56
      * @param table Table to load data into
75
-     * @param download Download new addons feed?
76 57
      * @param browserWindow Browser window to pass to table objects
77 58
      * @param scrollPane Table's parent scrollpane
78 59
      */
79
-    public DataLoaderWorker(final AddonTable table, final boolean download,
60
+    public DataLoaderWorker(final AddonTable table,
80 61
             final BrowserWindow browserWindow, final JScrollPane scrollPane) {
81 62
         super();
82 63
 
83
-        this.download = download;
84 64
         this.table = table;
85 65
         this.browserWindow = browserWindow;
86 66
         this.scrollPane = scrollPane;
@@ -88,46 +68,17 @@ public class DataLoaderWorker
88 68
 
89 69
     /** {@inheritDoc} */
90 70
     @Override
91
-    protected Collection<AddonInfo> doInBackground() {
92
-        final JPanel loadingPanel = new JPanel(
93
-                new MigLayout("fill, alignx 50%, aligny 50%"));
94
-        scrollPane.setViewportView(loadingPanel);
95
-        if (download) {
96
-            final TextLabel label = new TextLabel(
97
-                    "Downloading addon info, please wait...");
98
-            label.setAlignment(StyleConstants.ALIGN_CENTER);
99
-            loadingPanel.add(Box.createVerticalGlue(), "growy, pushy, wrap");
100
-            loadingPanel.add(label, "growx, wrap");
101
-            loadingPanel.add(jpb, "growx, wrap");
102
-            loadingPanel.add(Box.createVerticalGlue(), "growy, pushy");
103
-            try {
104
-                Downloader.downloadPage("http://addons.dmdirc.com/feed",
105
-                        Main.getConfigDir() + File.separator + "addons.feed",
106
-                        this);
107
-            } catch (IOException ex) {
108
-                loadingPanel.removeAll();
109
-                loadingPanel.add(new TextLabel("Unable to download feeds."));
110
-                return Collections.<AddonInfo>emptyList();
111
-            }
112
-        }
113
-
114
-        loadingPanel.removeAll();
115
-        loadingPanel.add(new TextLabel("Loading addon info, please wait."));
71
+    protected Collection<Map<String, String>> doInBackground() {
116 72
         final ConfigFile data = new ConfigFile(Main.getConfigDir()
117 73
                 + File.separator + "addons.feed");
118 74
         try {
119 75
             data.read();
120 76
         } catch (IOException ex) {
121
-            return Collections.<AddonInfo>emptyList();
77
+            return Collections.<Map<String, String>>emptyList();
122 78
         } catch (InvalidConfigFileException ex) {
123
-            return Collections.<AddonInfo>emptyList();
79
+            return Collections.<Map<String, String>>emptyList();
124 80
         }
125
-
126
-        final List<AddonInfo> list = new ArrayList<AddonInfo>();
127
-        for (Map<String, String> entry : data.getKeyDomains().values()) {
128
-            list.add(new AddonInfo(entry));
129
-        }
130
-        return list;
81
+        return data.getKeyDomains().values();
131 82
     }
132 83
 
133 84
     /** {@inheritDoc} */
@@ -136,15 +87,14 @@ public class DataLoaderWorker
136 87
         if (isCancelled()) {
137 88
             return;
138 89
         }
139
-
140
-        Collection<AddonInfo> data;
90
+        Collection<Map<String, String>> data;
141 91
         try {
142 92
             data = get();
143 93
         } catch (InterruptedException ex) {
144
-            data = Collections.<AddonInfo>emptyList();
94
+            data = Collections.<Map<String, String>>emptyList();
145 95
         } catch (ExecutionException ex) {
146 96
             Logger.appError(ErrorLevel.MEDIUM, ex.getMessage(), ex);
147
-            data = Collections.<AddonInfo>emptyList();
97
+            data = Collections.<Map<String, String>>emptyList();
148 98
         }
149 99
         final int selectedRow;
150 100
         if (table.getRowCount() > 0 && table.getSelectedRow() > 0) {
@@ -153,7 +103,8 @@ public class DataLoaderWorker
153 103
             selectedRow = 0;
154 104
         }
155 105
         table.getModel().setRowCount(0);
156
-        for (AddonInfo info : data) {
106
+        for (Map<String, String> entry : data) {
107
+            final AddonInfo info = new AddonInfo(entry);
157 108
             table.getModel().addRow(new Object[]{
158 109
                 new AddonInfoLabel(info, browserWindow),
159 110
             });
@@ -161,31 +112,4 @@ public class DataLoaderWorker
161 112
         table.getSelectionModel().setSelectionInterval(selectedRow, selectedRow);
162 113
         scrollPane.setViewportView(table);
163 114
     }
164
-
165
-    /** {@inheritDoc} */
166
-    @Override
167
-    public void downloadProgress(final float percent) {
168
-        UIUtilities.invokeLater(new Runnable() {
169
-
170
-            /** {@inheritDoc} */
171
-            @Override
172
-            public void run() {
173
-                jpb.setValue((int) percent);
174
-            }
175
-        });
176
-    }
177
-
178
-    /** {@inheritDoc} */
179
-    @Override
180
-    public void setIndeterminate(final boolean indeterminate) {
181
-        UIUtilities.invokeLater(new Runnable() {
182
-
183
-            /** {@inheritDoc} */
184
-            @Override
185
-            public void run() {
186
-                jpb.setIndeterminate(indeterminate);
187
-            }
188
-        });
189
-   }
190
-
191 115
 }

+ 112
- 0
src/com/dmdirc/addons/ui_swing/components/addonbrowser/DownloaderWindow.java View File

@@ -0,0 +1,112 @@
1
+/*
2
+ * To change this template, choose Tools | Templates
3
+ * and open the template in the editor.
4
+ */
5
+
6
+package com.dmdirc.addons.ui_swing.components.addonbrowser;
7
+
8
+import com.dmdirc.Main;
9
+import com.dmdirc.addons.ui_swing.SwingController;
10
+import com.dmdirc.addons.ui_swing.UIUtilities;
11
+import com.dmdirc.ui.CoreUIUtils;
12
+import com.dmdirc.ui.IconManager;
13
+import com.dmdirc.util.DownloadListener;
14
+import com.dmdirc.util.Downloader;
15
+
16
+import java.awt.Window;
17
+import java.io.File;
18
+import java.io.IOException;
19
+
20
+import javax.swing.JDialog;
21
+import javax.swing.JLabel;
22
+import javax.swing.JProgressBar;
23
+
24
+import net.miginfocom.swing.MigLayout;
25
+
26
+/**
27
+ * Simple window to show download progress on addon feed.
28
+ */
29
+public class DownloaderWindow extends JDialog implements Runnable, DownloadListener {
30
+
31
+    /**
32
+     * A version number for this class. It should be changed whenever the class
33
+     * structure is changed (or anything else that would prevent serialized
34
+     * objects being unserialized with the new class).
35
+     */
36
+    private static final long serialVersionUID = 1;
37
+    /** Downloader progress bar. */
38
+    private final JProgressBar jpb = new JProgressBar(0, 100);
39
+    /** Parent window. */
40
+    private final Window parentWindow;
41
+
42
+    /**
43
+     * Instantiates a new downloader window.
44
+     *
45
+     * @param parentWindow Parent window
46
+     * @param controller Swing controller
47
+     */
48
+    public DownloaderWindow(final Window parentWindow,
49
+            final SwingController controller) {
50
+        super(parentWindow, "DMDirc Addon Browser", ModalityType.MODELESS);
51
+        this.parentWindow = parentWindow;
52
+        setTitle("Downloading addon information...");
53
+        setLayout(new MigLayout("fill"));
54
+        add(jpb, "grow");
55
+        pack();
56
+        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
57
+        CoreUIUtils.centreWindow(this);
58
+        setIconImage(IconManager.getIconManager().getImage("icon"));
59
+        setVisible(true);
60
+
61
+        new Thread(this, "Addon downloader thread").start();
62
+    }
63
+
64
+    /** {@inheritDoc} */
65
+    @Override
66
+    public void run() {
67
+        try {
68
+            Downloader.downloadPage("http://addons.dmdirc.com/feed",
69
+                    Main.getConfigDir() + File.separator + "addons.feed", this);
70
+            UIUtilities.invokeLater(new Runnable() {
71
+
72
+                /** {@inheritDoc} */
73
+                @Override
74
+                public void run() {
75
+                    new BrowserWindow(parentWindow);
76
+                }
77
+            });
78
+        } catch (IOException ex) {
79
+            removeAll();
80
+            add(new JLabel("Unable to download feed."));
81
+        }
82
+
83
+        dispose();
84
+    }
85
+
86
+    /** {@inheritDoc} */
87
+    @Override
88
+    public void downloadProgress(final float percent) {
89
+        UIUtilities.invokeLater(new Runnable() {
90
+
91
+            /** {@inheritDoc} */
92
+            @Override
93
+            public void run() {
94
+                jpb.setValue((int) percent);
95
+            }
96
+        });
97
+    }
98
+
99
+    /** {@inheritDoc} */
100
+    @Override
101
+    public void setIndeterminate(final boolean indeterminate) {
102
+        UIUtilities.invokeLater(new Runnable() {
103
+
104
+            /** {@inheritDoc} */
105
+            @Override
106
+            public void run() {
107
+                jpb.setIndeterminate(indeterminate);
108
+            }
109
+        });
110
+    }
111
+
112
+}

+ 1
- 1
src/com/dmdirc/addons/ui_swing/components/addonbrowser/InstallerWindow.java View File

@@ -106,6 +106,6 @@ public class InstallerWindow extends StandardDialog implements ActionListener {
106 106
         jpb.setValue(100);
107 107
         getOkButton().setEnabled(true);
108 108
         pack();
109
-        parentWindow.loadData(false);
109
+        parentWindow.loadData();
110 110
     }
111 111
 }

+ 2
- 2
src/com/dmdirc/addons/ui_swing/components/addonpanel/AddonPanel.java View File

@@ -24,7 +24,7 @@ package com.dmdirc.addons.ui_swing.components.addonpanel;
24 24
 
25 25
 import com.dmdirc.addons.ui_swing.SwingController;
26 26
 import com.dmdirc.addons.ui_swing.components.LoggingSwingWorker;
27
-import com.dmdirc.addons.ui_swing.components.addonbrowser.BrowserWindow;
27
+import com.dmdirc.addons.ui_swing.components.addonbrowser.DownloaderWindow;
28 28
 import com.dmdirc.addons.ui_swing.components.renderers.AddonCellRenderer;
29 29
 import com.dmdirc.addons.ui_swing.components.text.TextLabel;
30 30
 import com.dmdirc.config.prefs.PreferencesInterface;
@@ -211,7 +211,7 @@ public abstract class AddonPanel extends JPanel implements
211 211
 
212 212
             addonList.repaint();
213 213
         } else if (e.getSource() != toggleButton) {
214
-            new BrowserWindow(parentWindow);
214
+            new DownloaderWindow(parentWindow, controller);
215 215
         }
216 216
     }
217 217
 

Loading…
Cancel
Save