package de.thedevstack.conversationsplus.utils; import android.net.Uri; import de.thedevstack.conversationsplus.ConversationsPlusApplication; import de.thedevstack.conversationsplus.crypto.PgpEngine; import de.thedevstack.conversationsplus.entities.Conversation; import de.thedevstack.conversationsplus.entities.FileParams; import de.thedevstack.conversationsplus.entities.Message; import de.thedevstack.conversationsplus.enums.FileStatus; import de.thedevstack.conversationsplus.enums.MessageStatus; import de.thedevstack.conversationsplus.exceptions.FileCopyException; import de.thedevstack.conversationsplus.persistance.FileBackend; import de.thedevstack.conversationsplus.ui.UiCallback; /** * Utility class to work with conversations. */ public class ConversationUtil { public static void markMessagesAsDisplayedUpToMessage(Message message) { Conversation conversation = message.getConversation(); while (null != message && (MessageStatus.RECEIVED == message.getMessageStatus() || MessageStatus.TRANSMITTED == message.getMessageStatus())) { MessageUtil.setAndSaveMessageStatus(message, MessageStatus.DISPLAYED); message = conversation.getMessageBefore(message); } } public static void attachLocationToConversation(final Conversation conversation, final Uri uri, final UiCallback callback) { Message message = MessageUtil.createOutgoingMessage(conversation, uri.toString()); if (message.getEncryption() == Message.ENCRYPTION_DECRYPTED) { PgpEngine.getInstance().encrypt(message, callback); } else { callback.success(message); } } public static void attachFileToConversation(final Conversation conversation, final Uri uri, final UiCallback callback) { final Message message = MessageUtil.createOutgoingMessage(conversation, ""); if (null == message.getFileParams()) { message.setFileParams(new FileParams()); } MessageUtil.setFileStatus(message, FileStatus.NEEDS_UPLOAD); String path = FileUtils.getPath(uri); if (path != null) { message.getFileParams().setPath(path); message.setRelativeFilePath(path); // TODO: Remove when everything is moved to fileparams MessageUtil.updateFileParams(message); if (message.getEncryption() == Message.ENCRYPTION_DECRYPTED) { PgpEngine.getInstance().encrypt(message, callback); } else { callback.success(message); } } else { ConversationsPlusApplication.executeFileAdding(new Runnable() { @Override public void run() { try { FileBackend.copyFileToPrivateStorage(message, uri); MessageUtil.updateFileParams(message); if (message.getEncryption() == Message.ENCRYPTION_DECRYPTED) { PgpEngine.getInstance().encrypt(message, callback); } else { callback.success(message); } } catch (FileCopyException e) { callback.error(e.getResId(), message); } } }); } } }