diff options
Diffstat (limited to 'main/src/cgeo/geocaching/files')
| -rw-r--r-- | main/src/cgeo/geocaching/files/GPXParser.java | 135 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/files/LocalStorage.java | 20 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/files/SimpleDirChooser.java | 4 |
3 files changed, 103 insertions, 56 deletions
diff --git a/main/src/cgeo/geocaching/files/GPXParser.java b/main/src/cgeo/geocaching/files/GPXParser.java index 157ea9d..f5380be 100644 --- a/main/src/cgeo/geocaching/files/GPXParser.java +++ b/main/src/cgeo/geocaching/files/GPXParser.java @@ -500,52 +500,9 @@ public abstract class GPXParser extends FileParser { // for GPX 1.1 from extensions node final Element cacheParent = getCacheParent(waypoint); - // GSAK extensions - for (final String gsakNamespace : GSAK_NS) { - final Element gsak = cacheParent.getChild(gsakNamespace, "wptExtension"); - gsak.getChild(gsakNamespace, "Watch").setEndTextElementListener(new EndTextElementListener() { + registerGsakExtensions(cacheParent); - @Override - public void end(String watchList) { - cache.setOnWatchlist(Boolean.valueOf(watchList.trim())); - } - }); - - gsak.getChild(gsakNamespace, "UserData").setEndTextElementListener(new UserDataListener(1)); - - for (int i = 2; i <= 4; i++) { - gsak.getChild(gsakNamespace, "User" + i).setEndTextElementListener(new UserDataListener(i)); - } - - gsak.getChild(gsakNamespace, "Parent").setEndTextElementListener(new EndTextElementListener() { - - @Override - public void end(String body) { - parentCacheCode = body; - } - }); - } - - // c:geo extensions - final Element cgeoVisited = cacheParent.getChild(CGEO_NS, "visited"); - - cgeoVisited.setEndTextElementListener(new EndTextElementListener() { - - @Override - public void end(String visited) { - wptVisited = Boolean.valueOf(visited.trim()); - } - }); - - final Element cgeoUserDefined = cacheParent.getChild(CGEO_NS, "userdefined"); - - cgeoUserDefined.setEndTextElementListener(new EndTextElementListener() { - - @Override - public void end(String userDefined) { - wptUserDefined = Boolean.valueOf(userDefined.trim()); - } - }); + registerCgeoExtensions(cacheParent); // 3 different versions of the GC schema for (final String nsGC : GROUNDSPEAK_NAMESPACE) { @@ -857,6 +814,94 @@ public abstract class GPXParser extends FileParser { } /** + * Add listeners for GSAK extensions + * + * @param cacheParent + */ + private void registerGsakExtensions(final Element cacheParent) { + for (final String gsakNamespace : GSAK_NS) { + final Element gsak = cacheParent.getChild(gsakNamespace, "wptExtension"); + gsak.getChild(gsakNamespace, "Watch").setEndTextElementListener(new EndTextElementListener() { + + @Override + public void end(String watchList) { + cache.setOnWatchlist(Boolean.valueOf(watchList.trim())); + } + }); + + gsak.getChild(gsakNamespace, "UserData").setEndTextElementListener(new UserDataListener(1)); + + for (int i = 2; i <= 4; i++) { + gsak.getChild(gsakNamespace, "User" + i).setEndTextElementListener(new UserDataListener(i)); + } + + gsak.getChild(gsakNamespace, "Parent").setEndTextElementListener(new EndTextElementListener() { + + @Override + public void end(String body) { + parentCacheCode = body; + } + }); + + gsak.getChild(gsakNamespace, "FavPoints").setEndTextElementListener(new EndTextElementListener() { + + @Override + public void end(String favoritePoints) { + try { + cache.setFavoritePoints(Integer.parseInt(favoritePoints)); + } + catch (final NumberFormatException e) { + Log.w("Failed to parse favorite points", e); + } + } + }); + + gsak.getChild(gsakNamespace, "GcNote").setEndTextElementListener(new EndTextElementListener() { + + @Override + public void end(final String personalNote) { + cache.setPersonalNote(StringUtils.trim(personalNote)); + } + }); + + gsak.getChild(gsakNamespace, "IsPremium").setEndTextElementListener(new EndTextElementListener() { + + @Override + public void end(final String premium) { + cache.setPremiumMembersOnly(Boolean.parseBoolean(premium)); + } + }); + } + } + + /** + * Add listeners for c:geo extensions + * + * @param cacheParent + */ + private void registerCgeoExtensions(final Element cacheParent) { + final Element cgeoVisited = cacheParent.getChild(CGEO_NS, "visited"); + + cgeoVisited.setEndTextElementListener(new EndTextElementListener() { + + @Override + public void end(String visited) { + wptVisited = Boolean.valueOf(visited.trim()); + } + }); + + final Element cgeoUserDefined = cacheParent.getChild(CGEO_NS, "userdefined"); + + cgeoUserDefined.setEndTextElementListener(new EndTextElementListener() { + + @Override + public void end(String userDefined) { + wptUserDefined = Boolean.valueOf(userDefined.trim()); + } + }); + } + + /** * Overwrite this method in a GPX parser sub class to modify the {@link Geocache}, after it has been fully parsed * from the GPX file and before it gets stored. * diff --git a/main/src/cgeo/geocaching/files/LocalStorage.java b/main/src/cgeo/geocaching/files/LocalStorage.java index d57c247..626f6e6 100644 --- a/main/src/cgeo/geocaching/files/LocalStorage.java +++ b/main/src/cgeo/geocaching/files/LocalStorage.java @@ -7,7 +7,6 @@ import cgeo.geocaching.utils.Log; import ch.boye.httpclientandroidlib.Header; import ch.boye.httpclientandroidlib.HttpResponse; - import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.eclipse.jdt.annotation.Nullable; @@ -122,7 +121,7 @@ public final class LocalStorage { * the geocode * @return the cache directory */ - public static File getStorageDir(final String geocode) { + public static File getStorageDir(@Nullable final String geocode) { return storageDir(getStorage(), geocode); } @@ -134,11 +133,11 @@ public final class LocalStorage { * the geocode * @return the cache directory */ - private static File getStorageSecDir(final String geocode) { + private static File getStorageSecDir(@Nullable final String geocode) { return storageDir(getStorageSec(), geocode); } - private static File storageDir(final File base, final String geocode) { + private static File storageDir(final File base, @Nullable final String geocode) { return new File(base, StringUtils.defaultIfEmpty(geocode, "_others")); } @@ -155,7 +154,7 @@ public final class LocalStorage { * true if an url was given, false if a file name was given * @return the file */ - public static File getStorageFile(final String geocode, final String fileNameOrUrl, final boolean isUrl, final boolean createDirs) { + public static File getStorageFile(@Nullable final String geocode, final String fileNameOrUrl, final boolean isUrl, final boolean createDirs) { return buildFile(getStorageDir(geocode), fileNameOrUrl, isUrl, createDirs); } @@ -276,15 +275,18 @@ public final class LocalStorage { return false; } + try { try { - final FileOutputStream fos = new FileOutputStream(targetFile); + final File tempFile = File.createTempFile("download", null, targetFile.getParentFile()); + final FileOutputStream fos = new FileOutputStream(tempFile); final boolean written = copy(inputStream, fos); fos.close(); - if (!written) { - FileUtils.deleteIgnoringFailure(targetFile); + if (written) { + return tempFile.renameTo(targetFile); } - return written; + FileUtils.deleteIgnoringFailure(tempFile); + return false; } finally { IOUtils.closeQuietly(inputStream); } diff --git a/main/src/cgeo/geocaching/files/SimpleDirChooser.java b/main/src/cgeo/geocaching/files/SimpleDirChooser.java index 3e09cc4..e63c09f 100644 --- a/main/src/cgeo/geocaching/files/SimpleDirChooser.java +++ b/main/src/cgeo/geocaching/files/SimpleDirChooser.java @@ -89,9 +89,9 @@ public class SimpleDirChooser extends AbstractListActivity { } public void editPath() { - AlertDialog.Builder builder = new AlertDialog.Builder(SimpleDirChooser.this); + AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.simple_dir_chooser_current_path); - final EditText input = new EditText(SimpleDirChooser.this); + final EditText input = new EditText(this); input.setInputType(InputType.TYPE_CLASS_TEXT); input.setText(currentDir.getPath()); builder.setView(input); |
