improve gmail email parsing, also display correct local datetime in msg previewer

This commit is contained in:
Martin Rotter 2021-05-17 08:41:49 +02:00
parent ed8f84c0bc
commit b2409ab745
3 changed files with 22 additions and 12 deletions

View File

@ -30,7 +30,7 @@
<url type="donation">https://martinrotter.github.io/donate/</url> <url type="donation">https://martinrotter.github.io/donate/</url>
<content_rating type="oars-1.1" /> <content_rating type="oars-1.1" />
<releases> <releases>
<release version="3.9.2" date="2021-05-13"/> <release version="3.9.2" date="2021-05-17"/>
</releases> </releases>
<content_rating type="oars-1.0"> <content_rating type="oars-1.0">
<content_attribute id="violence-cartoon">none</content_attribute> <content_attribute id="violence-cartoon">none</content_attribute>

View File

@ -131,7 +131,7 @@ void WebViewer::loadMessages(const QList<Message>& messages, RootItem* root) {
message.m_author), message.m_author),
message.m_url, message.m_url,
message.m_contents, message.m_contents,
QLocale().toString(message.m_created, QLocale::FormatType::ShortFormat), QLocale().toString(message.m_created.toLocalTime(), QLocale::FormatType::ShortFormat),
enclosures, enclosures,
enclosure_images)); enclosure_images));
} }

View File

@ -490,25 +490,35 @@ bool GmailNetworkFactory::fillFullMessage(Message& msg, const QJsonObject& json,
} }
QString backup_contents; QString backup_contents;
QJsonArray parts = json["payload"].toObject()["parts"].toArray(); QList<QJsonObject> parts_to_process, parts;
if (parts.isEmpty()) { parts_to_process.append(json["payload"].toObject());
parts.append(json["payload"].toObject());
while (!parts_to_process.isEmpty()) {
auto this_part = parts_to_process.takeFirst();
auto nested_parts = this_part["parts"].toArray();
for (const QJsonValue& prt : qAsConst(nested_parts)) {
auto prt_obj = prt.toObject();
parts.append(prt_obj);
parts_to_process.append(prt_obj);
}
} }
for (const QJsonValue& part : parts) { for (const QJsonObject& part : qAsConst(parts)) {
QJsonObject part_obj = part.toObject(); QJsonObject body = part["body"].toObject();
QJsonObject body = part_obj["body"].toObject(); QString mime = part["mimeType"].toString();
QString filename = part_obj["filename"].toString(); QString filename = part["filename"].toString();
if (filename.isEmpty() && body.contains(QL1S("data"))) { if (filename.isEmpty() && mime.startsWith(QSL("text/"))) {
// We have textual data of e-mail. // We have textual data of e-mail.
// We check if it is HTML. // We check if it is HTML.
if (msg.m_contents.isEmpty()) { if (msg.m_contents.isEmpty()) {
if (part_obj["mimeType"].toString().contains(QL1S("text/html"))) { if (mime.contains(QL1S("text/html"))) {
msg.m_contents = QByteArray::fromBase64(body["data"].toString().toUtf8(), QByteArray::Base64Option::Base64UrlEncoding); msg.m_contents = QByteArray::fromBase64(body["data"].toString().toUtf8(), QByteArray::Base64Option::Base64UrlEncoding);
} }
else { else if (backup_contents.isEmpty()) {
backup_contents = QByteArray::fromBase64(body["data"].toString().toUtf8(), QByteArray::Base64Option::Base64UrlEncoding); backup_contents = QByteArray::fromBase64(body["data"].toString().toUtf8(), QByteArray::Base64Option::Base64UrlEncoding);
} }
} }