aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2013-01-12 13:09:26 +0100
committerBananeweizen <bananeweizen@gmx.de>2013-01-12 13:09:26 +0100
commitd554491cd880eee557742b532b56407f2083d8e5 (patch)
tree2efc48b3a22e98a9db0a595864be6326f1a13f0a
parent79ebf1b0d61373dc76633908fd11ed7d12247013 (diff)
downloadcgeo-d554491cd880eee557742b532b56407f2083d8e5.zip
cgeo-d554491cd880eee557742b532b56407f2083d8e5.tar.gz
cgeo-d554491cd880eee557742b532b56407f2083d8e5.tar.bz2
fix #2385: relative links in OC caches lead to crash
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java23
1 files changed, 21 insertions, 2 deletions
diff --git a/main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java b/main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java
index 36292d0..0b91b25 100644
--- a/main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java
+++ b/main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java
@@ -3,6 +3,8 @@ package cgeo.geocaching.connector.oc;
import cgeo.geocaching.LogEntry;
import cgeo.geocaching.Settings;
import cgeo.geocaching.cgCache;
+import cgeo.geocaching.connector.ConnectorFactory;
+import cgeo.geocaching.connector.IConnector;
import cgeo.geocaching.enumerations.CacheSize;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.LogType;
@@ -30,6 +32,7 @@ import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
+import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class OC11XMLParser {
@@ -37,6 +40,7 @@ public class OC11XMLParser {
private static final String PARAGRAPH_END = "</p>";
private static final String PARAGRAPH_BEGIN = "<p>";
private static Pattern STRIP_DATE = Pattern.compile("\\+0([0-9]){1}\\:00");
+ private static Pattern LOCAL_URL = Pattern.compile("href=\"(.*)\"");
private static class CacheHolder {
public cgCache cache;
@@ -420,7 +424,7 @@ public class OC11XMLParser {
@Override
public void end(String body) {
final String content = body.trim();
- descHolder.shortDesc = content;
+ descHolder.shortDesc = linkify(content);
}
});
@@ -430,7 +434,7 @@ public class OC11XMLParser {
@Override
public void end(String body) {
final String content = body.trim();
- descHolder.desc = content;
+ descHolder.desc = linkify(content);
}
});
@@ -537,6 +541,21 @@ public class OC11XMLParser {
}
}
+ private static String linkify(String input) {
+ String result = input;
+ Matcher matcher = LOCAL_URL.matcher(result);
+ while (matcher.find()) {
+ String url = matcher.group(1);
+ if (!url.contains(":/")) {
+ IConnector ocConnector = ConnectorFactory.getConnector("OCXXX");
+ String prefix = "http://" + ocConnector.getHost() + "/";
+ result = StringUtils.replace(result, url, prefix + url);
+ matcher = LOCAL_URL.matcher(result);
+ }
+ }
+ return result;
+ }
+
/**
* removes unneeded markup
*/