X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosSiteMapCache.java;h=03dc3cf5d67ebc8a3170d863d8557c75258452c1;hp=cfad52a9d5e3cbe7ba631c77725192afb126ed9a;hb=13cf4000bd53ac4af66231d56e24c9eb11178a5f;hpb=0a4d934f6e2914bfe2d965630543f029a1576c11 diff --git a/altosui/AltosSiteMapCache.java b/altosui/AltosSiteMapCache.java index cfad52a9..03dc3cf5 100644 --- a/altosui/AltosSiteMapCache.java +++ b/altosui/AltosSiteMapCache.java @@ -17,27 +17,25 @@ 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; 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); } catch (java.net.MalformedURLException e) { - System.out.printf("Malformed URL '%s'\n", url); return false; } @@ -58,12 +56,9 @@ public class AltosSiteMapCache extends JLabel { in.close(); if (offset != contentLength) { - System.out.printf("Bad length %d != %d\n", - offset, contentLength); return false; } } catch (IOException e) { - System.out.printf("IO exception reading URL\n"); return false; } @@ -73,15 +68,23 @@ public class AltosSiteMapCache extends JLabel { out.flush(); out.close(); } catch (FileNotFoundException e) { - System.out.printf("Can't create file\n"); return false; } catch (IOException e) { if (file.exists()) { file.delete(); } - System.out.printf("IO exception writing file\n"); 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; } @@ -100,7 +103,14 @@ public class AltosSiteMapCache extends JLabel { } 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;