diff options
author | desperateCoder <echotodevnull@gmail.com> | 2020-10-30 22:09:49 +0300 |
---|---|---|
committer | desperateCoder <echotodevnull@gmail.com> | 2020-10-30 22:09:49 +0300 |
commit | 58903257509071f9d245132697d20ace6be17600 (patch) | |
tree | 9089b89bd785cb079db6f77b05f66f2d1ed3e947 /app/src/main/java/it/niedermann/nextcloud/deck/api | |
parent | e1e9d7c76976c53d8d3f38b8f3ae0622015f282f (diff) | |
parent | a60dd0bcf606b061681fd9cb3ca6edb72bcfc4da (diff) |
Merge branch 'master' of github.com:stefan-niedermann/nextcloud-deck
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/api')
5 files changed, 61 insertions, 67 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonConfig.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonConfig.java index 5da408e44..4e61abfb3 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonConfig.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonConfig.java @@ -5,7 +5,7 @@ import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; -import java.util.Date; +import java.time.Instant; import java.util.List; import it.niedermann.nextcloud.deck.model.Attachment; @@ -54,7 +54,7 @@ public class GsonConfig { INSTANCE = new GsonBuilder() .setDateFormat(DATE_PATTERN) .setLenient() - .registerTypeAdapter(Date.class, new GsonUTCDateAdapter()) + .registerTypeAdapter(Instant.class, new GsonUTCInstantAdapter()) .registerTypeAdapter(boardList, new NextcloudArrayDeserializer<>("boards", FullBoard.class)) .registerTypeAdapter(board, new NextcloudDeserializer<>("board", FullBoard.class)) .registerTypeAdapter(cardList, new NextcloudArrayDeserializer<>("cards", FullCard.class)) @@ -72,7 +72,7 @@ public class GsonConfig { .registerTypeAdapter(attachment, new NextcloudDeserializer<>("attachment", Attachment.class)) .registerTypeAdapter(comment, new NextcloudDeserializer<>("comment", OcsComment.class)) .registerTypeAdapter(projectList, new NextcloudDeserializer<>("projectList", OcsProjectList.class)) - .registerTypeAdapter(groupMembers, new NextcloudDeserializer<>("groupMembers", GroupMemberUIDs.class)) + .registerTypeAdapter(groupMembers, new NextcloudDeserializer<>("groupMembers", GroupMemberUIDs.class)) .create(); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonUTCDateAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonUTCDateAdapter.java deleted file mode 100644 index 4d30b3e81..000000000 --- a/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonUTCDateAdapter.java +++ /dev/null @@ -1,48 +0,0 @@ -package it.niedermann.nextcloud.deck.api; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -import java.lang.reflect.Type; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; -import java.util.TimeZone; -import java.util.regex.Pattern; - -public class GsonUTCDateAdapter implements JsonSerializer<Date>, JsonDeserializer<Date> { - - private final DateFormat dateFormat; - private final Pattern UNIX_TIMESTAMP = Pattern.compile("^[0-9]+$"); - - public GsonUTCDateAdapter() { - //This is the format I need - dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US); - //This is the key line which converts the date to UTC which cannot be accessed with the default serializer - dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); - } - - @Override public synchronized JsonElement serialize(Date date, Type type, JsonSerializationContext jsonSerializationContext) { - return new JsonPrimitive(dateFormat.format(date)); - } - - @Override public synchronized Date deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) { - String dateValue = jsonElement.getAsString(); - try { - return dateFormat.parse(dateValue); - } catch (ParseException e) { - // fallback to unix timestamp? - if (UNIX_TIMESTAMP.matcher(dateValue).matches()){ - return new Date(Long.valueOf(dateValue)); - } - throw new JsonParseException(e); - } - } -}
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonUTCInstantAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonUTCInstantAdapter.java new file mode 100644 index 000000000..5a6b5b0c0 --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonUTCInstantAdapter.java @@ -0,0 +1,43 @@ +package it.niedermann.nextcloud.deck.api; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import java.lang.reflect.Type; +import java.text.ParseException; +import java.time.Instant; +import java.time.format.DateTimeFormatter; +import java.util.regex.Pattern; + +public class GsonUTCInstantAdapter implements JsonSerializer<Instant>, JsonDeserializer<Instant> { + + private static final Pattern UNIX_TIMESTAMP = Pattern.compile("^[0-9]+$"); + + @Override + public synchronized JsonElement serialize(Instant date, Type type, JsonSerializationContext jsonSerializationContext) { + return new JsonPrimitive(DateTimeFormatter.ISO_INSTANT.format(date)); + } + + @Override + public synchronized Instant deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) { + String dateValue = jsonElement.getAsString(); + try { + final Instant parsedDate = Instant.parse(dateValue); + if (parsedDate == null) { + throw new ParseException("Parsed date is null", 0); + } + return parsedDate; + } catch (ParseException e) { + // fallback to unix timestamp? + if (UNIX_TIMESTAMP.matcher(dateValue).matches()) { + return Instant.ofEpochMilli(Long.parseLong(dateValue)); + } + throw new JsonParseException(e); + } + } +}
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java index c552a7f9e..8601cab41 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java @@ -6,12 +6,10 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import org.threeten.bp.DateTimeUtils; -import org.threeten.bp.ZonedDateTime; -import org.threeten.bp.format.DateTimeFormatter; - +import java.time.Instant; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; -import java.util.Date; import java.util.List; import it.niedermann.android.util.ColorUtil; @@ -46,6 +44,7 @@ import static it.niedermann.nextcloud.deck.exceptions.TraceableException.makeTra public class JsonToEntityParser { + @SuppressWarnings("unchecked") protected static <T> T parseJsonObject(JsonObject obj, Class<T> mType) { if (mType == FullBoard.class) { return (T) parseBoard(obj); @@ -645,20 +644,20 @@ public class JsonToEntityParser { return jsonElement.isJsonNull() ? "" : jsonElement.getAsString(); } - private static Date getTimestampFromString(JsonElement jsonElement) { + private static Instant getTimestampFromString(JsonElement jsonElement) { if (jsonElement.isJsonNull()) { return null; } else { String dateAsString = jsonElement.getAsString(); - return DateTimeUtils.toDate(ZonedDateTime.from(DateTimeFormatter.ISO_DATE_TIME.parse(dateAsString)).toInstant()); + return ZonedDateTime.from(DateTimeFormatter.ISO_DATE_TIME.parse(dateAsString)).toInstant(); } } - private static Date getTimestampFromLong(JsonElement jsonElement) { + private static Instant getTimestampFromLong(JsonElement jsonElement) { if (jsonElement.isJsonNull()) { return null; } else { - return new Date(jsonElement.getAsLong() * 1000); + return Instant.ofEpochMilli(jsonElement.getAsLong() * 1000); } } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/LastSyncUtil.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/LastSyncUtil.java index 1d44bfe13..1492d78ac 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/api/LastSyncUtil.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/LastSyncUtil.java @@ -3,7 +3,7 @@ package it.niedermann.nextcloud.deck.api; import android.content.Context; import android.content.SharedPreferences; -import java.util.Date; +import java.time.Instant; import it.niedermann.nextcloud.deck.R; @@ -22,19 +22,19 @@ public class LastSyncUtil { } - public static long getLastSync(long accountId){ + public static long getLastSync(long accountId) { return INSTANCE.lastSyncPref.getLong(getSyncKeyForAccount(accountId), 0L); } - public static Date getLastSyncDate(long accountId){ - return new Date(getLastSync(accountId)); + public static Instant getLastSyncDate(long accountId) { + return Instant.ofEpochMilli(getLastSync(accountId)); } - public static void setLastSyncDate(long accountId, Date value){ - INSTANCE.lastSyncPref.edit().putLong(getSyncKeyForAccount(accountId), value.getTime()).apply(); + public static void setLastSyncDate(long accountId, Instant value) { + INSTANCE.lastSyncPref.edit().putLong(getSyncKeyForAccount(accountId), value.toEpochMilli()).apply(); } - public static void resetLastSyncDate(long accountId){ + public static void resetLastSyncDate(long accountId) { INSTANCE.lastSyncPref.edit().remove(getSyncKeyForAccount(accountId)).apply(); } |