use of com.fanap.podchat.cachemodel.CacheMessageVO in project pod-chat-android-sdk by FanapSoft.
the class MessageDatabaseHelper method prepareMessageVOs.
private void prepareMessageVOs(List<MessageVO> messageVOS, List<CacheMessageVO> cacheMessageVOS) {
for (CacheMessageVO cacheMessageVO : cacheMessageVOS) {
Participant participant = null;
ReplyInfoVO replyInfoVO = null;
ForwardInfo forwardInfo = null;
ConversationSummery conversationSummery = null;
if (cacheMessageVO.getForwardInfoId() != null) {
cacheMessageVO.setForwardInfo(messageDao.getForwardInfo(cacheMessageVO.getForwardInfoId()));
}
if (cacheMessageVO.getParticipantId() != null) {
CacheParticipant cacheParticipant = messageDao.getParticipant(cacheMessageVO.getParticipantId());
if (cacheParticipant != null) {
ChatProfileVO profileVO = messageDao.getChatProfileVOById(cacheParticipant.getId());
cacheParticipant.setChatProfileVO(profileVO);
participant = cacheToParticipantMapper(cacheParticipant, null, null);
} else {
if (cacheMessageVO.getConversationId() > 0)
messageDao.deleteParticipant(cacheMessageVO.getConversationId(), cacheMessageVO.getParticipantId());
}
}
ThreadVo thread = messageDao.getThreadById(cacheMessageVO.getConversationId());
cacheMessageVO.setConversation(thread);
if (cacheMessageVO.getReplyInfoVOId() != null) {
CacheReplyInfoVO cacheReplyInfoVO = messageDao.getReplyInfo(cacheMessageVO.getReplyInfoVOId());
if (cacheReplyInfoVO != null) {
replyInfoVO = new ReplyInfoVO(cacheReplyInfoVO.getRepliedToMessageId(), cacheReplyInfoVO.getMessageType(), cacheReplyInfoVO.isDeleted(), cacheReplyInfoVO.getRepliedToMessage(), cacheReplyInfoVO.getSystemMetadata(), cacheReplyInfoVO.getMetadata(), cacheReplyInfoVO.getMessage(), cacheReplyInfoVO.getRepliedToMessageTime(), cacheReplyInfoVO.getRepliedToMessageNanos());
if (cacheReplyInfoVO.getParticipantId() > 0) {
CacheParticipant cacheParticipant = messageDao.getParticipant(cacheReplyInfoVO.getParticipantId());
if (cacheParticipant != null) {
Participant replyParticipant = cacheToParticipantMapper(cacheParticipant, false, null);
replyInfoVO.setParticipant(replyParticipant);
}
}
}
}
if (cacheMessageVO.getForwardInfo() != null) {
CacheForwardInfo cacheForwardInfo = messageDao.getForwardInfo(cacheMessageVO.getForwardInfoId());
if (cacheForwardInfo != null) {
if (cacheForwardInfo.getParticipantId() != null) {
CacheParticipant cacheParticipant = messageDao.getParticipant(cacheForwardInfo.getParticipantId());
if (cacheParticipant != null) {
participant = cacheToParticipantMapper(cacheParticipant, null, null);
}
}
if (Util.isNullOrEmpty(cacheForwardInfo.getConversationId())) {
// todo check it again
conversationSummery = messageDao.getConversationSummery(cacheForwardInfo.getConversationId());
}
forwardInfo = new ForwardInfo(participant, conversationSummery);
}
}
Thread msgThread = threadVoToThreadMapper(cacheMessageVO.getConversation(), null);
MessageVO messageVO = cacheMessageVoToMessageVoMapper(participant, replyInfoVO, forwardInfo, cacheMessageVO);
messageVO.setConversation(msgThread);
messageVOS.add(messageVO);
}
}
use of com.fanap.podchat.cachemodel.CacheMessageVO in project pod-chat-android-sdk by FanapSoft.
the class MessageDatabaseHelper method saveMessage.
public void saveMessage(@NonNull MessageVO message, long threadId, boolean editedMessage) {
worker(() -> {
CacheMessageVO cacheMessageVO = new CacheMessageVO(message);
if (cacheMessageVO.getParticipant() != null) {
cacheMessageVO.setParticipantId(cacheMessageVO.getParticipant().getId());
messageDao.insertParticipant(cacheMessageVO.getParticipant());
}
if (cacheMessageVO.getForwardInfo() != null) {
cacheMessageVO.setForwardInfoId(cacheMessageVO.getForwardInfo().getId());
messageDao.insertForwardInfo(cacheMessageVO.getForwardInfo());
if (cacheMessageVO.getForwardInfo().getParticipant() != null) {
cacheMessageVO.getForwardInfo().setParticipantId(cacheMessageVO.getForwardInfo().getParticipant().getId());
messageDao.insertParticipant(cacheMessageVO.getForwardInfo().getParticipant());
}
}
if (cacheMessageVO.getReplyInfoVO() != null) {
cacheMessageVO.setReplyInfoVOId(cacheMessageVO.getReplyInfoVO().getRepliedToMessageId());
if (cacheMessageVO.getReplyInfoVO().getParticipant() != null) {
cacheMessageVO.getReplyInfoVO().setParticipantId(cacheMessageVO.getReplyInfoVO().getParticipant().getId());
messageDao.insertParticipant(cacheMessageVO.getReplyInfoVO().getParticipant());
}
messageDao.insertReplyInfoVO(cacheMessageVO.getReplyInfoVO());
}
// update thread last message id
// check if message is new or edited message is thread last message
boolean shouldUpdateIfEdited = false;
if (editedMessage) {
long lastMessageId = messageDao.getLastMessageId(threadId);
if (lastMessageId > 0 && lastMessageId == cacheMessageVO.getId()) {
shouldUpdateIfEdited = true;
}
}
List<String> hashtags = getHashtags(cacheMessageVO.getMessage());
if (hashtags != null && hashtags.size() > 0)
cacheMessageVO.setHashtags(hashtags);
messageDao.insertMessage(cacheMessageVO);
boolean shouldUpdateLastMessage = !editedMessage || shouldUpdateIfEdited;
if (shouldUpdateLastMessage)
messageDao.updateThreadLastMessageVOId(threadId, cacheMessageVO.getId(), cacheMessageVO.getMessage());
});
}
use of com.fanap.podchat.cachemodel.CacheMessageVO in project pod-chat-android-sdk by FanapSoft.
the class MessageDatabaseHelper method getMentionList.
public void getMentionList(RequestGetMentionList request, FunctionalListener listener) {
worker(() -> {
List<MessageVO> messageVOS = new ArrayList<>();
List<CacheMessageVO> cacheMessageVOS = new ArrayList<>();
String condition;
condition = request.getUnreadMentioned() != null && request.getUnreadMentioned() ? " and seen = false " : " ";
String rawQuery = "SELECT * FROM CacheMessageVO WHERE threadVoId = " + request.getThreadId() + " and mentioned = true" + condition + "ORDER BY timeStamp ASC LIMIT " + request.getCount() + " OFFSET " + request.getOffset();
SupportSQLiteQuery sqLiteQuery = new SimpleSQLiteQuery(rawQuery);
cacheMessageVOS = messageDao.getRawHistory(sqLiteQuery);
String contentCountQuery = "SELECT count(*) FROM CacheMessageVO WHERE threadVoId = " + request.getThreadId() + " and mentioned = true" + condition;
long contentCount = messageDao.getHistoryContentCount(new SimpleSQLiteQuery(contentCountQuery));
prepareMessageVOs(messageVOS, cacheMessageVOS);
if (messageVOS.size() > 0)
listener.onWorkDone(messageVOS, contentCount);
});
}
use of com.fanap.podchat.cachemodel.CacheMessageVO in project pod-chat-android-sdk by FanapSoft.
the class MessageDatabaseHelper method updateMessage.
public void updateMessage(MessageVO lastMessage, long threadId) {
worker(() -> {
CacheMessageVO cacheMessageVO = new CacheMessageVO(lastMessage);
cacheMessageVO.setThreadVoId(threadId);
if (cacheMessageVO.getParticipant() != null) {
cacheMessageVO.setParticipantId(cacheMessageVO.getParticipant().getId());
messageDao.insertParticipant(cacheMessageVO.getParticipant());
}
if (cacheMessageVO.getForwardInfo() != null) {
cacheMessageVO.setForwardInfoId(cacheMessageVO.getForwardInfo().getId());
messageDao.insertForwardInfo(cacheMessageVO.getForwardInfo());
if (cacheMessageVO.getForwardInfo().getParticipant() != null) {
cacheMessageVO.getForwardInfo().setParticipantId(cacheMessageVO.getForwardInfo().getParticipant().getId());
messageDao.insertParticipant(cacheMessageVO.getForwardInfo().getParticipant());
}
}
if (cacheMessageVO.getReplyInfoVO() != null) {
cacheMessageVO.setReplyInfoVOId(cacheMessageVO.getReplyInfoVO().getRepliedToMessageId());
if (cacheMessageVO.getReplyInfoVO().getParticipant() != null) {
cacheMessageVO.getReplyInfoVO().setParticipantId(cacheMessageVO.getReplyInfoVO().getParticipant().getId());
messageDao.insertParticipant(cacheMessageVO.getReplyInfoVO().getParticipant());
}
messageDao.insertReplyInfoVO(cacheMessageVO.getReplyInfoVO());
}
List<String> hashtags = getHashtags(cacheMessageVO.getMessage());
if (hashtags != null && hashtags.size() > 0)
cacheMessageVO.setHashtags(hashtags);
messageDao.updateMessage(cacheMessageVO);
});
}
use of com.fanap.podchat.cachemodel.CacheMessageVO in project pod-chat-android-sdk by FanapSoft.
the class MessageDatabaseHelper method getHistories.
public void getHistories(@NonNull History history, long threadId, OnWorkDone listener) {
List<MessageVO> messageVOS = new ArrayList<>();
List<CacheMessageVO> cacheMessageVOS;
long fromTime = history.getFromTime();
long fromTimeNanos = history.getFromTimeNanos();
long toTime = history.getToTime();
long toTimeNanos = history.getToTimeNanos();
long messageId = history.getId();
long offset = history.getOffset();
long count = history.getCount();
int messageType = history.getMessageType();
String query = history.getQuery();
String order = history.getOrder();
offset = offset >= 0 ? offset : 0;
count = count > 0 ? count : 50;
if (Util.isNullOrEmpty(order)) {
order = "desc";
}
String rawQuery = "SELECT * FROM CacheMessageVO WHERE threadVoId =" + threadId;
rawQuery = addMessageIdIfExist(messageId, rawQuery);
rawQuery = addFromTimeIfExist(fromTime, fromTimeNanos, rawQuery);
rawQuery = addToTimeIfExist(toTime, toTimeNanos, rawQuery);
rawQuery = addQueryIfExist(query, rawQuery);
rawQuery = addMessageTypeIfExist(messageType, rawQuery);
long contentCount = messageDao.getHistoryContentCount(new SimpleSQLiteQuery(rawQuery.replaceFirst("SELECT \\* ", "SELECT COUNT(ID) ")));
rawQuery = addOrderAndLimitAndOffset(offset, count, order, rawQuery);
SupportSQLiteQuery sqLiteQuery = new SimpleSQLiteQuery(rawQuery);
cacheMessageVOS = messageDao.getRawHistory(sqLiteQuery);
prepareMessageVOs(messageVOS, cacheMessageVOS);
List<Sending> sendingList = getAllSendingQueueByThreadId(threadId);
List<Uploading> uploadingList = getAllUploadingQueueByThreadId(threadId);
List<Failed> failedList = getAllWaitQueueCacheByThreadId(threadId);
ChatResponse<ResultHistory> chatResponse = new ChatResponse<>();
chatResponse.setCache(true);
ResultHistory resultHistory = new ResultHistory();
resultHistory.setHistory(messageVOS);
resultHistory.setNextOffset(history.getOffset() + messageVOS.size());
resultHistory.setContentCount(contentCount);
if (messageVOS.size() + history.getOffset() < contentCount) {
resultHistory.setHasNext(true);
} else {
resultHistory.setHasNext(false);
}
resultHistory.setHistory(messageVOS);
resultHistory.setSending(sendingList);
resultHistory.setUploadingQueue(uploadingList);
resultHistory.setFailed(failedList);
chatResponse.setErrorCode(0);
chatResponse.setHasError(false);
chatResponse.setErrorMessage("");
chatResponse.setResult(resultHistory);
chatResponse.setCache(true);
chatResponse.setSubjectId(threadId);
listener.onWorkDone(chatResponse);
}
Aggregations