This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit fd41e97498fd045b3c37834835b85ca3f4286d49 Author: jcouteau <couteau@codelutin.com> Date: Thu Feb 20 15:10:07 2020 +0100 refs #9990Can import heic files --- .../faxtomail/FaxToMailConfiguration.java | 4 ++ .../faxtomail/FaxToMailConfigurationOption.java | 7 ++++ .../i18n/faxtomail-persistence_fr_FR.properties | 1 + .../faxtomail/web/job/MailFilterJob.java | 44 +++++++++++++++++++++- 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java index 7ada292c..2867c58a 100644 --- a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java @@ -443,4 +443,8 @@ public class FaxToMailConfiguration extends ApplicationConfiguration { public int getMaxWidthImageInTextPane() { return applicationConfig.getOptionAsInt(FaxToMailConfigurationOption.MAX_WIDTH_IMAGE_IN_TEXT_PANE.getKey()); } + + public String getImageMagickLocation() { + return applicationConfig.getOption(FaxToMailConfigurationOption.IMAGEMAGICK_LOCATION.getKey()); + } } diff --git a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java index b37d92bb..4891d257 100644 --- a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java @@ -368,6 +368,13 @@ defaults.put("Table.alternateRowColor", new Color(217, 217, 217)); n("faxtomail.config.option.ui.maxWidthImageInTextPane.description"), "800", Integer.class + ), + + IMAGEMAGICK_LOCATION( + "faxtomail.imageMagickLocation", + n("faxtomail.config.option.imageMagickLocation.description"), + "magick", + String.class ); /** Configuration key. */ diff --git a/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties b/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties index 4184fb34..d43b1a73 100644 --- a/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties +++ b/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties @@ -6,6 +6,7 @@ faxtomail.config.option.defaultImageIfMalformedUrl.description= faxtomail.config.option.demo.directory.description= faxtomail.config.option.i18n.directory.description= faxtomail.config.option.i18n.locale.description= +faxtomail.config.option.imageMagickLocation.description= faxtomail.config.option.inceptionYear.description= faxtomail.config.option.launch.mode.description= faxtomail.config.option.organizationName.description= diff --git a/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java b/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java index 4d733c37..7be37940 100644 --- a/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java +++ b/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java @@ -36,7 +36,9 @@ import com.franciaflex.faxtomail.services.service.EmailService; import com.franciaflex.faxtomail.services.service.MailFolderService; import com.google.common.base.Function; import com.google.common.collect.Collections2; +import com.google.common.io.Files; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -59,7 +61,9 @@ import javax.mail.Session; import javax.mail.Store; import javax.mail.internet.MimeMessage; import java.awt.image.BufferedImage; -import java.io.IOException; + +import java.io.*; + import java.nio.charset.Charset; import java.text.DateFormat; import java.util.ArrayList; @@ -466,6 +470,40 @@ public class MailFilterJob extends AbstractFaxToMailJob { emailService.createGeneratedPDFPage(attachment, pageImage); } } + } else if (isFileAHeic(attachment.getOriginalFile())) { + + //Create src temp file from attachment + File srcFile = File.createTempFile("input",".heic"); + srcFile.createNewFile(); + Files.write(attachment.getOriginalFile().getContent(), srcFile); + + //Create dest temp file + File destFile = File.createTempFile("output",".png"); + + //Convert using imageMagick + Process process = new ProcessBuilder(config.getImageMagickLocation(),"convert", srcFile.getAbsolutePath(),destFile.getAbsolutePath()).start(); + + //Log imagemagick errors if any + InputStream is = process.getErrorStream(); + InputStreamReader isr = new InputStreamReader(is); + BufferedReader br = new BufferedReader(isr); + String line; + while ((line = br.readLine()) != null) { + if (log.isWarnEnabled()) { + log.warn(line); + } + } + //Wait for process to finish + int exitCode = process.waitFor(); + if (exitCode != 0) { + if (log.isWarnEnabled()) { + log.warn("Could not convert heic file"); + } + } + + //Read destFile and put it back into attachment + attachment.getOriginalFile().setContent(IOUtils.toByteArray(destFile.toURI())); + attachment.getOriginalFile().setFilename(destFile.getName()); } } @@ -576,4 +614,8 @@ public class MailFilterJob extends AbstractFaxToMailJob { public static boolean isFileAPDF(AttachmentFile file) { return FileUtil.extension(file.getFilename()).toUpperCase().equals("PDF"); } + + public static boolean isFileAHeic(AttachmentFile file) { + return FileUtil.extension(file.getFilename()).toUpperCase().equals("HEIC"); + } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.