improve gmail email parsing, also display correct local datetime in msg previewer
This commit is contained in:
parent
ed8f84c0bc
commit
b2409ab745
|
@ -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>
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue