Warning, file /education/cantor/src/lib/mimeresult.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 SPDX-License-Identifier: GPL-2.0-or-later 0003 SPDX-FileCopyrightText: 2019 Nikita Sirgienko <warquark@gmail.com> 0004 */ 0005 0006 #include "mimeresult.h" 0007 0008 #include <QDebug> 0009 #include <QJsonArray> 0010 #include <QJsonDocument> 0011 #include <QFile> 0012 #include <KLocalizedString> 0013 0014 #include "jupyterutils.h" 0015 0016 using namespace Cantor; 0017 0018 class Cantor::MimeResultPrivate 0019 { 0020 public: 0021 MimeResultPrivate() = default; 0022 0023 QString plain; 0024 QJsonObject mimeBundle; 0025 }; 0026 0027 MimeResult::MimeResult(const QJsonObject& mimeBundle) : d(new MimeResultPrivate) 0028 { 0029 bool isOriginalPlain = mimeBundle.contains(QLatin1String("text/plain")); 0030 if (isOriginalPlain) 0031 d->plain = JupyterUtils::fromJupyterMultiline(mimeBundle.value(QLatin1String("text/plain"))); 0032 else 0033 d->plain = i18n("This is unsupported Jupyter content of types ('%1')", mimeBundle.keys().join(QLatin1String(", "))); 0034 d->mimeBundle = mimeBundle; 0035 } 0036 0037 MimeResult::~MimeResult() 0038 { 0039 delete d; 0040 } 0041 0042 QString MimeResult::toHtml() 0043 { 0044 return QLatin1String("<pre>") + d->plain.toHtmlEscaped() + QLatin1String("</pre>"); 0045 } 0046 0047 int MimeResult::type() 0048 { 0049 return MimeResult::Type; 0050 } 0051 0052 QString MimeResult::mimeType() 0053 { 0054 return QLatin1String("application/json"); 0055 } 0056 0057 QVariant MimeResult::data() 0058 { 0059 return d->mimeBundle; 0060 } 0061 0062 QString MimeResult::plain() 0063 { 0064 return d->plain; 0065 } 0066 0067 QDomElement MimeResult::toXml(QDomDocument& doc) 0068 { 0069 qDebug()<<"saving mime result with types" << d->mimeBundle.keys(); 0070 QDomElement e=doc.createElement(QStringLiteral("Result")); 0071 e.setAttribute(QStringLiteral("type"), QStringLiteral("mime")); 0072 0073 for (const QString& key : d->mimeBundle.keys()) 0074 { 0075 QJsonDocument jsonDoc; 0076 QJsonObject obj; 0077 obj.insert(QLatin1String("content"), d->mimeBundle[key]); 0078 jsonDoc.setObject(obj); 0079 0080 QDomElement content = doc.createElement(QStringLiteral("Content")); 0081 content.setAttribute(QStringLiteral("key"), key); 0082 content.appendChild(doc.createTextNode(QString::fromUtf8(jsonDoc.toJson()))); 0083 e.appendChild(content); 0084 } 0085 0086 return e; 0087 } 0088 0089 QJsonValue Cantor::MimeResult::toJupyterJson() 0090 { 0091 QJsonObject root; 0092 if (executionIndex() != -1) 0093 { 0094 root.insert(QLatin1String("output_type"), QLatin1String("execute_result")); 0095 root.insert(QLatin1String("execution_count"), executionIndex()); 0096 } 0097 else 0098 root.insert(QLatin1String("output_type"), QLatin1String("display_data")); 0099 0100 root.insert(QLatin1String("data"), d->mimeBundle); 0101 root.insert(QLatin1String("metadata"), jupyterMetadata()); 0102 0103 return root; 0104 } 0105 0106 void Cantor::MimeResult::save(const QString& filename) 0107 { 0108 QFile file(filename); 0109 0110 if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) 0111 return; 0112 0113 QTextStream stream(&file); 0114 0115 QJsonDocument jsonDoc; 0116 jsonDoc.setObject(d->mimeBundle); 0117 0118 stream << jsonDoc.toJson(); 0119 0120 file.close(); 0121 }