package com.fsck.k9.message.extractors;
import android.support.annotation.NonNull;
import com.fsck.k9.mail.Message;
import com.fsck.k9.mail.Part;
public class MessagePreviewCreator {
private final TextPartFinder textPartFinder;
private final PreviewTextExtractor previewTextExtractor;
private final EncryptionDetector encryptionDetector;
MessagePreviewCreator(TextPartFinder textPartFinder, PreviewTextExtractor previewTextExtractor,
EncryptionDetector encryptionDetector) {
this.textPartFinder = textPartFinder;
this.previewTextExtractor = previewTextExtractor;
this.encryptionDetector = encryptionDetector;
}
public static MessagePreviewCreator newInstance() {
TextPartFinder textPartFinder = new TextPartFinder();
PreviewTextExtractor previewTextExtractor = new PreviewTextExtractor();
EncryptionDetector encryptionDetector = new EncryptionDetector(textPartFinder);
return new MessagePreviewCreator(textPartFinder, previewTextExtractor, encryptionDetector);
}
public PreviewResult createPreview(@NonNull Message message) {
if (encryptionDetector.isEncrypted(message)) {
return PreviewResult.encrypted();
}
return extractText(message);
}
private PreviewResult extractText(Message message) {
Part textPart = textPartFinder.findFirstTextPart(message);
if (textPart == null || hasEmptyBody(textPart)) {
return PreviewResult.none();
}
try {
String previewText = previewTextExtractor.extractPreview(textPart);
return PreviewResult.text(previewText);
} catch (PreviewExtractionException e) {
return PreviewResult.error();
}
}
private boolean hasEmptyBody(Part textPart) {
return textPart.getBody() == null;
}
}