diff options
6 files changed, 41 insertions, 5 deletions
diff --git a/main/src/cgeo/geocaching/cgeogpxes.java b/main/src/cgeo/geocaching/cgeogpxes.java index 7fdc031..8cd9968 100644 --- a/main/src/cgeo/geocaching/cgeogpxes.java +++ b/main/src/cgeo/geocaching/cgeogpxes.java @@ -1,5 +1,7 @@ package cgeo.geocaching; +import cgeo.geocaching.connector.ConnectorFactory; +import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.files.FileList; import cgeo.geocaching.files.GPXImporter; @@ -12,13 +14,10 @@ import android.os.Environment; import java.io.File; import java.util.List; -import java.util.regex.Pattern; public class cgeogpxes extends FileList<cgGPXListAdapter> { private static final String EXTRAS_LIST_ID = "list"; - private static final Pattern gpxZipFilePattern = Pattern.compile("\\d{7,}(_.+)?\\.zip", Pattern.CASE_INSENSITIVE); - public cgeogpxes() { super(new String[] { "gpx", "loc", "zip" }); } @@ -63,7 +62,12 @@ public class cgeogpxes extends FileList<cgGPXListAdapter> { protected boolean filenameBelongsToList(final String filename) { if (super.filenameBelongsToList(filename)) { if (StringUtils.endsWithIgnoreCase(filename, GPXImporter.ZIP_FILE_EXTENSION)) { - return gpxZipFilePattern.matcher(filename).matches(); + for (IConnector connector : ConnectorFactory.getConnectors()) { + if (connector.isZippedGPXFile(filename)) { + return true; + } + } + return false; } // filter out waypoint files return !StringUtils.endsWithIgnoreCase(filename, GPXImporter.WAYPOINTS_FILE_SUFFIX_AND_EXTENSION); diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java index 54f0d8f..73bfd3b 100644 --- a/main/src/cgeo/geocaching/connector/AbstractConnector.java +++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java @@ -60,4 +60,10 @@ public abstract class AbstractConnector implements IConnector { } return false; } + + @Override + public boolean isZippedGPXFile(String fileName) { + // don't accept any file by default + return false; + } } diff --git a/main/src/cgeo/geocaching/connector/GCConnector.java b/main/src/cgeo/geocaching/connector/GCConnector.java index a5524f7..866979a 100644 --- a/main/src/cgeo/geocaching/connector/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/GCConnector.java @@ -16,10 +16,12 @@ import org.apache.commons.lang3.StringUtils; import android.util.Log; import java.util.List; +import java.util.regex.Pattern; public class GCConnector extends AbstractConnector { private static GCConnector instance; + private static final Pattern gpxZipFilePattern = Pattern.compile("\\d{7,}(_.+)?\\.zip", Pattern.CASE_INSENSITIVE); private GCConnector() { // singleton @@ -134,4 +136,9 @@ public class GCConnector extends AbstractConnector { return search; } + + @Override + public boolean isZippedGPXFile(final String fileName) { + return gpxZipFilePattern.matcher(fileName).matches(); + } } diff --git a/main/src/cgeo/geocaching/connector/IConnector.java b/main/src/cgeo/geocaching/connector/IConnector.java index c110377..ddb05a8 100644 --- a/main/src/cgeo/geocaching/connector/IConnector.java +++ b/main/src/cgeo/geocaching/connector/IConnector.java @@ -84,4 +84,12 @@ public interface IConnector { * @return */ public cgSearch searchByCoordinate(final Geopoint center); + + /** + * return true if this is a ZIP file containing a GPX file + * + * @param fileName + * @return + */ + public boolean isZippedGPXFile(final String fileName); } diff --git a/main/src/cgeo/geocaching/connector/opencaching/OpenCachingConnector.java b/main/src/cgeo/geocaching/connector/opencaching/OpenCachingConnector.java index 8c83b99..7c13c5b 100644 --- a/main/src/cgeo/geocaching/connector/opencaching/OpenCachingConnector.java +++ b/main/src/cgeo/geocaching/connector/opencaching/OpenCachingConnector.java @@ -5,11 +5,14 @@ import cgeo.geocaching.connector.AbstractConnector; import org.apache.commons.lang3.StringUtils; +import java.util.regex.Pattern; + public class OpenCachingConnector extends AbstractConnector { private final String host; private final String name; private final String prefix; + private static final Pattern gpxZipFilePattern = Pattern.compile("oc[a-z]{2,3}\\d{5,}\\.zip", Pattern.CASE_INSENSITIVE); public OpenCachingConnector(final String name, final String host, final String prefix) { this.name = name; @@ -37,4 +40,8 @@ public class OpenCachingConnector extends AbstractConnector { return host; } + @Override + public boolean isZippedGPXFile(String fileName) { + return gpxZipFilePattern.matcher(fileName).matches(); + } } diff --git a/tests/src/cgeo/geocaching/cgeogpxesTest.java b/tests/src/cgeo/geocaching/cgeogpxesTest.java index 98619b7..6f2e177 100644 --- a/tests/src/cgeo/geocaching/cgeogpxesTest.java +++ b/tests/src/cgeo/geocaching/cgeogpxesTest.java @@ -3,7 +3,7 @@ package cgeo.geocaching; import android.test.ActivityInstrumentationTestCase2; public class cgeogpxesTest extends ActivityInstrumentationTestCase2<cgeogpxes> { - private cgeogpxes importGpxActivity = new cgeogpxes(); + private final cgeogpxes importGpxActivity = new cgeogpxes(); public cgeogpxesTest() { super("cgeo.geocaching", cgeogpxes.class); @@ -22,6 +22,8 @@ public class cgeogpxesTest extends ActivityInstrumentationTestCase2<cgeogpxes> { assertTrue(importGpxActivity.filenameBelongsToList("12345678_query.zip")); assertTrue(importGpxActivity.filenameBelongsToList("12345678_my_query_1.zip")); assertTrue(importGpxActivity.filenameBelongsToList("12345678_my query.zip")); + assertTrue(importGpxActivity.filenameBelongsToList("ocde12345.zip")); + assertTrue(importGpxActivity.filenameBelongsToList("ocde12345678.zip")); assertFalse(importGpxActivity.filenameBelongsToList("1234567.gpy")); assertFalse(importGpxActivity.filenameBelongsToList("1234567.agpx")); @@ -34,6 +36,8 @@ public class cgeogpxesTest extends ActivityInstrumentationTestCase2<cgeogpxes> { assertFalse(importGpxActivity.filenameBelongsToList("123456.zip")); assertFalse(importGpxActivity.filenameBelongsToList("1234567query.zip")); assertFalse(importGpxActivity.filenameBelongsToList("1234567_.zip")); + assertFalse(importGpxActivity.filenameBelongsToList("ocde_12345678.zip")); + assertFalse(importGpxActivity.filenameBelongsToList("acde12345678.zip")); assertFalse(importGpxActivity.filenameBelongsToList("1234567-wpts.gpx")); } |
