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

Commit 47175424 authored by Vincent Breitmoser's avatar Vincent Breitmoser Committed by GitHub
Browse files

Merge pull request #1514 from k9mail/dont-trust-downloaded-flag

don't trust X_DOWNLOADED_FULL flag, consider messages with missing data incomplete (WIP)
parents 9c46f68b 489cf354
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -114,6 +114,23 @@ public class MessageExtractor {
        }
    }

    public static boolean hasMissingParts(Part part) {
        Body body = part.getBody();
        if (body == null) {
            return true;
        }
        if (body instanceof Multipart) {
            Multipart multipart = (Multipart) body;
            for (Part subPart : multipart.getBodyParts()) {
                if (hasMissingParts(subPart)) {
                    return true;
                }
            }
        }
        return false;
    }


    /** Traverse the MIME tree of a message an extract viewable parts. */
    public static void findViewablesAndAttachments(Part part,
                @Nullable List<Viewable> outputViewableParts, @Nullable List<Part> outputNonViewableParts)
+2 −2
Original line number Diff line number Diff line
@@ -1552,13 +1552,13 @@ public class MessageCompose extends K9Activity implements OnClickListener,
        }

        @Override
        public void onMessageViewInfoLoadFinished(LocalMessage localMessage, MessageViewInfo messageViewInfo) {
        public void onMessageViewInfoLoadFinished(MessageViewInfo messageViewInfo) {
            mHandler.sendEmptyMessage(MSG_PROGRESS_OFF);
            loadLocalMessageForDisplay(messageViewInfo, mAction);
        }

        @Override
        public void onMessageViewInfoLoadFailed(LocalMessage localMessage) {
        public void onMessageViewInfoLoadFailed(MessageViewInfo messageViewInfo) {
            mHandler.sendEmptyMessage(MSG_PROGRESS_OFF);
            Toast.makeText(MessageCompose.this, R.string.status_invalid_id_error, Toast.LENGTH_LONG).show();
        }
+14 −9
Original line number Diff line number Diff line
@@ -152,10 +152,6 @@ public class MessageLoaderHelper {

    @UiThread
    public void downloadCompleteMessage() {
        if (localMessage.isSet(Flag.X_DOWNLOADED_FULL)) {
            return;
        }

        startDownloadingMessageBody(true);
    }

@@ -191,7 +187,9 @@ public class MessageLoaderHelper {

        callback.onMessageDataLoadFinished(localMessage);

        if (localMessage.isBodyMissing()) {
        boolean messageIncomplete =
                !localMessage.isSet(Flag.X_DOWNLOADED_FULL) && !localMessage.isSet(Flag.X_DOWNLOADED_PARTIAL);
        if (messageIncomplete) {
            startDownloadingMessageBody(false);
            return;
        }
@@ -334,11 +332,18 @@ public class MessageLoaderHelper {
        }

        if (messageViewInfo == null) {
            callback.onMessageViewInfoLoadFailed(localMessage);
            messageViewInfo = createErrorStateMessageViewInfo();
            callback.onMessageViewInfoLoadFailed(messageViewInfo);
            return;
        }

        callback.onMessageViewInfoLoadFinished(localMessage, messageViewInfo);
        callback.onMessageViewInfoLoadFinished(messageViewInfo);
    }

    @NonNull
    private MessageViewInfo createErrorStateMessageViewInfo() {
        boolean isMessageIncomplete = !localMessage.isSet(Flag.X_DOWNLOADED_FULL);
        return MessageViewInfo.createWithErrorState(localMessage, isMessageIncomplete);
    }

    private void cancelAndClearDecodeLoader() {
@@ -427,8 +432,8 @@ public class MessageLoaderHelper {
        void onMessageDataLoadFinished(LocalMessage message);
        void onMessageDataLoadFailed();

        void onMessageViewInfoLoadFinished(LocalMessage localMessage, MessageViewInfo messageViewInfo);
        void onMessageViewInfoLoadFailed(LocalMessage localMessage);
        void onMessageViewInfoLoadFinished(MessageViewInfo messageViewInfo);
        void onMessageViewInfoLoadFailed(MessageViewInfo messageViewInfo);

        void setLoadingProgress(int current, int max);

+1 −1
Original line number Diff line number Diff line
@@ -2755,7 +2755,7 @@ public class MessagingController implements Runnable {
                message.setFlag(Flag.X_DOWNLOADED_PARTIAL, false);
            }*/

            if (!message.isSet(Flag.X_DOWNLOADED_FULL)) {
            /*if (!message.isSet(Flag.X_DOWNLOADED_FULL)) */ {
                /*
                 * At this point the message is not available, so we need to download it
                 * fully if possible.
+4 −2
Original line number Diff line number Diff line
@@ -768,10 +768,12 @@ public class LocalFolder extends Folder<LocalMessage> implements Serializable {
            String encoding = cursor.getString(7);

            File file = localStore.getAttachmentFile(Long.toString(id));
            if (file.exists()) {
                Body body = new FileBackedBody(file, encoding);
                part.setBody(body);
            }
        }
    }

    private void parseHeaderBytes(Part part, byte[] header) throws MessagingException {
        MessageHeaderParser.parse(part, new ByteArrayInputStream(header));
Loading