package altosui;
-import java.awt.*;
-import java.awt.image.*;
-import java.awt.event.*;
import javax.swing.*;
import javax.imageio.ImageIO;
-import javax.swing.table.*;
+import java.awt.image.*;
import java.io.*;
-import java.util.*;
-import java.text.*;
-import java.util.prefs.*;
import java.net.URL;
import java.net.URLConnection;
-import org.altusmetrum.AltosLib.*;
public class AltosSiteMapCache extends JLabel {
+ static final long google_maps_ratelimit_ms = 1200;
+ // Google limits static map queries to 50 per minute per IP, so
+ // each query should take at least 1.2 seconds.
+
public static boolean fetchMap(File file, String url) {
URL u;
+ long startTime = System.nanoTime();
try {
u = new URL(url);
}
return false;
}
+
+ long duration_ms = (System.nanoTime() - startTime) / 1000000;
+ if (duration_ms < google_maps_ratelimit_ms) {
+ try {
+ Thread.sleep(google_maps_ratelimit_ms - duration_ms);
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
+ }
+
return true;
}
}
try {
- return new ImageIcon(ImageIO.read(pngfile));
+ BufferedImage img;
+
+ img = ImageIO.read(pngfile);
+ if (img == null) {
+ System.out.printf("# Can't read pngfile %s\n", pngfile);
+ return null;
+ }
+ return new ImageIcon(img);
} catch (IOException e) {
System.out.printf("# IO error trying to load %s\n", pngfile);
return null;