diff options
| author | Anthony Towns <aj@erisian.com.au> | 2014-01-20 19:38:21 +1000 | 
|---|---|---|
| committer | Anthony Towns <aj@erisian.com.au> | 2014-01-20 19:38:21 +1000 | 
| commit | 7a8551fe8e5f0a90cbc494842715a96f08c11900 (patch) | |
| tree | 305d691433aebad480451b38e67acee5e2e0b1b9 | |
| parent | 0faa098f05d43eefc1fa54462401171fca5034cb (diff) | |
altosui: rate limit map downloads
| -rw-r--r-- | altosui/AltosSiteMapCache.java | 15 | ||||
| -rw-r--r-- | altosui/AltosSiteMapPreload.java | 2 | 
2 files changed, 16 insertions, 1 deletions
diff --git a/altosui/AltosSiteMapCache.java b/altosui/AltosSiteMapCache.java index 40c8ff6b..03dc3cf5 100644 --- a/altosui/AltosSiteMapCache.java +++ b/altosui/AltosSiteMapCache.java @@ -25,8 +25,13 @@ 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); @@ -70,6 +75,16 @@ public class AltosSiteMapCache extends JLabel {  			}  			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;  	} diff --git a/altosui/AltosSiteMapPreload.java b/altosui/AltosSiteMapPreload.java index 7112fed6..66399557 100644 --- a/altosui/AltosSiteMapPreload.java +++ b/altosui/AltosSiteMapPreload.java @@ -213,7 +213,7 @@ public class AltosSiteMapPreload extends AltosUIDialog implements ActionListener  	AltosMapPos	lat;  	AltosMapPos	lon; -	final static int	radius = 3; +	final static int	radius = 5;  	final static int	width = (radius * 2 + 1);  	final static int	height = (radius * 2 + 1);  | 
