use of net.iGap.realm.RealmRoomMessageContact in project iGap-Android by KianIranian-STDG.
the class MessageDataStorage method createForwardMessage.
public void createForwardMessage(final long destinationRoomId, final long newMessageId, MessageObject sourceMessage, boolean isMessage, DatabaseDelegate databaseDelegate) {
storageQueue.postRunnable(() -> {
FileLog.i(TAG, "createForwardMessage: " + destinationRoomId + " " + newMessageId);
try {
final RealmRoomMessage[] forwardedMessage = new RealmRoomMessage[1];
MessageObject messageObject = null;
RealmRoomMessage copyMessage = null;
database.beginTransaction();
if (isMessage && sourceMessage.forwardedMessage == null) {
forwardedMessage[0] = database.createObject(RealmRoomMessage.class, newMessageId);
forwardedMessage[0].setCreateTime(TimeUtils.currentLocalTime());
forwardedMessage[0].setRoomId(destinationRoomId);
forwardedMessage[0].setStatus(ProtoGlobal.RoomMessageStatus.SENDING.toString());
forwardedMessage[0].setMessageType(ProtoGlobal.RoomMessageType.forNumber(sourceMessage.messageType));
forwardedMessage[0].setMessage(sourceMessage.message);
if (sourceMessage.attachment != null) {
AttachmentObject attObject = sourceMessage.attachment;
LocalFileType type = attObject.filePath == null ? LocalFileType.THUMBNAIL : LocalFileType.FILE;
String filePath = attObject.filePath != null ? attObject.filePath : attObject.thumbnailPath;
forwardedMessage[0].setAttachment(newMessageId, filePath, attObject.width, attObject.height, attObject.size, attObject.name, attObject.duration, attObject.token, type);
}
if (sourceMessage.contact != null) {
RoomContactObject contactObject = sourceMessage.contact;
ProtoGlobal.RoomMessageContact.Builder builder = ProtoGlobal.RoomMessageContact.newBuilder();
builder.setPhone(0, contactObject.phones.get(0));
builder.setFirstName(contactObject.firstName);
builder.setLastName(contactObject.lastName);
builder.setEmail(0, contactObject.emails.get(0));
RealmRoomMessageContact roomMessageContact = RealmRoomMessageContact.put(database, builder.build());
forwardedMessage[0].setRoomMessageContact(roomMessageContact);
}
forwardedMessage[0].setUserId(AccountManager.getInstance().getCurrentUser().getId());
database.copyToRealmOrUpdate(forwardedMessage[0]);
copyMessage = database.copyFromRealm(forwardedMessage[0]);
} else {
RealmRoomMessage roomMessage = database.where(RealmRoomMessage.class).equalTo("messageId", sourceMessage.id).findFirst();
if (roomMessage != null) {
forwardedMessage[0] = database.createObject(RealmRoomMessage.class, newMessageId);
if (roomMessage.getForwardMessage() != null) {
forwardedMessage[0].setForwardMessage(roomMessage.getForwardMessage());
forwardedMessage[0].setHasMessageLink(roomMessage.getForwardMessage().getHasMessageLink());
} else {
forwardedMessage[0].setForwardMessage(roomMessage);
forwardedMessage[0].setHasMessageLink(roomMessage.getHasMessageLink());
}
forwardedMessage[0].setCreateTime(TimeUtils.currentLocalTime());
forwardedMessage[0].setMessageType(ProtoGlobal.RoomMessageType.TEXT);
forwardedMessage[0].setRoomId(destinationRoomId);
forwardedMessage[0].setStatus(ProtoGlobal.RoomMessageStatus.SENDING.toString());
forwardedMessage[0].setUserId(AccountManager.getInstance().getCurrentUser().getId());
copyMessage = database.copyFromRealm(forwardedMessage[0]);
}
}
messageObject = MessageObject.create(copyMessage);
RealmRoomMessage realmSourceMessage = database.where(RealmRoomMessage.class).equalTo("messageId", sourceMessage.id).findFirst();
assert realmSourceMessage != null;
RealmRoomMessage copyOfSource = database.copyFromRealm(realmSourceMessage);
database.commitTransaction();
MessageObject finalMessageObject = messageObject;
RealmRoomMessage finalCopyMessage = copyMessage;
G.runOnUiThread(() -> {
databaseDelegate.run(finalMessageObject, finalCopyMessage, copyOfSource.getRoomId(), copyOfSource.getMessageId());
});
} catch (Exception e) {
FileLog.e(e);
}
});
}
use of net.iGap.realm.RealmRoomMessageContact in project iGap-Android by KianIranian-STDG.
the class FragmentChat method sendMessage.
/**
* *************************** Messaging ***************************
*/
private void sendMessage(int requestCode, String filePath) {
String message;
if (getWrittenMessage().length() > Config.MAX_TEXT_ATTACHMENT_LENGTH)
message = getWrittenMessage().substring(0, Config.MAX_TEXT_ATTACHMENT_LENGTH);
else
message = getWrittenMessage();
String mainMessage = getWrittenMessage();
if (filePath == null || (filePath.length() == 0 && requestCode != AttachFile.request_code_contact_phone)) {
clearReplyView();
return;
}
showPopup(-1);
if (isShowLayoutUnreadMessage) {
removeLayoutUnreadMessage();
}
long messageId = AppUtils.makeRandomId();
final long updateTime = TimeUtils.currentLocalTime();
ProtoGlobal.RoomMessageType messageType = null;
String fileName;
long duration = 0;
long fileSize;
int[] imageDimens = { 0, 0 };
final long senderID = AccountManager.getInstance().getCurrentUser().getId();
/**
* check if path is uri detect real path from uri
*/
String path = getFilePathFromUri(Uri.parse(filePath));
if (path != null) {
filePath = path;
}
if (requestCode == AttachFile.requestOpenGalleryForVideoMultipleSelect && filePath.toLowerCase().endsWith(".gif")) {
requestCode = AttachFile.requestOpenGalleryForImageMultipleSelect;
}
fileName = new File(filePath).getName();
fileSize = new File(filePath).length();
RealmRoomMessage roomMessage = new RealmRoomMessage();
StructMessageInfo structMessageInfoNew = new StructMessageInfo(roomMessage);
switch(requestCode) {
case IntentRequests.REQ_CROP:
case AttachFile.requestOpenGalleryForImageMultipleSelect:
if (!filePath.toLowerCase().endsWith(".gif")) {
if (isMessageWrote()) {
messageType = IMAGE_TEXT;
} else {
messageType = ProtoGlobal.RoomMessageType.IMAGE;
}
} else {
if (isMessageWrote()) {
messageType = GIF_TEXT;
} else {
messageType = ProtoGlobal.RoomMessageType.GIF;
}
}
imageDimens = AndroidUtils.getImageDimens(filePath);
break;
case AttachFile.request_code_TAKE_PICTURE:
if (AndroidUtils.getImageDimens(filePath)[0] == 0 && AndroidUtils.getImageDimens(filePath)[1] == 0) {
G.handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, "Picture Not Loaded", Toast.LENGTH_SHORT).show();
}
});
return;
}
imageDimens = AndroidUtils.getImageDimens(filePath);
if (isMessageWrote()) {
messageType = IMAGE_TEXT;
} else {
messageType = ProtoGlobal.RoomMessageType.IMAGE;
}
break;
case AttachFile.requestOpenGalleryForVideoMultipleSelect:
case request_code_VIDEO_CAPTURED:
// mainVideoPath
duration = AndroidUtils.getAudioDuration(G.fragmentActivity, filePath) / 1000;
if (isMessageWrote()) {
messageType = VIDEO_TEXT;
} else {
messageType = VIDEO;
}
break;
case AttachFile.request_code_pic_audi:
duration = AndroidUtils.getAudioDuration(G.fragmentActivity, filePath) / 1000;
if (isMessageWrote()) {
messageType = ProtoGlobal.RoomMessageType.AUDIO_TEXT;
} else {
messageType = ProtoGlobal.RoomMessageType.AUDIO;
}
String songArtist = AndroidUtils.getAudioArtistName(filePath);
long songDuration = AndroidUtils.getAudioDuration(G.fragmentActivity, filePath);
structMessageInfoNew.setSongArtist(songArtist);
structMessageInfoNew.setSongLength(songDuration);
break;
case AttachFile.request_code_pic_file:
case AttachFile.request_code_open_document:
if (isMessageWrote()) {
messageType = ProtoGlobal.RoomMessageType.FILE_TEXT;
} else {
messageType = ProtoGlobal.RoomMessageType.FILE;
}
break;
case AttachFile.request_code_contact_phone:
if (latestUri == null) {
break;
}
messageType = CONTACT;
ContactUtils contactUtils = new ContactUtils(G.fragmentActivity, latestUri);
String name = contactUtils.retrieveName();
String number = contactUtils.retrieveNumber();
structMessageInfoNew.setContactValues(name, "", number);
break;
case AttachFile.request_code_paint:
imageDimens = AndroidUtils.getImageDimens(filePath);
if (isMessageWrote()) {
messageType = IMAGE_TEXT;
} else {
messageType = ProtoGlobal.RoomMessageType.IMAGE;
}
break;
}
final ProtoGlobal.RoomMessageType finalMessageType = messageType;
final String finalFilePath = filePath;
final String finalFileName = fileName;
final long finalDuration = duration;
final long finalFileSize = fileSize;
final int[] finalImageDimens = imageDimens;
roomMessage.setMessageId(messageId);
roomMessage.setMessageType(finalMessageType);
roomMessage.setMessage(message);
DbManager.getInstance().doRealmTask(realm -> {
RealmRoomMessage.addTimeIfNeed(roomMessage, realm);
});
RealmRoomMessage.isEmojiInText(roomMessage, message);
roomMessage.setStatus(ProtoGlobal.RoomMessageStatus.SENDING.toString());
roomMessage.setRoomId(mRoomId);
RealmAttachment realmAttachment = new RealmAttachment();
realmAttachment.setId(messageId);
realmAttachment.setLocalFilePath(finalFilePath);
realmAttachment.setWidth(finalImageDimens[0]);
realmAttachment.setHeight(finalImageDimens[1]);
realmAttachment.setSize(finalFileSize);
realmAttachment.setName(finalFileName);
realmAttachment.setDuration(finalDuration);
if (messageType != CONTACT) {
roomMessage.setAttachment(realmAttachment);
}
roomMessage.setUserId(senderID);
roomMessage.setAuthorHash(RealmUserInfo.getCurrentUserAuthorHash());
roomMessage.setShowMessage(true);
roomMessage.setCreateTime(updateTime);
if (isReply()) {
MessageObject replyLayoutObject = (MessageObject) mReplayLayout.getTag();
RealmRoomMessage replyMessage = new RealmRoomMessage();
replyMessage.setUserId(replyLayoutObject.userId);
replyMessage.setUpdateTime(replyLayoutObject.updateTime);
replyMessage.setStatusVersion(replyLayoutObject.statusVersion);
replyMessage.setShowTime(replyLayoutObject.needToShow);
replyMessage.setRoomId(replyLayoutObject.roomId);
replyMessage.setPreviousMessageId(replyLayoutObject.previousMessageId);
replyMessage.setFutureMessageId(replyLayoutObject.futureMessageId);
replyMessage.setMessageId(replyLayoutObject.id);
replyMessage.setEdited(replyLayoutObject.edited);
replyMessage.setDeleted(replyLayoutObject.deleted);
replyMessage.setCreateTime(replyLayoutObject.createTime);
replyMessage.setMessage(replyLayoutObject.message);
replyMessage.setMessageType(ProtoGlobal.RoomMessageType.forNumber(replyLayoutObject.messageType));
replyMessage.setStatus(ProtoGlobal.RoomMessageStatus.forNumber(replyLayoutObject.status).toString());
if (replyLayoutObject.getAttachment() != null) {
AttachmentObject attachmentObject = replyLayoutObject.getAttachment();
RealmAttachment replyToAttachment = new RealmAttachment();
replyToAttachment.setId(replyLayoutObject.id);
replyToAttachment.setLocalFilePath(attachmentObject.filePath);
replyToAttachment.setWidth(attachmentObject.width);
replyToAttachment.setHeight(attachmentObject.height);
replyToAttachment.setSize(attachmentObject.size);
replyToAttachment.setName(attachmentObject.name);
replyToAttachment.setDuration(attachmentObject.duration);
replyMessage.setAttachment(replyToAttachment);
}
// TODO: 1/13/21 MESSAGE_REFACTOR
roomMessage.setReplyTo(replyMessage);
}
long replyMessageId = 0;
if (roomMessage.getReplyTo() != null) {
if (roomMessage.getReplyTo().getMessageId() < 0) {
replyMessageId = roomMessage.getReplyTo().getMessageId() * (-1);
} else {
replyMessageId = roomMessage.getReplyTo().getMessageId();
}
}
if (chatType == CHANNEL) {
RealmChannelExtra realmChannelExtra = new RealmChannelExtra();
realmChannelExtra.setMessageId(messageId);
if (RealmRoom.showSignature(mRoomId)) {
realmChannelExtra.setSignature(AccountManager.getInstance().getCurrentUser().getName());
} else {
realmChannelExtra.setSignature("");
}
realmChannelExtra.setThumbsUp("0");
realmChannelExtra.setThumbsDown("0");
realmChannelExtra.setViewsLabel("1");
roomMessage.setChannelExtra(realmChannelExtra);
}
if (finalMessageType == CONTACT) {
if (latestUri != null) {
ContactUtils contactUtils = new ContactUtils(G.fragmentActivity, latestUri);
String name = contactUtils.retrieveName();
String number = contactUtils.retrieveNumber();
RealmRoomMessageContact realmRoomMessageContact = new RealmRoomMessageContact();
realmRoomMessageContact.setId(AppUtils.makeRandomId());
realmRoomMessageContact.setFirstName(name);
realmRoomMessageContact.setLastName("");
RealmList<RealmString> listString = new RealmList<>();
RealmString phoneRealmStr = new RealmString();
phoneRealmStr.setString(number);
listString.add(phoneRealmStr);
realmRoomMessageContact.setPhones(listString);
roomMessage.setRoomMessageContact(realmRoomMessageContact);
}
}
String makeThumbnailFilePath = "";
if (finalMessageType == VIDEO || finalMessageType == VIDEO_TEXT) {
// mainVideoPath
makeThumbnailFilePath = finalFilePath;
}
if (finalMessageType == VIDEO || finalMessageType == VIDEO_TEXT) {
Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(makeThumbnailFilePath, MediaStore.Video.Thumbnails.MINI_KIND);
if (bitmap != null) {
roomMessage.getAttachment().setLocalThumbnailPath(AndroidUtils.saveBitmap(bitmap));
roomMessage.getAttachment().setWidth(bitmap.getWidth());
roomMessage.getAttachment().setHeight(bitmap.getHeight());
}
}
new Thread(() -> {
DbManager.getInstance().doRealmTransaction(realm1 -> {
RealmRoom room = realm1.where(RealmRoom.class).equalTo("id", mRoomId).findFirst();
if (room != null) {
room.setDeleted(false);
}
RealmRoom.setLastMessageWithRoomMessage(realm1, roomMessage.getRoomId(), realm1.copyToRealmOrUpdate(roomMessage));
});
}).start();
if (finalMessageType == CONTACT) {
ChatSendMessageUtil messageUtil = getSendMessageUtil().newBuilder(chatType, finalMessageType, mRoomId).message(message);
messageUtil.contact(structMessageInfoNew.realmRoomMessage.getRoomMessageContact().getFirstName(), structMessageInfoNew.realmRoomMessage.getRoomMessageContact().getLastName(), structMessageInfoNew.realmRoomMessage.getRoomMessageContact().getPhones().first().getString());
if (isReply()) {
messageUtil.replyMessage(replyMessageId);
}
messageUtil.sendMessage(Long.toString(messageId));
}
if (isReply()) {
mReplayLayout.setTag(null);
G.handler.post(new Runnable() {
@Override
public void run() {
mReplayLayout.setVisibility(View.GONE);
}
});
}
G.handler.post(new Runnable() {
@Override
public void run() {
switchAddItem(new ArrayList<>(Collections.singletonList(structMessageInfoNew)), false);
if (mainMessage.length() > message.length()) {
sendNewMessage(mainMessage.substring(message.length()));
}
}
});
G.handler.postDelayed(new Runnable() {
@Override
public void run() {
scrollToEnd();
}
}, 100);
}
Aggregations