Sync last seen notification ID with server
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package org.joinmastodon.android.api;
|
package org.joinmastodon.android.api;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonIOException;
|
import com.google.gson.JsonIOException;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -26,6 +27,9 @@ public class JsonObjectRequestBody extends RequestBody{
|
|||||||
public void writeTo(BufferedSink sink) throws IOException{
|
public void writeTo(BufferedSink sink) throws IOException{
|
||||||
try{
|
try{
|
||||||
OutputStreamWriter writer=new OutputStreamWriter(sink.outputStream(), StandardCharsets.UTF_8);
|
OutputStreamWriter writer=new OutputStreamWriter(sink.outputStream(), StandardCharsets.UTF_8);
|
||||||
|
if(obj instanceof JsonElement)
|
||||||
|
writer.write(obj.toString());
|
||||||
|
else
|
||||||
MastodonAPIController.gson.toJson(obj, writer);
|
MastodonAPIController.gson.toJson(obj, writer);
|
||||||
writer.flush();
|
writer.flush();
|
||||||
}catch(JsonIOException x){
|
}catch(JsonIOException x){
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<SaveMarkers.Response>{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@ import com.squareup.otto.Subscribe;
|
|||||||
|
|
||||||
import org.joinmastodon.android.E;
|
import org.joinmastodon.android.E;
|
||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
|
import org.joinmastodon.android.api.requests.markers.SaveMarkers;
|
||||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||||
import org.joinmastodon.android.events.PollUpdatedEvent;
|
import org.joinmastodon.android.events.PollUpdatedEvent;
|
||||||
import org.joinmastodon.android.events.RemoveAccountPostsEvent;
|
import org.joinmastodon.android.events.RemoveAccountPostsEvent;
|
||||||
@@ -113,6 +114,10 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
|
|||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
loadRelationships(needRelationships);
|
loadRelationships(needRelationships);
|
||||||
maxID=result.maxID;
|
maxID=result.maxID;
|
||||||
|
|
||||||
|
if(offset==0 && !result.items.isEmpty()){
|
||||||
|
new SaveMarkers(null, result.items.get(0).id).exec(accountID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package org.joinmastodon.android.model;
|
||||||
|
|
||||||
|
import org.joinmastodon.android.api.AllFieldsAreRequired;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
@AllFieldsAreRequired
|
||||||
|
public class Marker extends BaseModel{
|
||||||
|
public String lastReadId;
|
||||||
|
public long version;
|
||||||
|
public Instant updatedAt;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
return "Marker{"+
|
||||||
|
"lastReadId='"+lastReadId+'\''+
|
||||||
|
", version="+version+
|
||||||
|
", updatedAt="+updatedAt+
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user