atleast encode enclosures nicely
This commit is contained in:
parent
008c0053d6
commit
661bd09d0a
@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QFlags>
|
#include <QFlags>
|
||||||
|
#include <QJsonArray>
|
||||||
|
#include <QJsonObject>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
@ -18,36 +20,70 @@
|
|||||||
Enclosure::Enclosure(QString url, QString mime) : m_url(std::move(url)), m_mimeType(std::move(mime)) {}
|
Enclosure::Enclosure(QString url, QString mime) : m_url(std::move(url)), m_mimeType(std::move(mime)) {}
|
||||||
|
|
||||||
QList<Enclosure> Enclosures::decodeEnclosuresFromString(const QString& enclosures_data) {
|
QList<Enclosure> Enclosures::decodeEnclosuresFromString(const QString& enclosures_data) {
|
||||||
auto enc = enclosures_data.split(ENCLOSURES_OUTER_SEPARATOR,
|
QJsonParseError enc_err;
|
||||||
|
QJsonDocument enc_doc = QJsonDocument::fromJson(enclosures_data.toUtf8(), &enc_err);
|
||||||
|
QList<Enclosure> enclosures;
|
||||||
|
|
||||||
|
if (enc_err.error != QJsonParseError::ParseError::NoError) {
|
||||||
|
// Provide backwards compatibility.
|
||||||
|
auto enc = enclosures_data.split(ENCLOSURES_OUTER_SEPARATOR,
|
||||||
#if QT_VERSION >= 0x050F00 // Qt >= 5.15.0
|
#if QT_VERSION >= 0x050F00 // Qt >= 5.15.0
|
||||||
Qt::SplitBehaviorFlags::SkipEmptyParts);
|
Qt::SplitBehaviorFlags::SkipEmptyParts);
|
||||||
#else
|
#else
|
||||||
QString::SplitBehavior::SkipEmptyParts);
|
QString::SplitBehavior::SkipEmptyParts);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QList<Enclosure> enclosures;
|
enclosures.reserve(enc.size());
|
||||||
enclosures.reserve(enc.size());
|
|
||||||
|
|
||||||
for (const QString& single_enclosure : std::as_const(enc)) {
|
for (const QString& single_enclosure : std::as_const(enc)) {
|
||||||
Enclosure enclosure;
|
Enclosure enclosure;
|
||||||
|
|
||||||
if (single_enclosure.contains(ECNLOSURES_INNER_SEPARATOR)) {
|
if (single_enclosure.contains(ECNLOSURES_INNER_SEPARATOR)) {
|
||||||
QStringList mime_url = single_enclosure.split(ECNLOSURES_INNER_SEPARATOR);
|
QStringList mime_url = single_enclosure.split(ECNLOSURES_INNER_SEPARATOR);
|
||||||
|
|
||||||
enclosure.m_mimeType = QString::fromUtf8(QByteArray::fromBase64(mime_url.at(0).toLocal8Bit()));
|
enclosure.m_mimeType = QString::fromUtf8(QByteArray::fromBase64(mime_url.at(0).toLocal8Bit()));
|
||||||
enclosure.m_url = QString::fromUtf8(QByteArray::fromBase64(mime_url.at(1).toLocal8Bit()));
|
enclosure.m_url = QString::fromUtf8(QByteArray::fromBase64(mime_url.at(1).toLocal8Bit()));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
enclosure.m_url = QString::fromUtf8(QByteArray::fromBase64(single_enclosure.toLocal8Bit()));
|
enclosure.m_url = QString::fromUtf8(QByteArray::fromBase64(single_enclosure.toLocal8Bit()));
|
||||||
|
}
|
||||||
|
|
||||||
|
enclosures.append(enclosure);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
QJsonArray enc_arr = enc_doc.array();
|
||||||
|
|
||||||
enclosures.append(enclosure);
|
for (const QJsonValue& enc_val : enc_arr) {
|
||||||
|
const QJsonObject& enc_obj = enc_val.toObject();
|
||||||
|
|
||||||
|
Enclosure enclosure;
|
||||||
|
|
||||||
|
enclosure.m_mimeType = enc_obj.value(QSL("mime")).toString();
|
||||||
|
enclosure.m_url = enc_obj.value(QSL("url")).toString();
|
||||||
|
|
||||||
|
enclosures.append(enclosure);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return enclosures;
|
return enclosures;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString Enclosures::encodeEnclosuresToString(const QList<Enclosure>& enclosures) {
|
QString Enclosures::encodeEnclosuresToString(const QList<Enclosure>& enclosures) {
|
||||||
|
QJsonArray enc_arr;
|
||||||
|
|
||||||
|
for (const Enclosure& enc : enclosures) {
|
||||||
|
QJsonObject enc_obj;
|
||||||
|
|
||||||
|
enc_obj.insert(QSL("mime"), enc.m_mimeType);
|
||||||
|
enc_obj.insert(QSL("url"), enc.m_url);
|
||||||
|
|
||||||
|
enc_arr.append(enc_obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
return QJsonDocument(enc_arr).toJson(QJsonDocument::JsonFormat::Compact);
|
||||||
|
|
||||||
|
/*
|
||||||
QStringList enclosures_str;
|
QStringList enclosures_str;
|
||||||
|
|
||||||
for (const Enclosure& enclosure : enclosures) {
|
for (const Enclosure& enclosure : enclosures) {
|
||||||
@ -61,6 +97,7 @@ QString Enclosures::encodeEnclosuresToString(const QList<Enclosure>& enclosures)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return enclosures_str.join(QString(ENCLOSURES_OUTER_SEPARATOR));
|
return enclosures_str.join(QString(ENCLOSURES_OUTER_SEPARATOR));
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
Message::Message() {
|
Message::Message() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user