aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/files
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/files')
-rw-r--r--main/src/cgeo/geocaching/files/GPXParser.java135
-rw-r--r--main/src/cgeo/geocaching/files/LocalStorage.java20
-rw-r--r--main/src/cgeo/geocaching/files/SimpleDirChooser.java4
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);