Search in sources :

Example 1 with InlineAttachment

use of com.fsck.k9.activity.misc.InlineAttachment in project k-9 by k9mail.

the class AttachmentPresenter method addInlineAttachment.

private void addInlineAttachment(AttachmentViewInfo attachmentViewInfo) {
    if (inlineAttachments.containsKey(attachmentViewInfo.internalUri)) {
        throw new IllegalStateException("Received the same attachmentViewInfo twice!");
    }
    int loaderId = getNextFreeLoaderId();
    Attachment attachment = Attachment.createAttachment(attachmentViewInfo.internalUri, loaderId, attachmentViewInfo.mimeType, true, true);
    attachment = attachment.deriveWithMetadataLoaded(attachmentViewInfo.mimeType, attachmentViewInfo.displayName, attachmentViewInfo.size);
    inlineAttachments.put(attachment.uri, new InlineAttachment(attachmentViewInfo.part.getContentId(), attachment));
    Bundle bundle = new Bundle();
    bundle.putParcelable(LOADER_ARG_ATTACHMENT, attachment.uri);
    loaderManager.initLoader(attachment.loaderId, bundle, mInlineAttachmentContentLoaderCallback);
}
Also used : Bundle(android.os.Bundle) Attachment(com.fsck.k9.activity.misc.Attachment) InlineAttachment(com.fsck.k9.activity.misc.InlineAttachment) InlineAttachment(com.fsck.k9.activity.misc.InlineAttachment)

Example 2 with InlineAttachment

use of com.fsck.k9.activity.misc.InlineAttachment in project k-9 by k9mail.

the class LocalFolder method loadMessagePart.

private void loadMessagePart(LocalMessage message, Map<Long, Part> partById, Cursor cursor) throws MessagingException {
    long id = cursor.getLong(0);
    long parentId = cursor.getLong(2);
    String mimeType = cursor.getString(3);
    long size = cursor.getLong(4);
    byte[] header = cursor.getBlob(6);
    int dataLocation = cursor.getInt(9);
    String serverExtra = cursor.getString(15);
    // TODO we don't currently cache much of the part data which is computed with AttachmentInfoExtractor,
    // TODO might want to do that at a later point?
    // String displayName = cursor.getString(5);
    // int type = cursor.getInt(1);
    // boolean inlineAttachment = (type == MessagePartType.HIDDEN_ATTACHMENT);
    final Part part;
    if (id == message.getMessagePartId()) {
        part = message;
    } else {
        Part parentPart = partById.get(parentId);
        if (parentPart == null) {
            throw new IllegalStateException("Parent part not found");
        }
        String parentMimeType = parentPart.getMimeType();
        if (MimeUtility.isMultipart(parentMimeType)) {
            BodyPart bodyPart = new LocalBodyPart(getAccountUuid(), message, id, size);
            ((Multipart) parentPart.getBody()).addBodyPart(bodyPart);
            part = bodyPart;
        } else if (MimeUtility.isMessage(parentMimeType)) {
            Message innerMessage = new LocalMimeMessage(getAccountUuid(), message, id);
            parentPart.setBody(innerMessage);
            part = innerMessage;
        } else {
            throw new IllegalStateException("Parent is neither a multipart nor a message");
        }
        parseHeaderBytes(part, header);
    }
    partById.put(id, part);
    part.setServerExtra(serverExtra);
    if (MimeUtility.isMultipart(mimeType)) {
        byte[] preamble = cursor.getBlob(11);
        byte[] epilogue = cursor.getBlob(12);
        String boundary = cursor.getString(13);
        MimeMultipart multipart = new MimeMultipart(mimeType, boundary);
        part.setBody(multipart);
        multipart.setPreamble(preamble);
        multipart.setEpilogue(epilogue);
    } else if (dataLocation == DataLocation.IN_DATABASE) {
        String encoding = cursor.getString(7);
        byte[] data = cursor.getBlob(10);
        Body body = new BinaryMemoryBody(data, encoding);
        part.setBody(body);
    } else if (dataLocation == DataLocation.ON_DISK) {
        String encoding = cursor.getString(7);
        File file = localStore.getAttachmentFile(Long.toString(id));
        if (file.exists()) {
            Body body = new FileBackedBody(file, encoding);
            part.setBody(body);
        }
    }
}
Also used : BodyPart(com.fsck.k9.mail.BodyPart) Multipart(com.fsck.k9.mail.Multipart) MimeMultipart(com.fsck.k9.mail.internet.MimeMultipart) Message(com.fsck.k9.mail.Message) MimeMultipart(com.fsck.k9.mail.internet.MimeMultipart) BodyPart(com.fsck.k9.mail.BodyPart) Part(com.fsck.k9.mail.Part) Body(com.fsck.k9.mail.Body) BinaryTempFileBody(com.fsck.k9.mail.internet.BinaryTempFileBody) File(java.io.File)

Aggregations

Bundle (android.os.Bundle)1 Attachment (com.fsck.k9.activity.misc.Attachment)1 InlineAttachment (com.fsck.k9.activity.misc.InlineAttachment)1 Body (com.fsck.k9.mail.Body)1 BodyPart (com.fsck.k9.mail.BodyPart)1 Message (com.fsck.k9.mail.Message)1 Multipart (com.fsck.k9.mail.Multipart)1 Part (com.fsck.k9.mail.Part)1 BinaryTempFileBody (com.fsck.k9.mail.internet.BinaryTempFileBody)1 MimeMultipart (com.fsck.k9.mail.internet.MimeMultipart)1 File (java.io.File)1