diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/JsonObjectRequestBody.java b/mastodon/src/main/java/org/joinmastodon/android/api/JsonObjectRequestBody.java index 66f0c78d9..b1f417fdf 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/JsonObjectRequestBody.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/JsonObjectRequestBody.java @@ -1,5 +1,6 @@ package org.joinmastodon.android.api; +import com.google.gson.JsonElement; import com.google.gson.JsonIOException; import java.io.IOException; @@ -26,7 +27,10 @@ public class JsonObjectRequestBody extends RequestBody{ public void writeTo(BufferedSink sink) throws IOException{ try{ OutputStreamWriter writer=new OutputStreamWriter(sink.outputStream(), StandardCharsets.UTF_8); - MastodonAPIController.gson.toJson(obj, writer); + if(obj instanceof JsonElement) + writer.write(obj.toString()); + else + MastodonAPIController.gson.toJson(obj, writer); writer.flush(); }catch(JsonIOException x){ throw new IOException(x); diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/gson/JsonArrayBuilder.java b/mastodon/src/main/java/org/joinmastodon/android/api/gson/JsonArrayBuilder.java new file mode 100644 index 000000000..610c5dc52 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/api/gson/JsonArrayBuilder.java @@ -0,0 +1,42 @@ +package org.joinmastodon.android.api.gson; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; + +public class JsonArrayBuilder{ + private JsonArray arr=new JsonArray(); + + public JsonArrayBuilder add(JsonElement el){ + arr.add(el); + return this; + } + + public JsonArrayBuilder add(String el){ + arr.add(el); + return this; + } + + public JsonArrayBuilder add(Number el){ + arr.add(el); + return this; + } + + public JsonArrayBuilder add(boolean el){ + arr.add(el); + return this; + } + + public JsonArrayBuilder add(JsonObjectBuilder el){ + arr.add(el.build()); + return this; + } + + public JsonArrayBuilder add(JsonArrayBuilder el){ + arr.add(el.build()); + return this; + } + + public JsonArray build(){ + return arr; + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/gson/JsonObjectBuilder.java b/mastodon/src/main/java/org/joinmastodon/android/api/gson/JsonObjectBuilder.java new file mode 100644 index 000000000..031a2accc --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/api/gson/JsonObjectBuilder.java @@ -0,0 +1,42 @@ +package org.joinmastodon.android.api.gson; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +public class JsonObjectBuilder{ + private JsonObject obj=new JsonObject(); + + public JsonObjectBuilder add(String key, JsonElement el){ + obj.add(key, el); + return this; + } + + public JsonObjectBuilder add(String key, String el){ + obj.addProperty(key, el); + return this; + } + + public JsonObjectBuilder add(String key, Number el){ + obj.addProperty(key, el); + return this; + } + + public JsonObjectBuilder add(String key, boolean el){ + obj.addProperty(key, el); + return this; + } + + public JsonObjectBuilder add(String key, JsonObjectBuilder el){ + obj.add(key, el.build()); + return this; + } + + public JsonObjectBuilder add(String key, JsonArrayBuilder el){ + obj.add(key, el.build()); + return this; + } + + public JsonObject build(){ + return obj; + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/requests/markers/SaveMarkers.java b/mastodon/src/main/java/org/joinmastodon/android/api/requests/markers/SaveMarkers.java new file mode 100644 index 000000000..f432504bf --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/api/requests/markers/SaveMarkers.java @@ -0,0 +1,21 @@ +package org.joinmastodon.android.api.requests.markers; + +import org.joinmastodon.android.api.MastodonAPIRequest; +import org.joinmastodon.android.api.gson.JsonObjectBuilder; +import org.joinmastodon.android.model.Marker; + +public class SaveMarkers extends MastodonAPIRequest{ + public SaveMarkers(String lastSeenHomePostID, String lastSeenNotificationID){ + super(HttpMethod.POST, "/markers", Response.class); + JsonObjectBuilder builder=new JsonObjectBuilder(); + if(lastSeenHomePostID!=null) + builder.add("home", new JsonObjectBuilder().add("last_read_id", lastSeenHomePostID)); + if(lastSeenNotificationID!=null) + builder.add("notifications", new JsonObjectBuilder().add("last_read_id", lastSeenNotificationID)); + setRequestBody(builder.build()); + } + + public static class Response{ + public Marker home, notifications; + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java index 86e3cedde..ec9d42d74 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java @@ -8,6 +8,7 @@ import com.squareup.otto.Subscribe; import org.joinmastodon.android.E; import org.joinmastodon.android.R; +import org.joinmastodon.android.api.requests.markers.SaveMarkers; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.events.PollUpdatedEvent; import org.joinmastodon.android.events.RemoveAccountPostsEvent; @@ -113,6 +114,10 @@ public class NotificationsListFragment extends BaseStatusListFragment