File indexing completed on 2024-06-23 05:18:30
0001 /* 0002 SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "imagescalingutils.h" 0008 #include "settings/messagecomposersettings.h" 0009 0010 #include <QFileInfo> 0011 0012 using namespace MessageComposer; 0013 0014 bool Utils::resizeImage(MessageCore::AttachmentPart::Ptr part) 0015 { 0016 const QString filename = part->fileName(); 0017 const QString pattern = MessageComposer::MessageComposerSettings::self()->filterSourcePattern(); 0018 0019 if (!pattern.isEmpty()) { 0020 // TODO use regexp ? 0021 const QStringList lstPattern = pattern.split(QLatin1Char(';')); 0022 for (const QString &patternStr : lstPattern) { 0023 switch (MessageComposer::MessageComposerSettings::self()->filterSourceType()) { 0024 case MessageComposer::MessageComposerSettings::EnumFilterSourceType::NoFilter: 0025 break; 0026 case MessageComposer::MessageComposerSettings::EnumFilterSourceType::IncludeFilesWithPattern: 0027 if (!filename.contains(patternStr)) { 0028 return false; 0029 } 0030 break; 0031 case MessageComposer::MessageComposerSettings::EnumFilterSourceType::ExcludeFilesWithPattern: 0032 if (filename.contains(patternStr)) { 0033 return false; 0034 } 0035 break; 0036 } 0037 } 0038 } 0039 0040 if (MessageComposer::MessageComposerSettings::self()->resizeImagesWithFormats()) { 0041 const QString formatsType = MessageComposer::MessageComposerSettings::self()->resizeImagesWithFormatsType(); 0042 if (!formatsType.isEmpty()) { 0043 const QStringList lstFormat = formatsType.split(QLatin1Char(';')); 0044 bool willResizeImage = false; 0045 for (const QString &type : lstFormat) { 0046 if (QLatin1StringView(part->mimeType()) == type) { 0047 willResizeImage = true; 0048 break; 0049 } 0050 } 0051 if (!willResizeImage) { 0052 return false; 0053 } 0054 } 0055 } 0056 0057 if (MessageComposer::MessageComposerSettings::self()->skipImageLowerSizeEnabled()) { 0058 if (part->size() > MessageComposer::MessageComposerSettings::self()->skipImageLowerSize() * 1024) { 0059 if (hasImage(part->mimeType())) { 0060 return true; 0061 } else { 0062 return false; 0063 } 0064 } else { 0065 return false; 0066 } 0067 } 0068 return true; 0069 } 0070 0071 void Utils::changeFileName(MessageCore::AttachmentPart::Ptr part) 0072 { 0073 if (MessageComposer::MessageComposerSettings::self()->renameResizedImages()) { 0074 QString pattern = MessageComposer::MessageComposerSettings::self()->renameResizedImagesPattern(); 0075 if (!pattern.isEmpty()) { 0076 const QString filename = part->fileName(); 0077 pattern.replace(QLatin1StringView("%t"), QTime::currentTime().toString()); 0078 pattern.replace(QLatin1StringView("%d"), QDate::currentDate().toString()); 0079 pattern.replace(QLatin1StringView("%n"), filename); // Original name 0080 pattern.replace(QLatin1StringView("%e"), QFileInfo(filename).completeSuffix()); // Original extension 0081 0082 const QString type = MessageComposer::MessageComposerSettings::self()->writeFormat(); 0083 QString newExtension; 0084 if (type == QLatin1StringView("JPG")) { 0085 newExtension = QStringLiteral("jpg"); 0086 } else if (type == QLatin1StringView("PNG")) { 0087 newExtension = QStringLiteral("png"); 0088 } 0089 if (!newExtension.isEmpty()) { 0090 pattern.replace(QLatin1StringView("%x"), newExtension); // new Extension 0091 } 0092 0093 // Need to define pattern type. 0094 part->setFileName(pattern); 0095 part->setName(pattern); 0096 } 0097 } 0098 } 0099 0100 bool Utils::filterRecipients(const QStringList &recipients) 0101 { 0102 if (recipients.isEmpty()) { 0103 return false; 0104 } 0105 0106 if (MessageComposer::MessageComposerSettings::self()->filterRecipientType() 0107 == MessageComposer::MessageComposerSettings::EnumFilterRecipientType::NoFilter) { 0108 return true; 0109 } 0110 0111 const QString doNotResizeEmailsPattern = MessageComposer::MessageComposerSettings::self()->doNotResizeEmailsPattern(); 0112 const QString resizeEmailsPattern = MessageComposer::MessageComposerSettings::self()->resizeEmailsPattern(); 0113 if (doNotResizeEmailsPattern.isEmpty() && resizeEmailsPattern.isEmpty()) { 0114 return true; 0115 } 0116 0117 switch (MessageComposer::MessageComposerSettings::self()->filterRecipientType()) { 0118 case MessageComposer::MessageComposerSettings::EnumFilterRecipientType::NoFilter: 0119 return true; 0120 case MessageComposer::MessageComposerSettings::EnumFilterRecipientType::ResizeEachEmailsContainsPattern: 0121 if (resizeEmailsPattern.isEmpty()) { 0122 return false; 0123 } 0124 for (const QString &emails : recipients) { 0125 if (!emails.contains(resizeEmailsPattern)) { 0126 return false; 0127 } 0128 } 0129 return true; 0130 case MessageComposer::MessageComposerSettings::EnumFilterRecipientType::ResizeOneEmailContainsPattern: 0131 if (resizeEmailsPattern.isEmpty()) { 0132 return false; 0133 } 0134 for (const QString &emails : recipients) { 0135 if (emails.contains(resizeEmailsPattern)) { 0136 return true; 0137 } 0138 } 0139 return false; 0140 case MessageComposer::MessageComposerSettings::EnumFilterRecipientType::DontResizeEachEmailsContainsPattern: 0141 if (doNotResizeEmailsPattern.isEmpty()) { 0142 return false; 0143 } 0144 for (const QString &emails : recipients) { 0145 if (!emails.contains(doNotResizeEmailsPattern)) { 0146 return false; 0147 } 0148 } 0149 return true; 0150 case MessageComposer::MessageComposerSettings::EnumFilterRecipientType::DontResizeOneEmailContainsPattern: 0151 if (doNotResizeEmailsPattern.isEmpty()) { 0152 return false; 0153 } 0154 for (const QString &emails : recipients) { 0155 if (emails.contains(doNotResizeEmailsPattern)) { 0156 return true; 0157 } 0158 } 0159 return false; 0160 } 0161 0162 return false; 0163 } 0164 0165 bool Utils::hasImage(const QByteArray &mimetype) 0166 { 0167 if (mimetype == QByteArrayLiteral("image/gif") || mimetype == QByteArrayLiteral("image/jpeg") || mimetype == QByteArrayLiteral("image/png")) { 0168 return true; 0169 } 0170 return false; 0171 } 0172 0173 bool Utils::containsImage(const MessageCore::AttachmentPart::List &parts) 0174 { 0175 for (const MessageCore::AttachmentPart::Ptr &part : parts) { 0176 if (hasImage(part->mimeType())) { 0177 return true; 0178 } 0179 } 0180 return false; 0181 }