diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-01-12 13:09:26 +0100 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-01-12 13:09:26 +0100 |
| commit | d554491cd880eee557742b532b56407f2083d8e5 (patch) | |
| tree | 2efc48b3a22e98a9db0a595864be6326f1a13f0a /main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java | |
| parent | 79ebf1b0d61373dc76633908fd11ed7d12247013 (diff) | |
| download | cgeo-d554491cd880eee557742b532b56407f2083d8e5.zip cgeo-d554491cd880eee557742b532b56407f2083d8e5.tar.gz cgeo-d554491cd880eee557742b532b56407f2083d8e5.tar.bz2 | |
fix #2385: relative links in OC caches lead to crash
Diffstat (limited to 'main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java')
| -rw-r--r-- | main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java | 23 |
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 */ |
