Yuito-app-android/app/src/main/java/net/accelf/yuito/TimelineStreamingListener.java

63 lines
1.9 KiB
Java

package net.accelf.yuito;
import android.text.Spanned;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.keylesspalace.tusky.appstore.EventHub;
import com.keylesspalace.tusky.appstore.StatusDeletedEvent;
import com.keylesspalace.tusky.appstore.StreamUpdateEvent;
import com.keylesspalace.tusky.entity.Status;
import com.keylesspalace.tusky.entity.StreamEvent;
import com.keylesspalace.tusky.json.SpannedTypeAdapter;
import okhttp3.Response;
import okhttp3.WebSocket;
import okhttp3.WebSocketListener;
public class TimelineStreamingListener extends WebSocketListener {
private Gson gson = buildGson();
private boolean isFirstStatus = true;
private EventHub eventHub;
private static Gson buildGson() {
return new GsonBuilder()
.registerTypeAdapter(Spanned.class, new SpannedTypeAdapter())
.create();
}
public TimelineStreamingListener(EventHub eventHub) {
this.eventHub = eventHub;
}
@Override
public void onOpen(WebSocket webSocket, Response response) {
Log.d("StreamingListener", "Stream connected.");
}
@Override
public void onMessage(WebSocket webSocket, String text) {
StreamEvent event = gson.fromJson(text, StreamEvent.class);
String payload = event.getPayload();
switch (event.getEvent()) {
case UPDATE:
Status status = gson.fromJson(payload, Status.class);
eventHub.dispatch(new StreamUpdateEvent(status, isFirstStatus));
isFirstStatus = false;
break;
case DELETE:
eventHub.dispatch(new StatusDeletedEvent(payload));
break;
}
}
@Override
public void onClosed(WebSocket webSocket, int code, String reason) {
Log.d("StreamingListener", "Stream closed.");
}
}