diff --git a/app/src/main/java/com/github/gotify/MissedMessageUtil.java b/app/src/main/java/com/github/gotify/MissedMessageUtil.java new file mode 100644 index 0000000..621b884 --- /dev/null +++ b/app/src/main/java/com/github/gotify/MissedMessageUtil.java @@ -0,0 +1,75 @@ +package com.github.gotify; + +import com.github.gotify.api.Api; +import com.github.gotify.api.Callback; +import com.github.gotify.client.ApiClient; +import com.github.gotify.client.ApiException; +import com.github.gotify.client.api.MessageApi; +import com.github.gotify.client.model.Message; +import com.github.gotify.client.model.PagedMessages; +import com.github.gotify.log.Log; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class MissedMessageUtil { + static final int NO_MESSAGES = 0; + + private final MessageApi api; + + public MissedMessageUtil(ApiClient client) { + api = new MessageApi(client); + } + + public void lastReceivedMessage(Callback.SuccessCallback successCallback) { + Api.withLogging((cb) -> api.getMessagesAsync(1, 0, cb)) + .handle( + (messages) -> { + if (messages.getMessages().size() == 1) { + successCallback.onSuccess(messages.getMessages().get(0).getId()); + } else { + successCallback.onSuccess(NO_MESSAGES); + } + }, + (e) -> {}); + } + + public List missingMessages(int till) { + List result = new ArrayList<>(); + try { + + Integer since = null; + while (true) { + PagedMessages pagedMessages = api.getMessages(10, since); + List messages = pagedMessages.getMessages(); + List filtered = filter(messages, till); + result.addAll(filtered); + if (messages.size() != filtered.size() + || messages.size() == 0 + || pagedMessages.getPaging().getNext() == null) { + break; + } + since = pagedMessages.getPaging().getSince(); + } + } catch (ApiException e) { + Log.e("cannot retrieve missing messages", e); + } + Collections.reverse(result); + return result; + } + + private List filter(List messages, int till) { + List result = new ArrayList<>(); + + for (Message message : messages) { + if (message.getId() > till) { + result.add(message); + } else { + break; + } + } + + return result; + } +}