use of com.fanap.podchat.cachemodel.ThreadVo in project pod-chat-android-sdk by FanapSoft.
the class ChatCore method handleAddParticipant.
private void handleAddParticipant(ChatMessage chatMessage, String messageUniqueId) {
Thread thread = gson.fromJson(chatMessage.getContent(), Thread.class);
if (cache) {
ThreadVo threadVo = gson.fromJson(chatMessage.getContent(), ThreadVo.class);
List<CacheParticipant> cacheParticipants = threadVo.getParticipants();
if (!Util.isNullOrEmpty(cacheParticipants))
messageDatabaseHelper.saveParticipants(cacheParticipants, thread.getId(), getExpireAmount());
}
ChatResponse<ResultAddParticipant> chatResponse = ParticipantsManager.prepareAddParticipantResponse(chatMessage, thread);
String jsonAddParticipant = gson.toJson(chatResponse);
if (sentryResponseLog) {
showLog("RECEIVE_ADD_PARTICIPANT", jsonAddParticipant);
} else {
showLog("RECEIVE_ADD_PARTICIPANT");
}
messageCallbacks.remove(messageUniqueId);
listenerManager.callOnThreadAddParticipant(jsonAddParticipant, chatResponse);
}
use of com.fanap.podchat.cachemodel.ThreadVo 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.ThreadVo in project pod-chat-android-sdk by FanapSoft.
the class MessageDatabaseHelper method getCallHistory.
public void getCallHistory(GetCallHistoryRequest request, FunctionalListener callback) throws RoomIntegrityException {
if (!canUseDatabase())
throw new RoomIntegrityException();
worker(() -> {
request.setCount(request.getCount() > 0 ? request.getCount() : 50);
List<CacheCall> cacheCalls = new ArrayList<>();
long contentCount = 0;
if (request.getCreatorCoreUserId() > 0) {
cacheCalls = messageDao.getCachedCallByUserId(request.getCount(), request.getOffset(), request.getCreatorCoreUserId(), request.getType());
contentCount = messageDao.getCountOfCachedCallByUserId(request.getCreatorCoreUserId(), request.getType());
} else if (!Util.isNullOrEmpty(request.getCallIds())) {
if (request.getCallIds().size() > 1) {
String ids = "";
for (Long callId : request.getCallIds()) {
ids = ids.concat("" + callId + ", ");
}
ids = ids.substring(0, ids.lastIndexOf(","));
cacheCalls = messageDao.getCachedCallByIds(request.getCount(), request.getOffset(), ids);
contentCount = messageDao.getCountOfCachedCallByIds(ids);
} else {
CacheCall cacheCall = messageDao.getCachedCallById(request.getCallIds().get(0));
contentCount = 1;
cacheCalls.add(cacheCall);
}
} else if (request.getThreadId() != null && request.getThreadId() > 0) {
cacheCalls = messageDao.getCachedCallByTypeAndThreadId(request.getCount(), request.getOffset(), request.getType(), request.getThreadId());
contentCount = messageDao.getCountOfCachedCallByTypeAndThreadId(request.getType(), request.getThreadId());
} else {
cacheCalls = messageDao.getCachedCallByType(request.getCount(), request.getOffset(), request.getType());
contentCount = messageDao.getCountOfCachedCallByType(request.getType());
}
ArrayList<CallVO> callVOList = new ArrayList<>();
for (CacheCall cacheCall : cacheCalls) {
@Nullable CacheCallParticipant callPartnerParticipant = messageDao.getCachedCallParticipant(cacheCall.getPartnerParticipantId());
if (callPartnerParticipant != null) {
Participant partnerParticipant = callPartnerParticipant.toParticipant();
ChatProfileVO chatProfileVO = messageDao.getChatProfileVOById(partnerParticipant.getId());
partnerParticipant.setChatProfileVO(chatProfileVO);
cacheCall.setPartnerParticipantVO(partnerParticipant);
}
if (cacheCall.isGroup()) {
List<CacheCallParticipant> cacheCallParticipants = messageDao.getCachedCallParticipants(cacheCall.getId());
if (!Util.isNullOrEmpty(cacheCallParticipants)) {
List<Participant> callParticipantsList = new ArrayList<>();
for (CacheCallParticipant cacheCll : cacheCallParticipants) {
Participant callParticipant = cacheCll.toParticipant();
ChatProfileVO profileVO = messageDao.getChatProfileVOById(callParticipant.getId());
callParticipant.setChatProfileVO(profileVO);
callParticipantsList.add(callParticipant);
}
cacheCall.setCallParticipants(callParticipantsList);
}
}
CallVO call = cacheCall.toCallVo();
if (cacheCall.getThreadId() > 0) {
ThreadVo threadVo = messageDao.getThreadById(cacheCall.getThreadId());
Thread thread;
if (threadVo != null) {
thread = threadVoToThreadMapper(threadVo, null);
} else {
thread = new Thread();
thread.setId(cacheCall.getThreadId());
}
call.setConversationVO(thread);
}
callVOList.add(call);
}
callback.onWorkDone(contentCount, callVOList);
});
}
use of com.fanap.podchat.cachemodel.ThreadVo in project pod-chat-android-sdk by FanapSoft.
the class MessageDatabaseHelper method deleteMessage.
public void deleteMessage(long id, long subjectId) {
// if this message is thread last message
// get previous message and then delete this
// then set previous message as last message
worker(() -> {
if (subjectId > 0) {
ThreadVo threadVo = messageDao.getThreadById(subjectId);
if (threadVo != null) {
long threadLastMessageId = threadVo.getLastMessageVOId();
if (threadLastMessageId == id && threadLastMessageId > 0) {
// this is last message
List<CacheMessageVO> cacheMessage = messageDao.getMessage(id);
if (!Util.isNullOrEmpty(cacheMessage)) {
long previousMessageId = cacheMessage.get(0).getPreviousId();
// Get previous message
List<CacheMessageVO> previousMessage = messageDao.getMessage(previousMessageId);
if (!Util.isNullOrEmpty(previousMessage)) {
String message = previousMessage.get(0).getMessage();
messageDao.updateThreadLastMessageVOId(subjectId, previousMessageId, message);
}
}
}
}
// delete from pinned message
PinMessageVO pinnedMessage = messageDao.getThreadPinnedMessage(subjectId);
if (pinnedMessage != null && pinnedMessage.getMessageId() == id) {
messageDao.deletePinnedMessageById(id);
}
}
messageDao.deleteMessage(id);
});
}
Aggregations