Warning, file /pim/pim-data-exporter/core/xml/templateselection.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-FileCopyrightText: 2014-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "templateselection.h" 0008 #include "pimdataexportcore_debug.h" 0009 #include <QFile> 0010 #include <QXmlStreamWriter> 0011 0012 TemplateSelection::TemplateSelection() = default; 0013 0014 TemplateSelection::~TemplateSelection() 0015 { 0016 delete mStreamWriter; 0017 delete mStreamReader; 0018 } 0019 0020 Utils::StoredTypes TemplateSelection::loadStoredTypes(int &numberOfStep) 0021 { 0022 Utils::StoredTypes types = Utils::None; 0023 while (mStreamReader->readNextStartElement()) { 0024 if (mStreamReader->name() == QLatin1StringView("mailtransport")) { 0025 types |= Utils::MailTransport; 0026 numberOfStep++; 0027 } else if (mStreamReader->name() == QLatin1StringView("mail")) { 0028 types |= Utils::Mails; 0029 numberOfStep++; 0030 } else if (mStreamReader->name() == QLatin1StringView("resources")) { 0031 types |= Utils::Resources; 0032 numberOfStep++; 0033 } else if (mStreamReader->name() == QLatin1StringView("identity")) { 0034 types |= Utils::Identity; 0035 numberOfStep++; 0036 } else if (mStreamReader->name() == QLatin1StringView("config")) { 0037 types |= Utils::Config; 0038 numberOfStep++; 0039 } else if (mStreamReader->name() == QLatin1StringView("data")) { 0040 types |= Utils::Data; 0041 numberOfStep++; 0042 } 0043 mStreamReader->skipCurrentElement(); 0044 } 0045 return types; 0046 } 0047 0048 QMap<Utils::AppsType, Utils::importExportParameters> TemplateSelection::loadTemplate(const QString &path) 0049 { 0050 if (path.isEmpty()) { 0051 return {}; 0052 } 0053 QFile file(path); 0054 if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { 0055 qCDebug(PIMDATAEXPORTERCORE_LOG) << "Unable to load file:" << path; 0056 return {}; 0057 } else { 0058 mStreamReader = new QXmlStreamReader(&file); 0059 } 0060 0061 QMap<Utils::AppsType, Utils::importExportParameters> value; 0062 if (mStreamReader->readNextStartElement()) { 0063 // Compatibility with old version 0064 if ((mStreamReader->name() == QLatin1StringView("pimsettingexporter")) || (mStreamReader->name() == QLatin1StringView("pimdataexporter"))) { 0065 while (mStreamReader->readNextStartElement()) { 0066 Utils::AppsType type = Utils::Unknown; 0067 if (mStreamReader->name() == QLatin1StringView("kmail")) { 0068 type = Utils::KMail; 0069 } else if (mStreamReader->name() == QLatin1StringView("kaddressbook")) { 0070 type = Utils::KAddressBook; 0071 } else if (mStreamReader->name() == QLatin1StringView("kalarm")) { 0072 type = Utils::KAlarm; 0073 } else if (mStreamReader->name() == QLatin1StringView("korganizer")) { 0074 type = Utils::KOrganizer; 0075 } else if (mStreamReader->name() == QLatin1StringView("knotes")) { 0076 type = Utils::KNotes; 0077 } else if (mStreamReader->name() == QLatin1StringView("akregator")) { 0078 type = Utils::Akregator; 0079 } 0080 if (type != Utils::Unknown) { 0081 int numberOfSteps = 0; 0082 Utils::StoredTypes storedType = loadStoredTypes(numberOfSteps); 0083 if (storedType != Utils::None) { 0084 Utils::importExportParameters utils; 0085 utils.types = storedType; 0086 utils.numberSteps = numberOfSteps; 0087 value.insert(type, utils); 0088 } 0089 } else { 0090 mStreamReader->skipCurrentElement(); 0091 } 0092 } 0093 } else { 0094 qCDebug(PIMDATAEXPORTERCORE_LOG) << "Toplevel xml is not correct"; 0095 } 0096 } else { 0097 qCDebug(PIMDATAEXPORTERCORE_LOG) << "Impossible to parse file"; 0098 } 0099 0100 return value; 0101 } 0102 0103 void TemplateSelection::saveParameters(Utils::StoredTypes type) 0104 { 0105 if (type & Utils::MailTransport) { 0106 mStreamWriter->writeEmptyElement(QStringLiteral("mailtransport")); 0107 } 0108 if (type & Utils::Mails) { 0109 mStreamWriter->writeEmptyElement(QStringLiteral("mail")); 0110 } 0111 if (type & Utils::Resources) { 0112 mStreamWriter->writeEmptyElement(QStringLiteral("resources")); 0113 } 0114 if (type & Utils::Identity) { 0115 mStreamWriter->writeEmptyElement(QStringLiteral("identity")); 0116 } 0117 if (type & Utils::Config) { 0118 mStreamWriter->writeEmptyElement(QStringLiteral("config")); 0119 } 0120 if (type & Utils::Data) { 0121 mStreamWriter->writeEmptyElement(QStringLiteral("data")); 0122 } 0123 } 0124 0125 QString TemplateSelection::saveTemplate() const 0126 { 0127 return mSaveTemplate; 0128 } 0129 0130 void TemplateSelection::createTemplate(const QMap<Utils::AppsType, Utils::importExportParameters> &stored) 0131 { 0132 mSaveTemplate.clear(); 0133 delete mStreamWriter; 0134 mStreamWriter = new QXmlStreamWriter(&mSaveTemplate); 0135 mStreamWriter->setAutoFormatting(true); 0136 mStreamWriter->setAutoFormattingIndent(2); 0137 mStreamWriter->writeStartDocument(); 0138 0139 mStreamWriter->writeStartElement(QStringLiteral("pimdataexporter")); 0140 0141 QMap<Utils::AppsType, Utils::importExportParameters>::const_iterator i = stored.constBegin(); 0142 while (i != stored.constEnd()) { 0143 switch (i.key()) { 0144 case Utils::KMail: 0145 mStreamWriter->writeStartElement(QStringLiteral("kmail")); 0146 saveParameters(i.value().types); 0147 mStreamWriter->writeEndElement(); 0148 break; 0149 case Utils::KAddressBook: 0150 mStreamWriter->writeStartElement(QStringLiteral("kaddressbook")); 0151 saveParameters(i.value().types); 0152 mStreamWriter->writeEndElement(); 0153 break; 0154 case Utils::KAlarm: 0155 mStreamWriter->writeStartElement(QStringLiteral("kalarm")); 0156 saveParameters(i.value().types); 0157 mStreamWriter->writeEndElement(); 0158 break; 0159 case Utils::KOrganizer: 0160 mStreamWriter->writeStartElement(QStringLiteral("korganizer")); 0161 saveParameters(i.value().types); 0162 mStreamWriter->writeEndElement(); 0163 break; 0164 case Utils::KNotes: 0165 mStreamWriter->writeStartElement(QStringLiteral("knotes")); 0166 saveParameters(i.value().types); 0167 mStreamWriter->writeEndElement(); 0168 break; 0169 case Utils::Akregator: 0170 mStreamWriter->writeStartElement(QStringLiteral("akregator")); 0171 saveParameters(i.value().types); 0172 mStreamWriter->writeEndElement(); 0173 break; 0174 case Utils::Unknown: 0175 qCCritical(PIMDATAEXPORTERCORE_LOG) << "Code must not use this enum here"; 0176 break; 0177 } 0178 ++i; 0179 } 0180 mStreamWriter->writeEndElement(); 0181 }