@Override public synchronized String getLastReceivedMessageId() throws Exception { fetchEntries(); final String savedState = ApptentiveMessage.State.saved.name(); for (int i = messageEntries.size() - 1; i >= 0; --i) { final MessageEntry entry = messageEntries.get(i); if (StringUtils.equal(entry.state, savedState) && entry.id != null) { return entry.id; } } return null; }
private List<ApptentiveMessage> getAllMessages(SQLiteDatabase db) { List<ApptentiveMessage> messages = new ArrayList<>(); Cursor cursor = null; try { cursor = db.rawQuery(SQL_SELECT_MESSAGES_IN_ORDER, null); while (cursor.moveToNext()) { String json = cursor.getString(6); ApptentiveMessage message = MessageFactory.fromJson(json); if (message == null) { ApptentiveLog.e(MESSAGES, "Error parsing Record json from database: %s", json); continue; } message.setId(cursor.getString(1)); message.setCreatedAt(cursor.getDouble(2)); message.setNonce(cursor.getString(3)); message.setState(ApptentiveMessage.State.parse(cursor.getString(4))); message.setRead(cursor.getInt(5) == TRUE); messages.add(message); } } finally { ensureClosed(cursor); } return messages; } }
@Override public synchronized void addOrUpdateMessages(ApptentiveMessage... apptentiveMessages) { fetchEntries(); for (ApptentiveMessage apptentiveMessage : apptentiveMessages) { MessageEntry existing = findMessageEntry(apptentiveMessage); if (existing != null) { // Update existing.id = apptentiveMessage.getId(); existing.state = apptentiveMessage.getState().name(); if (apptentiveMessage.isRead()) { // A message can't be unread after being read. existing.isRead = true; } existing.json = apptentiveMessage.getJsonObject().toString(); } else { // Insert MessageEntry entry = new MessageEntry(); entry.id = apptentiveMessage.getId(); entry.clientCreatedAt = apptentiveMessage.getClientCreatedAt(); entry.nonce = apptentiveMessage.getNonce(); entry.state = apptentiveMessage.getState().name(); entry.isRead = apptentiveMessage.isRead(); entry.json = apptentiveMessage.getJsonObject().toString(); messageEntries.add(entry); } } writeToFile(); }
@Override public synchronized void updateMessage(ApptentiveMessage apptentiveMessage) { fetchEntries(); MessageEntry entry = findMessageEntry(apptentiveMessage); if (entry != null) { entry.id = apptentiveMessage.getId(); entry.clientCreatedAt = apptentiveMessage.getClientCreatedAt(); entry.nonce = apptentiveMessage.getNonce(); entry.state = apptentiveMessage.getState().name(); if (apptentiveMessage.isRead()) { // A apptentiveMessage can't be unread after being read. entry.isRead = true; } entry.json = apptentiveMessage.getJsonObject().toString(); writeToFile(); } }
@Override public synchronized List<ApptentiveMessage> getAllMessages() throws Exception { fetchEntries(); List<ApptentiveMessage> apptentiveMessages = new ArrayList<>(); for (MessageEntry entry : messageEntries) { ApptentiveMessage apptentiveMessage = MessageFactory.fromJson(entry.json); if (apptentiveMessage == null) { ApptentiveLog.e(MESSAGES, "Error parsing Record json from database: %s", entry.json); continue; } apptentiveMessage.setState(ApptentiveMessage.State.parse(entry.state)); apptentiveMessage.setRead(entry.isRead); apptentiveMessages.add(apptentiveMessage); } return apptentiveMessages; }
public static State parse(String state) { try { return State.valueOf(state); } catch (IllegalArgumentException e) { ApptentiveLog.v(MESSAGES, "Error parsing unknown ApptentiveMessage.State: " + state); logException(e); } return unknown; } }