Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 921ee5c0 authored by cketti's avatar cketti
Browse files

Merge pull request #1513

Couple of broken message fixes
parents d80a1d41 fa998981
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -124,7 +124,7 @@ public class LocalMessage extends MimeMessage {
        mimeType = cursor.getString(23);
    }

    long getMessagePartId() {
    public long getMessagePartId() {
        return messagePartId;
    }

+10 −2
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log;

@@ -681,6 +682,7 @@ public class LocalStore extends Store implements Serializable {
        });
    }

    @Nullable
    public InputStream getAttachmentInputStream(final String attachmentId) throws MessagingException {
        return database.execute(false, new DbCallback<InputStream>() {
            @Override
@@ -707,6 +709,7 @@ public class LocalStore extends Store implements Serializable {
        });
    }

    @Nullable
    private InputStream getRawAttachmentInputStream(Cursor cursor, int location, String attachmentId) {
        switch (location) {
            case DataLocation.IN_DATABASE: {
@@ -718,7 +721,7 @@ public class LocalStore extends Store implements Serializable {
                try {
                    return new FileInputStream(file);
                } catch (FileNotFoundException e) {
                    throw new WrappedException(e);
                    return null;
                }
            }
            default: {
@@ -727,7 +730,12 @@ public class LocalStore extends Store implements Serializable {
        }
    }

    InputStream getDecodingInputStream(final InputStream rawInputStream, String encoding) {
    @Nullable
    InputStream getDecodingInputStream(@Nullable final InputStream rawInputStream, @Nullable String encoding) {
        if (rawInputStream == null) {
            return null;
        }

        if (MimeUtil.ENC_BASE64.equals(encoding)) {
            return new Base64InputStream(rawInputStream) {
                @Override
+8 −1
Original line number Diff line number Diff line
@@ -21,8 +21,9 @@ import com.fsck.k9.mail.Part;
import com.fsck.k9.mail.internet.MimeHeader;
import com.fsck.k9.mail.internet.MimeUtility;
import com.fsck.k9.mailstore.AttachmentViewInfo;
import com.fsck.k9.mailstore.LocalPart;
import com.fsck.k9.mailstore.DeferredFileBody;
import com.fsck.k9.mailstore.LocalMessage;
import com.fsck.k9.mailstore.LocalPart;
import com.fsck.k9.provider.AttachmentProvider;
import com.fsck.k9.provider.DecryptedFileProvider;

@@ -66,6 +67,12 @@ public class AttachmentInfoExtractor {
            long messagePartId = localPart.getId();
            size = localPart.getSize();
            uri = AttachmentProvider.getAttachmentUri(accountUuid, messagePartId);
        } else if (part instanceof LocalMessage) {
            LocalMessage localMessage = (LocalMessage) part;
            String accountUuid = localMessage.getAccount().getUuid();
            long messagePartId = localMessage.getMessagePartId();
            size = localMessage.getSize();
            uri = AttachmentProvider.getAttachmentUri(accountUuid, messagePartId);
        } else {
            Body body = part.getBody();
            if (body instanceof DeferredFileBody) {
+22 −10
Original line number Diff line number Diff line
@@ -12,6 +12,8 @@ import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;

import com.fsck.k9.Account;
@@ -58,7 +60,7 @@ public class AttachmentProvider extends ContentProvider {
    }

    @Override
    public String getType(Uri uri) {
    public String getType(@NonNull Uri uri) {
        List<String> segments = uri.getPathSegments();
        String accountUuid = segments.get(0);
        String id = segments.get(1);
@@ -68,16 +70,20 @@ public class AttachmentProvider extends ContentProvider {
    }

    @Override
    public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
    public ParcelFileDescriptor openFile(@NonNull Uri uri, @NonNull String mode) throws FileNotFoundException {
        List<String> segments = uri.getPathSegments();
        String accountUuid = segments.get(0);
        String attachmentId = segments.get(1);

        return openAttachment(accountUuid, attachmentId);
        ParcelFileDescriptor parcelFileDescriptor = openAttachment(accountUuid, attachmentId);
        if (parcelFileDescriptor == null) {
            throw new FileNotFoundException("Attachment missing or cannot be opened!");
        }
        return parcelFileDescriptor;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

        String[] columnNames = (projection == null) ? DEFAULT_PROJECTION : projection;

@@ -120,18 +126,18 @@ public class AttachmentProvider extends ContentProvider {
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        return 0;
    public int update(@NonNull Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        throw new UnsupportedOperationException();
    }

    @Override
    public int delete(Uri uri, String arg1, String[] arg2) {
        return 0;
    public int delete(@NonNull Uri uri, String arg1, String[] arg2) {
        throw new UnsupportedOperationException();
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        return null;
    public Uri insert(@NonNull Uri uri, ContentValues values) {
        throw new UnsupportedOperationException();
    }

    private String getType(String accountUuid, String id, String mimeType) {
@@ -155,9 +161,14 @@ public class AttachmentProvider extends ContentProvider {
        return type;
    }

    @Nullable
    private ParcelFileDescriptor openAttachment(String accountUuid, String attachmentId) {
        try {
            InputStream inputStream = getAttachmentInputStream(accountUuid, attachmentId);
            if (inputStream == null) {
                Log.e(K9.LOG_TAG, "Error getting InputStream for attachment (part doesn't exist?)");
                return null;
            }
            return ParcelFileDescriptorUtil.pipeFrom(inputStream);
        } catch (MessagingException e) {
            Log.e(K9.LOG_TAG, "Error getting InputStream for attachment", e);
@@ -168,6 +179,7 @@ public class AttachmentProvider extends ContentProvider {
        }
    }

    @Nullable
    private InputStream getAttachmentInputStream(String accountUuid, String attachmentId) throws MessagingException {
        final Account account = Preferences.getPreferences(getContext()).getAccount(accountUuid);
        LocalStore localStore = LocalStore.getInstance(account, getContext());