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

Commit 0837cf5d authored by cketti's avatar cketti
Browse files

Convert 'TextQuoteCreator' to Kotlin

parent 101573c5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ import com.fsck.k9.K9
import com.fsck.k9.mail.Message


internal class QuoteHelper(private val resources: Resources) {
class QuoteHelper(private val resources: Resources) {

    /**
     * Extract the date from a message and convert it into a locale-specific
+84 −62
Original line number Diff line number Diff line
package com.fsck.k9.message.quote;
package com.fsck.k9.message.quote


import java.util.regex.Matcher;
import com.fsck.k9.Account.QuoteStyle
import com.fsck.k9.CoreResourceProvider
import com.fsck.k9.mail.Address
import com.fsck.k9.mail.Message
import com.fsck.k9.mail.Message.RecipientType
import com.fsck.k9.message.quote.QuoteHelper.Companion.QUOTE_BUFFER_LENGTH

import com.fsck.k9.Account.QuoteStyle;
import com.fsck.k9.CoreResourceProvider;
import com.fsck.k9.mail.Address;
import com.fsck.k9.mail.Message;
import com.fsck.k9.mail.Message.RecipientType;

import static com.fsck.k9.message.quote.QuoteHelper.QUOTE_BUFFER_LENGTH;
class TextQuoteCreator(private val quoteHelper: QuoteHelper, private val resourceProvider: CoreResourceProvider) {
    private val prefixInsertionRegex = Regex("(?m)^")


public class TextQuoteCreator {
    private final QuoteHelper quoteHelper;
    private final CoreResourceProvider resourceProvider;


    public TextQuoteCreator(QuoteHelper quoteHelper, CoreResourceProvider resourceProvider) {
        this.quoteHelper = quoteHelper;
        this.resourceProvider = resourceProvider;
    fun quoteOriginalTextMessage(
            originalMessage: Message,
            messageBody: String?,
            quoteStyle: QuoteStyle,
            prefix: String
    ): String {
        val body = messageBody ?: ""
        return when (quoteStyle) {
            QuoteStyle.PREFIX -> prefixQuoteText(body, originalMessage, prefix)
            QuoteStyle.HEADER -> headerQuoteText(body, originalMessage)
        }
    }

    /**
     * Add quoting markup to a text message.
     * @param originalMessage Metadata for message being quoted.
     * @param messageBody Text of the message to be quoted.
     * @param quoteStyle Style of quoting.
     * @return Quoted text.
     */
    public String quoteOriginalTextMessage(Message originalMessage, String messageBody, QuoteStyle quoteStyle,
            String prefix) {
        String body = messageBody == null ? "" : messageBody;
        String sentDate = quoteHelper.getSentDateText(originalMessage);
        if (quoteStyle == QuoteStyle.PREFIX) {
            String sender = Address.toString(originalMessage.getFrom());
            StringBuilder quotedText = new StringBuilder(body.length() + QUOTE_BUFFER_LENGTH);
            if (sentDate.length() != 0) {
                String replyHeader = resourceProvider.replyHeader(sender, sentDate);
                quotedText.append(replyHeader);
    private fun prefixQuoteText(body: String, originalMessage: Message, prefix: String): String {
        val sentDate = quoteHelper.getSentDateText(originalMessage)
        val sender = Address.toString(originalMessage.from)

        return StringBuilder(body.length + QUOTE_BUFFER_LENGTH).apply {
            val replyHeader = if (sentDate.isEmpty()) {
                resourceProvider.replyHeader(sender)
            } else {
                String replyHeader = resourceProvider.replyHeader(sender);
                quotedText.append(replyHeader);
                resourceProvider.replyHeader(sender, sentDate)
            }
            quotedText.append("\r\n");

            final String escapedPrefix = Matcher.quoteReplacement(prefix);
            quotedText.append(body.replaceAll("(?m)^", escapedPrefix));

            return quotedText.toString();
        } else if (quoteStyle == QuoteStyle.HEADER) {
            StringBuilder quotedText = new StringBuilder(body.length() + QUOTE_BUFFER_LENGTH);
            quotedText.append("\r\n");
            quotedText.append(resourceProvider.messageHeaderSeparator()).append("\r\n");
            if (originalMessage.getFrom() != null && Address.toString(originalMessage.getFrom()).length() != 0) {
                quotedText.append(resourceProvider.messageHeaderFrom()).append(" ").append(Address.toString(originalMessage.getFrom())).append("\r\n");
            append(replyHeader)
            append(CRLF)

            val escapedPrefix = Regex.escapeReplacement(prefix)
            val prefixedText = body.replace(prefixInsertionRegex, escapedPrefix)

            append(prefixedText)
        }.toString()
    }
            if (sentDate.length() != 0) {
                quotedText.append(resourceProvider.messageHeaderDate()).append(" ").append(sentDate).append("\r\n");

    private fun headerQuoteText(body: String, originalMessage: Message): String {
        val sentDate = quoteHelper.getSentDateText(originalMessage)

        return StringBuilder(body.length + QUOTE_BUFFER_LENGTH).apply {
            append(CRLF)
            append(resourceProvider.messageHeaderSeparator())
            append(CRLF)

            originalMessage.from.displayString()?.let { fromAddresses ->
                append(resourceProvider.messageHeaderFrom())
                append(" ")
                append(fromAddresses)
                append(CRLF)
            }
            if (originalMessage.getRecipients(RecipientType.TO) != null && originalMessage.getRecipients(RecipientType.TO).length != 0) {
                quotedText.append(resourceProvider.messageHeaderTo()).append(" ").append(Address.toString(originalMessage.getRecipients(RecipientType.TO))).append("\r\n");

            if (sentDate.isNotEmpty()) {
                append(resourceProvider.messageHeaderDate())
                append(" ")
                append(sentDate)
                append(CRLF)
            }
            if (originalMessage.getRecipients(RecipientType.CC) != null && originalMessage.getRecipients(RecipientType.CC).length != 0) {
                quotedText.append(resourceProvider.messageHeaderCc()).append(" ").append(Address.toString(originalMessage.getRecipients(RecipientType.CC))).append("\r\n");

            originalMessage.getRecipients(RecipientType.TO).displayString()?.let { toAddresses ->
                append(resourceProvider.messageHeaderTo())
                append(" ")
                append(toAddresses)
                append(CRLF)
            }
            if (originalMessage.getSubject() != null) {
                quotedText.append(resourceProvider.messageHeaderSubject()).append(" ").append(originalMessage.getSubject()).append("\r\n");

            originalMessage.getRecipients(RecipientType.CC).displayString()?.let { ccAddresses ->
                append(resourceProvider.messageHeaderCc())
                append(" ")
                append(ccAddresses)
                append(CRLF)
            }
            quotedText.append("\r\n");

            quotedText.append(body);
            originalMessage.subject?.let { subject ->
                append(resourceProvider.messageHeaderSubject())
                append(" ")
                append(subject)
                append(CRLF)
            }

            return quotedText.toString();
        } else {
            // Shouldn't ever happen.
            return body;
            append(CRLF)
            append(body)
        }.toString()
    }

    private fun Array<Address>.displayString() = Address.toString(this)?.let { if (it.isEmpty()) null else it }


    companion object {
        private const val CRLF = "\r\n"
    }
}